CMakeLists.txt 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. enable_testing()
  2. # MUST do this before including IDNA
  3. # because it will otherwise poison GTest with BUILD_GMOCK=OFF
  4. find_package(GTest CONFIG REQUIRED COMPONENTS gtest gmock)
  5. find_package(jsoncpp REQUIRED)
  6. find_package(CURL REQUIRED)
  7. # ICU Components Reference:
  8. # https://cmake.org/cmake/help/latest/module/FindICU.html
  9. # ICU components = data, i18n, io, le, lx, test, tu and uc.
  10. find_package(ICU 77.1 COMPONENTS uc i18n)
  11. FetchContent_Declare(
  12. json_schema_test_suite
  13. GIT_REPOSITORY https://github.com/json-schema-org/JSON-Schema-Test-Suite.git
  14. GIT_TAG Test-JSON-Schema-Acceptance-1.037
  15. )
  16. FetchContent_MakeAvailable(json_schema_test_suite)
  17. include(GoogleTest)
  18. set(JVALIDATE_UNIT_TESTS
  19. annotation_test extension_test validation_visitor_test enum_test detail_test
  20. regex_test adapter_test jsoncpp_adapter_test)
  21. set(JVALIDATE_TESTS selfvalidate_test ${JVALIDATE_UNIT_TESTS})
  22. # Each test executable matches with its filename.
  23. foreach(CASE IN LISTS JVALIDATE_TESTS)
  24. add_executable(${CASE} ${CASE}.cxx)
  25. endforeach()
  26. if (JVALIDATE_COVERAGE)
  27. # Include all test files in a single executable for coverage purposes
  28. add_executable(jvalidate_mono_test $<LIST:TRANSFORM,${JVALIDATE_TESTS},APPEND,.cxx>)
  29. # Disable main() in other source files
  30. target_compile_definitions(jvalidate_mono_test PRIVATE JVALIDATE_MONOTEST)
  31. # Enable coverage
  32. target_compile_options(jvalidate_mono_test PRIVATE -fprofile-instr-generate -fcoverage-mapping)
  33. target_link_options(jvalidate_mono_test PRIVATE -fprofile-instr-generate -fcoverage-mapping)
  34. # Add to the list of tests in order to perform the rest of the test setup...
  35. list(APPEND JVALIDATE_TESTS jvalidate_mono_test)
  36. endif()
  37. foreach(CASE IN LISTS JVALIDATE_TESTS)
  38. target_link_libraries(${CASE} GTest::gtest GTest::gmock jsoncpp_lib CURL::libcurl)
  39. target_compile_definitions(${CASE} PRIVATE JVALIDATE_USE_EXCEPTIONS)
  40. if (${json_schema_test_suite_POPULATED})
  41. target_compile_definitions(${CASE}
  42. PUBLIC
  43. JVALIDATE_JSON_SCHEMA_TEST_SUITE_DIR="${json_schema_test_suite_SOURCE_DIR}"
  44. )
  45. endif()
  46. if (ICU_FOUND)
  47. target_compile_definitions(${CASE} PUBLIC JVALIDATE_HAS_ICU=1)
  48. target_link_libraries(${CASE} ICU::uc ICU::i18n)
  49. else()
  50. target_compile_definitions(${CASE} PUBLIC JVALIDATE_HAS_ICU=0)
  51. endif()
  52. endforeach()
  53. string(
  54. JOIN ":"
  55. SelfValidateTest_Unsupported
  56. "*optional_content"
  57. "*optional_*ecmascript_regex"
  58. "*optional_zeroTerminatedFloats"
  59. "*optional_format*"
  60. )
  61. set(SelfValidateTest_Unsupported_Suites "")
  62. set(SelfValidateTest_Unsupported_Cases "*leap second")
  63. if (NOT ICU_FOUND)
  64. string(
  65. APPEND SelfValidateTest_Unsupported
  66. ":*optional_non_bmp_regex"
  67. )
  68. endif()
  69. foreach(CASE IN LISTS JVALIDATE_UNIT_TESTS)
  70. gtest_discover_tests(${CASE})
  71. endforeach()
  72. gtest_discover_tests(selfvalidate_test
  73. EXTRA_ARGS --json_suite_filter=-${SelfValidateTest_Unsupported_Suites}
  74. --json_case_filter=-${SelfValidateTest_Unsupported_Cases}
  75. TEST_FILTER -${SelfValidateTest_Unsupported})