Skip to content

Commit ffca283

Browse files
Merge pull request #421 from nrc-fuels/test-fixtures-413
Test fixtures 413
2 parents b41abbb + a7e7978 commit ffca283

File tree

6 files changed

+126
-52
lines changed

6 files changed

+126
-52
lines changed

.travis.yml

+16-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ matrix:
2323
- kalakris-cmake
2424
- ubuntu-toolchain-r-test
2525
packages:
26+
- nodejs
27+
- npm
2628
- gfortran-6
2729
- binutils
2830
- cmake
@@ -44,6 +46,8 @@ matrix:
4446
sources:
4547
- ubuntu-toolchain-r-test
4648
packages:
49+
- nodejs
50+
- npm
4751
- gfortran-6
4852
- binutils
4953
- python-pip
@@ -64,6 +68,8 @@ matrix:
6468
sources:
6569
- ubuntu-toolchain-r-test
6670
packages:
71+
- nodejs
72+
- npm
6773
- gfortran-7
6874
- binutils
6975
- python-pip
@@ -82,6 +88,8 @@ matrix:
8288
sources:
8389
- ubuntu-toolchain-r-test
8490
packages:
91+
- nodejs
92+
- npm
8593
- gfortran-8
8694
- binutils
8795
- python-pip
@@ -100,6 +108,8 @@ matrix:
100108
sources:
101109
- ubuntu-toolchain-r-test
102110
packages:
111+
- nodejs
112+
- npm
103113
- gfortran-9
104114
- binutils
105115
- python-pip
@@ -126,7 +136,12 @@ install:
126136
- pip install --upgrade graphviz
127137
- (pip install --upgrade FoBiS.py==2.2.8 && FoBiS.py --version)
128138
- (pip install --upgrade ford==6.0.0 && ford --version)
129-
- (pip install --upgrade git+https://github.com/dmeranda/demjson.git && jsonlint --version)
139+
- export NPM_PACKAGES="${HOME}/.npm-packages"
140+
- mkdir "${HOME}/.npm-packages" || true
141+
- npm config set prefix "${HOME}/.npm-packages"
142+
- export PATH="${HOME}/.npm-packages/bin:$PATH"
143+
- npm install -g jsonlint
144+
- jsonlint --version || true # Why would you exit non-zero from --version ???!?!?! wth
130145

131146
before_script:
132147
- |

CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@
3838

3939
[Complete Changeset](https://github.com/jacobwilliams/json-fortran/compare/7.1.0...HEAD)
4040

41+
**Enhancements:**
42+
43+
- Allow linking to JSON-Fortran from GFortran programs using
44+
[OpenCoarrays](https://github.com/sourceryinstitute/OpenCoarrays#readme)
45+
as the coarray runtime implementation. Use the
46+
`-DJSON_FORTRAN_USE_OpenCoarrays:BOOL=ON` option to cmake to enable
47+
this. (NOTE: The fact that this is required may be a bug in
48+
GFortran.)
49+
4150
### [7.1.0](https://github.com/jacobwilliams/json-fortran/tree/7.1.0) (2019-06-23)
4251

4352
[Complete Changeset](https://github.com/jacobwilliams/json-fortran/compare/7.0.0...7.1.0)

CMakeLists.txt

+69-39
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ include ( "cmake/checkOutOfSource.cmake" )
3636
#---------------------
3737
project ( jsonfortran NONE )
3838

39+
if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU)
40+
option(JSON_FORTRAN_USE_OpenCoarrays
41+
"Build JSON-Fortran with support for linking against OpenCoarray programs" OFF)
42+
endif()
43+
if(JSON_FORTRAN_USE_OpenCoarrays)
44+
find_package(OpenCoarrays)
45+
endif()
46+
3947
#---------------------
4048
# Real and Integer kinds
4149
#---------------------
@@ -161,6 +169,14 @@ endif ()
161169
set ( LIB_NAME ${CMAKE_PROJECT_NAME} )
162170
add_library ( ${LIB_NAME} SHARED ${JF_LIB_SRCS} )
163171
add_library ( ${LIB_NAME}-static STATIC ${JF_LIB_SRCS} )
172+
173+
if(JSON_FORTRAN_USE_OpenCoarrays)
174+
target_link_libraries(${LIB_NAME}
175+
PRIVATE OpenCoarrays::caf_mpi_static)
176+
target_link_libraries(${LIB_NAME}-static
177+
PRIVATE OpenCoarrays::caf_mpi_static)
178+
endif()
179+
164180
set_target_properties ( ${LIB_NAME}-static
165181
PROPERTIES
166182
OUTPUT_NAME ${LIB_NAME}
@@ -273,14 +289,11 @@ if ( ENABLE_TESTS )
273289
add_dependencies(build_tests ${LIB_NAME} ${LIB_NAME}-static)
274290

275291
find_program ( JSONLINT jsonlint )
276-
find_program ( DIFF diff )
277-
file ( COPY "${CMAKE_SOURCE_DIR}/files"
278-
DESTINATION "${CMAKE_BINARY_DIR}/" )
279292

280-
set ( DATA_DIR "${CMAKE_BINARY_DIR}/files" )
293+
set ( DATA_DIR "${CMAKE_SOURCE_DIR}/files" )
281294

282295
set_directory_properties ( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
283-
"${DATA_DIR}/test2.json;${DATA_DIR}/test4.json;${FORD_CLEAN_OUTPUTS}" )
296+
"${FORD_CLEAN_OUTPUTS}" )
284297

285298
# Validate input
286299
if ( JSONLINT )
@@ -294,26 +307,38 @@ if ( ENABLE_TESTS )
294307
foreach ( VALID_JSON ${JSON_INPUTS} )
295308
get_filename_component ( TESTNAME "${VALID_JSON}" NAME )
296309
add_test ( NAME validate-${TESTNAME}
297-
WORKING_DIRECTORY "${DATA_DIR}/inputs"
298-
COMMAND ${JSONLINT} "--allow=nonescape-characters" "${VALID_JSON}" )
310+
WORKING_DIRECTORY "${DATA_DIR}/inputs"
311+
COMMAND ${JSONLINT} "--allow=nonescape-characters" "${VALID_JSON}" )
299312
endforeach ()
300313

301314
foreach ( INVALID ${INVALID_JSON} )
302315
get_filename_component ( TESTNAME "${INVALID}" NAME )
303316
add_test ( NAME validate-${TESTNAME}
304-
WORKING_DIRECTORY "${DATA_DIR}/inputs"
305-
COMMAND ${JSONLINT} "${INVALID}" )
317+
WORKING_DIRECTORY "${DATA_DIR}/inputs"
318+
COMMAND ${JSONLINT} "${INVALID}" )
306319
set_property ( TEST validate-${TESTNAME}
307-
PROPERTY
308-
WILL_FAIL TRUE)
320+
PROPERTY
321+
WILL_FAIL TRUE)
309322
endforeach ()
310323
endif ()
311324

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+
312337
set ( UNIT_TESTS '' )
313338
foreach ( UNIT_TEST ${JF_TEST_SRCS} )
314339
get_filename_component ( TEST ${UNIT_TEST} NAME_WE )
315340
if(MSVC_IDE)
316-
link_directories(${CMAKE_BINARY_DIR}/lib)
341+
link_directories(${CMAKE_BINARY_DIR}/lib)
317342
endif()
318343
add_executable ( ${TEST} EXCLUDE_FROM_ALL ${UNIT_TEST} )
319344
target_link_libraries ( ${TEST} ${LIB_NAME} )
@@ -325,11 +350,13 @@ if ( ENABLE_TESTS )
325350
add_test( NAME ${TEST}
326351
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
327352
COMMAND ./${TEST})
353+
set_tests_properties( ${TEST}
354+
PROPERTIES FIXTURES_REQUIRED JF)
328355
list ( APPEND UNIT_TESTS ${TEST} )
329356
if ( JSONLINT )
330357
set_property ( TEST ${TEST}
331-
APPEND
332-
PROPERTY DEPENDS validate-input1 validate-input2 )
358+
APPEND
359+
PROPERTY DEPENDS validate-input1 validate-input2 )
333360
endif()
334361
endforeach ( UNIT_TEST )
335362

@@ -338,39 +365,42 @@ if ( ENABLE_TESTS )
338365
PROPERTY DEPENDS jf_test_02 )
339366

340367
# 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+
341374
if ( JSONLINT )
342-
file ( GLOB JSON_FILES "${DATA_DIR}/*.json" )
343-
foreach ( JSON_FILE ${JSON_FILES} )
375+
foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
344376
get_filename_component ( TESTNAME ${JSON_FILE} NAME )
345377
add_test ( NAME validate-output-${TESTNAME}
346-
WORKING_DIRECTORY "${DATA_DIR}"
347-
COMMAND ${JSONLINT} "--allow=nonescape-characters" ${TESTNAME} )
378+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/files"
379+
COMMAND ${JSONLINT} "--allow=nonescape-characters" ${TESTNAME} )
348380
set_property ( TEST validate-output-${TESTNAME}
349-
APPEND
350-
PROPERTY
351-
DEPENDS ${UNIT_TESTS}
352-
REQUIRED_FILES ${JSON_FILES} )
381+
APPEND
382+
PROPERTY
383+
DEPENDS ${UNIT_TESTS})
353384
endforeach ( JSON_FILE )
354385
endif ()
355386

356387
# Check output for differences
357-
if ( DIFF )
358-
file ( GLOB JSON_FILES "${DATA_DIR}/*.json" )
359-
foreach ( JSON_FILE ${JSON_FILES} )
360-
get_filename_component ( JSON_STEM ${JSON_FILE} NAME_WE )
361-
add_test ( NAME regression-${JSON_STEM}.json
362-
WORKING_DIRECTORY "${DATA_DIR}"
363-
COMMAND ${DIFF} -q ${JSON_STEM}.json expected-outputs/${JSON_STEM}.json )
364-
set_property ( TEST regression-${JSON_STEM}.json
365-
APPEND
366-
PROPERTY
367-
DEPENDS ${UNIT_TESTS}
368-
REQUIRED_FILES ${JSON_FILES} )
369-
endforeach ( JSON_FILE )
370-
else ()
371-
message ( WARNING
372-
"For full test coverage diff, or a similar tool must be present on your system" )
373-
endif ()
388+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
389+
set( JSON_FORTRAN_COMPARE_FLAG "--ignore-eol")
390+
endif()
391+
392+
foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
393+
get_filename_component (OUTPUT ${JSON_FILE} NAME )
394+
add_test ( NAME regression-${OUTPUT}
395+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/files"
396+
COMMAND ${CMAKE_COMMAND} -E compare_files ${JSON_FORTRAN_COMPARE_FLAG} ${OUTPUT} expected-outputs/${OUTPUT} )
397+
set_property ( TEST regression-${OUTPUT}
398+
APPEND
399+
PROPERTY
400+
DEPENDS ${UNIT_TESTS}
401+
REQUIRED_FILES ${EXPECTED_OUTPUTS} )
402+
endforeach ( JSON_FILE )
403+
374404

375405
endif ()
376406

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)