summaryrefslogtreecommitdiff
path: root/libnbtplusplus/test/CMakeLists.txt
blob: fab1f58c0015d8cef950fdefb4c6d49549aa6e8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# SPDX-FileCopyrightText: 2013, 2015 ljfa-ag <ljfa-ag@web.de>
#
# SPDX-License-Identifier: LGPL-3.0-or-later

if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64)
        set(OBJCOPY_TARGET "elf64-x86-64")
        set(OBJCOPY_ARCH "x86_64")
    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
        set(OBJCOPY_TARGET "elf32-i386")
        set(OBJCOPY_ARCH "i386")
    else()
        message(AUTHOR_WARNING "This is not a platform that would support testing nbt++")
        return()
    endif()
else()
    message(AUTHOR_WARNING "This is not a platform that would support testing nbt++")
    return()
endif()

enable_testing()
find_package(CxxTest REQUIRED)

include_directories(${libnbt++_SOURCE_DIR}/include)
include_directories(${CXXTEST_INCLUDE_DIR})

function(build_data out_var)
    set(result)
    foreach(in_f ${ARGN})
        set(out_f "${CMAKE_CURRENT_BINARY_DIR}/testfiles/${in_f}.obj")
        add_custom_command(
            COMMAND mkdir -p "${CMAKE_CURRENT_BINARY_DIR}/testfiles"
            COMMAND ${CMAKE_OBJCOPY}  --prefix-symbol=_  --input-target=binary  --output-target=${OBJCOPY_TARGET} "${in_f}" "${out_f}"
            DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/testfiles/${in_f}
            OUTPUT ${out_f}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/testfiles/
            VERBATIM
        )
        SET_SOURCE_FILES_PROPERTIES(
            ${out_f}
            PROPERTIES
            EXTERNAL_OBJECT true
            GENERATED true
        )
        list(APPEND result ${out_f})
    endforeach()
    set(${out_var} "${result}" PARENT_SCOPE)
endfunction()

build_data(DATA_OBJECTS
    bigtest.nbt
    bigtest.zlib
    bigtest_corrupt.nbt
    bigtest_eof.nbt
    bigtest_uncompr
    errortest_eof1
    errortest_eof2
    errortest_neg_length
    errortest_noend
    littletest_uncompr
    toplevel_string
    trailing_data.zlib
)
add_library(NbtTestData STATIC ${DATA_OBJECTS})
set_property(TARGET NbtTestData PROPERTY LINKER_LANGUAGE CXX)

#Specifies that the directory containing the testfiles get copied when the target is built
function(use_testfiles target)
    add_custom_command(TARGET ${target} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E
        copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/testfiles ${CMAKE_CURRENT_BINARY_DIR})
endfunction()

function(stop_warnings target)
    target_compile_options(${target} PRIVATE
        -Wno-unused-value
        -Wno-self-assign-overloaded
    )
endfunction()

if(NBT_USE_ZLIB)
    set(EXTRA_TEST_LIBS ${ZLIB_LIBRARY})
endif()

CXXTEST_ADD_TEST(nbttest nbttest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nbttest.h)
target_link_libraries(nbttest ${NBT_NAME})
stop_warnings(nbttest)

CXXTEST_ADD_TEST(endian_str_test endian_str_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/endian_str_test.h)
target_link_libraries(endian_str_test ${NBT_NAME})
stop_warnings(endian_str_test)

CXXTEST_ADD_TEST(read_test read_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/read_test.h)
target_link_libraries(read_test ${NBT_NAME} ${EXTRA_TEST_LIBS} NbtTestData)
stop_warnings(read_test)

CXXTEST_ADD_TEST(write_test write_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/write_test.h)
target_link_libraries(write_test ${NBT_NAME} ${EXTRA_TEST_LIBS} NbtTestData)
stop_warnings(write_test)

if(NBT_USE_ZLIB)
    CXXTEST_ADD_TEST(zlibstream_test zlibstream_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/zlibstream_test.h)
    target_link_libraries(zlibstream_test ${NBT_NAME} ${EXTRA_TEST_LIBS} NbtTestData)
    stop_warnings(zlibstream_test)
endif()

add_executable(format_test format_test.cpp)
target_link_libraries(format_test ${NBT_NAME})
add_test(format_test format_test)
stop_warnings(format_test)

# Optional local test executable to verify value assignments (developer helper)
option(NBT_BUILD_LOCAL_TEST "Build a small local test executable for value assignments" ON)
if(NBT_BUILD_LOCAL_TEST)
    CXXTEST_ADD_TEST(test_value test_value.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_value.h)
    target_link_libraries(test_value ${NBT_NAME})
    stop_warnings(test_value)
endif()