From 56fb75c2ec7ff913fb8638d69a04fe868d35e96c Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 9 Aug 2014 09:04:38 -0700 Subject: [PATCH] Rearrange tests to simplify inclusion in other projects. --- CMakeLists.txt | 54 ++------------------- test/CMakeLists.txt | 80 ++++++++++++++++---------------- test/compile-test/CMakeLists.txt | 46 ++++++++++++++++++ 3 files changed, 91 insertions(+), 89 deletions(-) create mode 100644 test/compile-test/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index b3624ef1..5215f79b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,11 +70,13 @@ if (CPP11_FLAG AND FMT_EXTRA_TESTS) set_target_properties(format PROPERTIES COMPILE_FLAGS ${CPP11_FLAG}) # Test compilation with default flags. file(GLOB src RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} test/*.cc test/*.h) - add_library(testformat ${FMT_SOURCES} ${src}) + add_library(testformat ${FMT_SOURCE_FILES} ${src}) endif () add_subdirectory(doc) +include_directories(.) + # We compile Google Test ourselves instead of using pre-compiled libraries. # See the Google Test FAQ "Why is it not recommended to install a # pre-compiled copy of Google Test (for example, into /usr/local)?" @@ -94,55 +96,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") endif () enable_testing() - -include_directories(.) - -set(TEST_MAIN_SRC - test/test-main.cc test/gtest-extra.cc test/gtest-extra.h test/util.cc) -add_library(test-main ${TEST_MAIN_SRC}) -target_link_libraries(test-main gtest format) - -# Adds a test. -# Usage: add_fmt_test(name libs srcs...) -function(add_fmt_test name libs) - add_executable(${name} test/${name}.cc ${ARGN}) - target_link_libraries(${name} ${libs}) - add_test(${name} ${name}) -endfunction() - -add_fmt_test(gtest-extra-test test-main) -add_fmt_test(format-test test-main) -add_fmt_test(printf-test test-main) -foreach (target format-test printf-test) - if (CMAKE_COMPILER_IS_GNUCXX) - set_target_properties(${target} PROPERTIES COMPILE_FLAGS - "-Wall -Wextra -pedantic -Wno-long-long -Wno-variadic-macros") - endif () - if (CPP11_FLAG) - set_target_properties(${target} PROPERTIES COMPILE_FLAGS ${CPP11_FLAG}) - endif () -endforeach () -add_fmt_test(util-test test-main) - -add_executable(macro-test test/macro-test.cc ${FMT_SOURCES} ${TEST_MAIN_SRC}) -set_target_properties(macro-test - PROPERTIES COMPILE_DEFINITIONS "FMT_USE_VARIADIC_TEMPLATES=0") -target_link_libraries(macro-test gtest) - -if (HAVE_OPEN) - add_executable(posix-test test/posix-test.cc ${FMT_SOURCES} ${TEST_MAIN_SRC}) - set_target_properties(posix-test - PROPERTIES COMPILE_DEFINITIONS "FMT_INCLUDE_POSIX_TEST=1") - target_link_libraries(posix-test gtest) - add_test(posix-test posix-test) -endif () - -add_test(compile-test ${CMAKE_CTEST_COMMAND} - --build-and-test - "${CMAKE_CURRENT_SOURCE_DIR}/test" - "${CMAKE_CURRENT_BINARY_DIR}/test" - --build-generator ${CMAKE_GENERATOR} - --build-makeprogram ${CMAKE_MAKE_PROGRAM}) +add_subdirectory(test) if (EXISTS .gitignore) # Get the list of ignored files from .gitignore. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5c80bd26..3e6bf5ab 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,46 +1,48 @@ -# Test if compile errors are produced where necessary. +include_directories(..) -cmake_minimum_required(VERSION 2.8) +set(TEST_MAIN_SRC + test/test-main.cc test/gtest-extra.cc test/gtest-extra.h test/util.cc) +add_library(test-main ${TEST_MAIN_SRC}) +target_link_libraries(test-main gtest format) -include(CheckCXXSourceCompiles) -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/..) +# Adds a test. +# Usage: add_fmt_test(name libs srcs...) +function(add_fmt_test name libs) + add_executable(${name} test/${name}.cc ${ARGN}) + target_link_libraries(${name} ${libs}) + add_test(${name} ${name}) +endfunction() -function (expect_compile_error code) - check_cxx_source_compiles(" - #include \"format.cc\" - int main() { - ${code} - } - " compiles) - set (does_compile ${compiles}) - # Unset the CMake cache variable compiles. Otherwise the compile test will - # just use cached information next time it runs. - unset(compiles CACHE) - if (does_compile) - message(FATAL_ERROR "No compile error for: ${code}") +add_fmt_test(gtest-extra-test test-main) +add_fmt_test(format-test test-main) +add_fmt_test(printf-test test-main) +foreach (target format-test printf-test) + if (CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(${target} PROPERTIES COMPILE_FLAGS + "-Wall -Wextra -pedantic -Wno-long-long -Wno-variadic-macros") endif () -endfunction () + if (CPP11_FLAG) + set_target_properties(${target} PROPERTIES COMPILE_FLAGS ${CPP11_FLAG}) + endif () +endforeach () +add_fmt_test(util-test test-main) -# Array is noncopyable. -expect_compile_error("fmt::internal::Array a, b(a);") -expect_compile_error("fmt::internal::Array a, b; b = a;") +add_executable(macro-test test/macro-test.cc ${FMT_SOURCES} ${TEST_MAIN_SRC}) +set_target_properties(macro-test + PROPERTIES COMPILE_DEFINITIONS "FMT_USE_VARIADIC_TEMPLATES=0") +target_link_libraries(macro-test gtest) -# Writer is noncopyable. -expect_compile_error("const fmt::Writer a, b(a);") -expect_compile_error("fmt::Writer a, b; b = a;") +if (HAVE_OPEN) + add_executable(posix-test test/posix-test.cc ${FMT_SOURCES} ${TEST_MAIN_SRC}) + set_target_properties(posix-test + PROPERTIES COMPILE_DEFINITIONS "FMT_INCLUDE_POSIX_TEST=1") + target_link_libraries(posix-test gtest) + add_test(posix-test posix-test) +endif () -# MakeArg doesn't accept [const] volatile char *. -expect_compile_error("volatile char s[] = \"test\"; (fmt::internal::MakeArg)(s);") -expect_compile_error("const volatile char s[] = \"test\"; (fmt::internal::MakeArg)(s);") - -# MakeArg doesn't accept wchar_t. -expect_compile_error("fmt::internal::MakeArg(L'a');") -expect_compile_error("fmt::internal::MakeArg(L\"test\");") - -# Writing a wide character to a character stream Writer is forbidden. -expect_compile_error("fmt::Writer() << L'a';") -expect_compile_error("fmt::Writer() << fmt::pad(\"abc\", 5, L' ');") -expect_compile_error("fmt::Writer() << fmt::pad(42, 5, L' ');") - -# Formatting a wide character with a narrow format string is forbidden. -expect_compile_error("fmt::format(\"{}\", L'a';") +add_test(compile-test ${CMAKE_CTEST_COMMAND} + --build-and-test + "${CMAKE_CURRENT_SOURCE_DIR}/test" + "${CMAKE_CURRENT_BINARY_DIR}/test" + --build-generator ${CMAKE_GENERATOR} + --build-makeprogram ${CMAKE_MAKE_PROGRAM}) diff --git a/test/compile-test/CMakeLists.txt b/test/compile-test/CMakeLists.txt new file mode 100644 index 00000000..c67441b5 --- /dev/null +++ b/test/compile-test/CMakeLists.txt @@ -0,0 +1,46 @@ +# Test if compile errors are produced where necessary. + +cmake_minimum_required(VERSION 2.8) + +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/../..) + +function (expect_compile_error code) + check_cxx_source_compiles(" + #include \"format.cc\" + int main() { + ${code} + } + " compiles) + set (does_compile ${compiles}) + # Unset the CMake cache variable compiles. Otherwise the compile test will + # just use cached information next time it runs. + unset(compiles CACHE) + if (does_compile) + message(FATAL_ERROR "No compile error for: ${code}") + endif () +endfunction () + +# Array is noncopyable. +expect_compile_error("fmt::internal::Array a, b(a);") +expect_compile_error("fmt::internal::Array a, b; b = a;") + +# Writer is noncopyable. +expect_compile_error("const fmt::Writer a, b(a);") +expect_compile_error("fmt::Writer a, b; b = a;") + +# MakeArg doesn't accept [const] volatile char *. +expect_compile_error("volatile char s[] = \"test\"; (fmt::internal::MakeArg)(s);") +expect_compile_error("const volatile char s[] = \"test\"; (fmt::internal::MakeArg)(s);") + +# MakeArg doesn't accept wchar_t. +expect_compile_error("fmt::internal::MakeArg(L'a');") +expect_compile_error("fmt::internal::MakeArg(L\"test\");") + +# Writing a wide character to a character stream Writer is forbidden. +expect_compile_error("fmt::Writer() << L'a';") +expect_compile_error("fmt::Writer() << fmt::pad(\"abc\", 5, L' ');") +expect_compile_error("fmt::Writer() << fmt::pad(42, 5, L' ');") + +# Formatting a wide character with a narrow format string is forbidden. +expect_compile_error("fmt::format(\"{}\", L'a';")