Skip to content

Commit acf4659

Browse files
committed
Testing: Use CTest fixtures to manipulate files
- Fixes jacobwilliams#413 - Use fixtures to delete old json outputs before re-running tests, then copy pristine inputs back into the build directory
1 parent 414003e commit acf4659

File tree

4 files changed

+79
-44
lines changed

4 files changed

+79
-44
lines changed

CMakeLists.txt

+47-32
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,11 @@ if ( ENABLE_TESTS )
289289

290290
find_program ( JSONLINT jsonlint )
291291
find_program ( DIFF diff )
292-
file ( COPY "${CMAKE_SOURCE_DIR}/files"
293-
DESTINATION "${CMAKE_BINARY_DIR}/" )
294292

295-
set ( DATA_DIR "${CMAKE_BINARY_DIR}/files" )
293+
set ( DATA_DIR "${CMAKE_SOURCE_DIR}/files" )
296294

297295
set_directory_properties ( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
298-
"${DATA_DIR}/test2.json;${DATA_DIR}/test4.json;${FORD_CLEAN_OUTPUTS}" )
296+
"${FORD_CLEAN_OUTPUTS}" )
299297

300298
# Validate input
301299
if ( JSONLINT )
@@ -309,26 +307,38 @@ if ( ENABLE_TESTS )
309307
foreach ( VALID_JSON ${JSON_INPUTS} )
310308
get_filename_component ( TESTNAME "${VALID_JSON}" NAME )
311309
add_test ( NAME validate-${TESTNAME}
312-
WORKING_DIRECTORY "${DATA_DIR}/inputs"
313-
COMMAND ${JSONLINT} "--allow=nonescape-characters" "${VALID_JSON}" )
310+
WORKING_DIRECTORY "${DATA_DIR}/inputs"
311+
COMMAND ${JSONLINT} "--allow=nonescape-characters" "${VALID_JSON}" )
314312
endforeach ()
315313

316314
foreach ( INVALID ${INVALID_JSON} )
317315
get_filename_component ( TESTNAME "${INVALID}" NAME )
318316
add_test ( NAME validate-${TESTNAME}
319-
WORKING_DIRECTORY "${DATA_DIR}/inputs"
320-
COMMAND ${JSONLINT} "${INVALID}" )
317+
WORKING_DIRECTORY "${DATA_DIR}/inputs"
318+
COMMAND ${JSONLINT} "${INVALID}" )
321319
set_property ( TEST validate-${TESTNAME}
322-
PROPERTY
323-
WILL_FAIL TRUE)
320+
PROPERTY
321+
WILL_FAIL TRUE)
324322
endforeach ()
325323
endif ()
326324

325+
add_test(NAME jf-cleanup-fixture
326+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
327+
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR}/files")
328+
set_tests_properties(jf-cleanup-fixture
329+
PROPERTIES FIXTURES_SETUP JF)
330+
add_test(NAME jf-setup-fixture
331+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
332+
COMMAND ${CMAKE_COMMAND} -E copy_directory "${DATA_DIR}" "${CMAKE_BINARY_DIR}/files")
333+
set_tests_properties(jf-setup-fixture
334+
PROPERTIES FIXTURES_SETUP JF
335+
DEPENDS jf-cleanup-fixture)
336+
327337
set ( UNIT_TESTS '' )
328338
foreach ( UNIT_TEST ${JF_TEST_SRCS} )
329339
get_filename_component ( TEST ${UNIT_TEST} NAME_WE )
330340
if(MSVC_IDE)
331-
link_directories(${CMAKE_BINARY_DIR}/lib)
341+
link_directories(${CMAKE_BINARY_DIR}/lib)
332342
endif()
333343
add_executable ( ${TEST} EXCLUDE_FROM_ALL ${UNIT_TEST} )
334344
target_link_libraries ( ${TEST} ${LIB_NAME} )
@@ -340,11 +350,13 @@ if ( ENABLE_TESTS )
340350
add_test( NAME ${TEST}
341351
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
342352
COMMAND ./${TEST})
353+
set_tests_properties( ${TEST}
354+
PROPERTIES FIXTURES_REQUIRED JF)
343355
list ( APPEND UNIT_TESTS ${TEST} )
344356
if ( JSONLINT )
345357
set_property ( TEST ${TEST}
346-
APPEND
347-
PROPERTY DEPENDS validate-input1 validate-input2 )
358+
APPEND
359+
PROPERTY DEPENDS validate-input1 validate-input2 )
348360
endif()
349361
endforeach ( UNIT_TEST )
350362

@@ -353,34 +365,37 @@ if ( ENABLE_TESTS )
353365
PROPERTY DEPENDS jf_test_02 )
354366

355367
# Validate output
368+
file( GLOB EXPECTED_OUTPUTS "${DATA_DIR}/expected-outputs/*.json")
369+
if (NOT ${ENABLE_UNICODE})
370+
list( REMOVE_ITEM EXPECTED_OUTPUTS "${DATA_DIR}/expected-outputs/hello-world-ucs4.json")
371+
endif()
372+
list( REMOVE_ITEM EXPECTED_OUTPUTS "${DATA_DIR}/expected-outputs/example2.json")
373+
356374
if ( JSONLINT )
357-
file ( GLOB JSON_FILES "${DATA_DIR}/*.json" )
358-
foreach ( JSON_FILE ${JSON_FILES} )
375+
foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
359376
get_filename_component ( TESTNAME ${JSON_FILE} NAME )
360377
add_test ( NAME validate-output-${TESTNAME}
361-
WORKING_DIRECTORY "${DATA_DIR}"
362-
COMMAND ${JSONLINT} "--allow=nonescape-characters" ${TESTNAME} )
378+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/files"
379+
COMMAND ${JSONLINT} "--allow=nonescape-characters" ${TESTNAME} )
363380
set_property ( TEST validate-output-${TESTNAME}
364-
APPEND
365-
PROPERTY
366-
DEPENDS ${UNIT_TESTS}
367-
REQUIRED_FILES ${JSON_FILES} )
381+
APPEND
382+
PROPERTY
383+
DEPENDS ${UNIT_TESTS})
368384
endforeach ( JSON_FILE )
369385
endif ()
370386

371387
# Check output for differences
372388
if ( DIFF )
373-
file ( GLOB JSON_FILES "${DATA_DIR}/*.json" )
374-
foreach ( JSON_FILE ${JSON_FILES} )
375-
get_filename_component ( JSON_STEM ${JSON_FILE} NAME_WE )
376-
add_test ( NAME regression-${JSON_STEM}.json
377-
WORKING_DIRECTORY "${DATA_DIR}"
378-
COMMAND ${DIFF} -q ${JSON_STEM}.json expected-outputs/${JSON_STEM}.json )
379-
set_property ( TEST regression-${JSON_STEM}.json
380-
APPEND
381-
PROPERTY
382-
DEPENDS ${UNIT_TESTS}
383-
REQUIRED_FILES ${JSON_FILES} )
389+
foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
390+
get_filename_component (OUTPUT ${JSON_FILE} NAME )
391+
add_test ( NAME regression-${OUTPUT}
392+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/files"
393+
COMMAND ${DIFF} -q ${OUTPUT} expected-outputs/${OUTPUT} )
394+
set_property ( TEST regression-${OUTPUT}
395+
APPEND
396+
PROPERTY
397+
DEPENDS ${UNIT_TESTS}
398+
REQUIRED_FILES ${EXPECTED_OUTPUTS} )
384399
endforeach ( JSON_FILE )
385400
else ()
386401
message ( WARNING

files/expected-outputs/test12.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
"only one value"
8686
],
8787
"page": [
88-
"The quick brown fox",
88+
"The quick brown fox ",
8989
"jumps over the lazy dog."
9090
]
9191
}

files/expected-outputs/test2.json

+18-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"inputs": {
3-
"t0": 0.1E+0,
4-
"tf": 0.11E+1,
3+
"t0": 0.10000000000000001E+0,
4+
"tf": 0.11000000000000001E+1,
55
"x0": 0.9999E+4,
66
"integer_scalar": 1,
77
"integer_array": [
@@ -20,7 +20,14 @@
2020
false,
2121
true
2222
],
23-
"null_variable": null
23+
"null_variable": null,
24+
"special chars": "\\ /",
25+
"special chars in key \\ /": "\\ /",
26+
"bspace": "\b",
27+
"horizontal_tab": "\t",
28+
"newline": "\n",
29+
"formfeed": "\f",
30+
"carriage_return": "\r"
2431
},
2532
"trajectory": [
2633
{
@@ -58,35 +65,35 @@
5865
},
5966
{
6067
"VARIABLE": "Vx",
61-
"UNITS": "km\/s",
68+
"UNITS": "km/s",
6269
"FRAME": "J2000",
6370
"CENTER": "EARTH",
6471
"DATA": [
6572
0.1E-2,
6673
0.2E-2,
67-
0.3E-2
74+
0.30000000000000001E-2
6875
]
6976
},
7077
{
7178
"VARIABLE": "Vy",
72-
"UNITS": "km\/s",
79+
"UNITS": "km/s",
7380
"FRAME": "J2000",
7481
"CENTER": "EARTH",
7582
"DATA": [
7683
0.2E-2,
7784
0.2E-1,
78-
0.3E-2
85+
0.30000000000000001E-2
7986
]
8087
},
8188
{
8289
"VARIABLE": "Vz",
83-
"UNITS": "km\/s",
90+
"UNITS": "km/s",
8491
"FRAME": "J2000",
8592
"CENTER": "EARTH",
8693
"DATA": [
87-
0.3E-2,
88-
0.3E-1,
89-
0.4E-1
94+
0.30000000000000001E-2,
95+
0.29999999999999999E-1,
96+
0.40000000000000001E-1
9097
]
9198
}
9299
]

files/expected-outputs/test21.json

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"value": [
3+
0.14142135623730951E+1,
4+
0.17320508075688772E+1,
5+
0.26457513110645907E+1,
6+
0.14142135623730951E+3,
7+
0.54772255750516615E+3,
8+
0.26457513110645905E+4,
9+
0.17976931348623157E+309,
10+
0.22250738585072014E-307,
11+
0.22204460492503131E-15
12+
]
13+
}

0 commit comments

Comments
 (0)