Skip to content

Commit 31ffab8

Browse files
committed
Merge branch 'hotfix/3.9.1'
* hotfix/3.9.1: Version 3.9.1 Add `TEST_REQUIRES` keyword in `ecbuild_add_test` Add missing keyword in `ecbuild_add_test` docs (#77) Avoid using `--test-dir` option in `ctest` Add test for new `TEST_PROPERTIES` keyword Add `TEST_PROPERTIES` keyword in `ecbuild_add_test` Replace Unicode characters with ON/OFF
2 parents 8401ff7 + 3a7969c commit 31ffab8

File tree

14 files changed

+199
-8
lines changed

14 files changed

+199
-8
lines changed

cmake/VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.9.0
1+
3.9.1

cmake/ecbuild_add_option.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@ macro( ecbuild_add_option )
173173
## Update the description of the feature summary
174174
# Choose the correct tick
175175
if (ENABLE_${_p_FEATURE})
176-
set ( _tick "")
176+
set ( _tick "ON")
177177
else()
178-
set ( _tick "")
178+
set ( _tick "OFF")
179179
endif()
180180
set(_enabled "${ENABLE_${_p_FEATURE}}")
181181
get_property( _enabled_features GLOBAL PROPERTY ENABLED_FEATURES )

cmake/ecbuild_add_test.cmake

+23-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@
3434
# [ GENERATED <file1> [<file2> ...] ]
3535
# [ DEPENDS <target1> [<target2> ...] ]
3636
# [ TEST_DEPENDS <target1> [<target2> ...] ]
37+
# [ TEST_REQUIRES <target1> [<target2> ...] ]
3738
# [ CONDITION <condition> ]
3839
# [ PROPERTIES <prop1> <val1> [<prop2> <val2> ...] ]
40+
# [ TEST_PROPERTIES <prop1> <val1> [<prop2> <val2> ...] ]
3941
# [ ENVIRONMENT <variable1> [<variable2> ...] ]
4042
# [ WORKING_DIRECTORY <path> ]
4143
# [ CFLAGS <flag1> [<flag2> ...] ]
@@ -127,13 +129,19 @@
127129
# TEST_DEPENDS : optional
128130
# list of tests to be run before this one
129131
#
132+
# TEST_REQUIRES : optional
133+
# list of tests that will automatically run before this one
134+
#
130135
# CONDITION : optional
131136
# conditional expression which must evaluate to true for this target to be
132137
# built (must be valid in a CMake ``if`` statement)
133138
#
134139
# PROPERTIES : optional
135140
# custom properties to set on the target
136141
#
142+
# TEST_PROPERTIES : optional
143+
# custom properties to set on the test
144+
#
137145
# ENVIRONMENT : optional
138146
# list of environment variables to set in the test environment
139147
#
@@ -183,9 +191,9 @@ function( ecbuild_add_test )
183191

184192
set( options NO_AS_NEEDED )
185193
set( single_value_args TARGET ENABLED COMMAND TYPE LINKER_LANGUAGE MPI OMP WORKING_DIRECTORY )
186-
set( multi_value_args SOURCES OBJECTS LIBS INCLUDES TEST_DEPENDS DEPENDS LABELS ARGS
194+
set( multi_value_args SOURCES OBJECTS LIBS INCLUDES TEST_DEPENDS DEPENDS TEST_REQUIRES LABELS ARGS
187195
PERSISTENT DEFINITIONS RESOURCES TEST_DATA CFLAGS
188-
CXXFLAGS FFLAGS GENERATED CONDITION PROPERTIES ENVIRONMENT )
196+
CXXFLAGS FFLAGS GENERATED CONDITION TEST_PROPERTIES PROPERTIES ENVIRONMENT )
189197

190198
cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
191199

@@ -467,6 +475,19 @@ function( ecbuild_add_test )
467475
set_target_properties( ${_PAR_TARGET} PROPERTIES ${_PAR_PROPERTIES} )
468476
endif()
469477

478+
if( DEFINED _PAR_TEST_PROPERTIES )
479+
set_tests_properties( ${_PAR_TARGET} PROPERTIES ${_PAR_TEST_PROPERTIES} )
480+
endif()
481+
482+
# Set the fictures properties if test requires another test to run before
483+
if ( DEFINED _PAR_TEST_REQUIRES )
484+
ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): set test requirements to ${_PAR_TEST_REQUIRES}")
485+
foreach(_requirement ${_PAR_TEST_REQUIRES} )
486+
set_tests_properties( ${_requirement} PROPERTIES FIXTURES_SETUP ${_requirement} )
487+
endforeach()
488+
set_tests_properties( ${_PAR_TARGET} PROPERTIES FIXTURES_REQUIRED "${_PAR_TEST_REQUIRES}" )
489+
endif()
490+
470491
# get test data
471492

472493
if( _PAR_TEST_DATA )

tests/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ add_subdirectory( interface_library )
1212
add_subdirectory( project_import )
1313
add_subdirectory( project_summary )
1414
add_subdirectory( ecbuild_override_compiler_flags )
15+
add_subdirectory( test_properties )
16+
add_subdirectory( test_requires_simple )
17+
add_subdirectory( test_requires_complex )

tests/project_summary/configure.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ $SOURCE/clean.sh
3131

3232
mkdir -p $HERE/build_1
3333
ecbuild -DENABLE_MYFEATURE=ON $SOURCE/test_project -B $HERE/build_1 | tee $HERE/build_1.log
34-
EXPECT_ONE_OF $HERE/build_1.log "* MYFEATURE, proja(): '', projb(): ''"
34+
EXPECT_ONE_OF $HERE/build_1.log "* MYFEATURE, proja(ON): '', projb(ON): ''"
3535

3636
# Options: -DENABLE_MYFEATURE=ON -DPROJB_ENABLE_MYFEATURE=OFF
3737

3838
mkdir -p $HERE/build_2
3939
ecbuild -DENABLE_MYFEATURE=ON -DPROJB_ENABLE_MYFEATURE=OFF $SOURCE/test_project -B $HERE/build_2 | tee $HERE/build_2.log
40-
EXPECT_ONE_OF $HERE/build_2.log "* MYFEATURE, proja(): '', projb(): ''"
40+
EXPECT_ONE_OF $HERE/build_2.log "* MYFEATURE, proja(ON): '', projb(OFF): ''"
4141

4242
# Options: -DENABLE_MYFEATURE=OFF -DPROJB_ENABLE_MYFEATURE=ON
4343

4444
mkdir -p $HERE/build_3
4545
ecbuild -DENABLE_MYFEATURE=OFF -DPROJB_ENABLE_MYFEATURE=ON $SOURCE/test_project -B $HERE/build_3 | tee $HERE/build_3.log
46-
EXPECT_ONE_OF $HERE/build_3.log "* MYFEATURE, proja(): '', projb(): ''"
46+
EXPECT_ONE_OF $HERE/build_3.log "* MYFEATURE, proja(OFF): '', projb(ON): ''"

tests/test_properties/CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
ecbuild_add_test(
3+
TARGET test_ecbuild_test_properties
4+
TYPE SCRIPT
5+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build-and-run.sh
6+
ENVIRONMENT CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
7+
)
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"}
6+
SOURCE=${CMAKE_CURRENT_SOURCE_DIR:-$HERE}
7+
8+
# Add ecbuild to path
9+
export PATH=$SOURCE/../../bin:$PATH
10+
echo $PATH
11+
echo $SOURCE
12+
13+
# Build the project
14+
ecbuild $SOURCE/test_project -B $HERE/build
15+
16+
# Run only one specific test (which should invoke the others)
17+
(cd $HERE/build; ctest -R write_world_after_hello) # Avoid using --test-dir option in ctest
18+
19+
# Check if the output is as expected
20+
echo -n "Hello, World!" | diff - $HERE/build/output.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
2+
3+
find_package( ecbuild REQUIRED )
4+
project( test_test_properties VERSION 0.1.0 LANGUAGES NONE )
5+
6+
ecbuild_add_test(
7+
TARGET clean_output
8+
TEST_PROPERTIES FIXTURES_SETUP clean_output
9+
COMMAND ${CMAKE_COMMAND}
10+
ARGS -E remove ${CMAKE_CURRENT_BINARY_DIR}/output.txt
11+
)
12+
13+
ecbuild_add_test(
14+
TARGET write_hello
15+
TEST_PROPERTIES FIXTURES_SETUP write_hello FIXTURES_REQUIRED clean_output
16+
COMMAND bash
17+
ARGS -c "echo -n 'Hello, ' >> ${CMAKE_CURRENT_BINARY_DIR}/output.txt"
18+
)
19+
20+
ecbuild_add_test(
21+
TARGET write_world_after_hello
22+
TEST_PROPERTIES FIXTURES_REQUIRED write_hello
23+
COMMAND bash
24+
ARGS -c "echo -n 'World!' >> ${CMAKE_CURRENT_BINARY_DIR}/output.txt"
25+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
ecbuild_add_test(
3+
TARGET test_ecbuild_test_requires_complex
4+
TYPE SCRIPT
5+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build-and-run.sh
6+
ENVIRONMENT CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
7+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"}
6+
SOURCE=${CMAKE_CURRENT_SOURCE_DIR:-$HERE}
7+
8+
# Add ecbuild to path
9+
export PATH=$SOURCE/../../bin:$PATH
10+
echo $PATH
11+
echo $SOURCE
12+
13+
# Build the project
14+
ecbuild $SOURCE/test_project -B $HERE/build
15+
16+
# Run only one specific test (which should invoke the dependency)
17+
(cd $HERE/build; ctest -R write_world) # Avoid using --test-dir option in ctest
18+
19+
# Check if the output is as expected
20+
echo -n "World!" | diff - $HERE/build/world.txt
21+
22+
# Run only one specific test (which should invoke the dependencies)
23+
(cd $HERE/build; ctest -R combine_hello_world) # Avoid using --test-dir option in ctest
24+
25+
# Check if the output is as expected
26+
echo -n "Hello, World!" | diff - $HERE/build/helloworld.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
2+
3+
find_package( ecbuild REQUIRED )
4+
project( test_test_requires_complex VERSION 0.1.0 LANGUAGES NONE )
5+
6+
ecbuild_add_test(
7+
TARGET clean_output
8+
COMMAND ${CMAKE_COMMAND}
9+
ARGS -E remove ${CMAKE_CURRENT_BINARY_DIR}/hello.txt ${CMAKE_CURRENT_BINARY_DIR}/world.txt ${CMAKE_CURRENT_BINARY_DIR}/helloworld.txt
10+
)
11+
12+
ecbuild_add_test(
13+
TARGET write_hello
14+
TEST_REQUIRES clean_output
15+
COMMAND bash
16+
ARGS -c "echo -n 'Hello, ' >> ${CMAKE_CURRENT_BINARY_DIR}/hello.txt"
17+
)
18+
19+
ecbuild_add_test(
20+
TARGET write_world
21+
TEST_REQUIRES clean_output
22+
COMMAND bash
23+
ARGS -c "echo -n 'World!' >> ${CMAKE_CURRENT_BINARY_DIR}/world.txt"
24+
)
25+
26+
ecbuild_add_test(
27+
TARGET combine_hello_world
28+
TEST_REQUIRES write_hello write_world
29+
COMMAND bash
30+
ARGS -c "cat ${CMAKE_CURRENT_BINARY_DIR}/hello.txt ${CMAKE_CURRENT_BINARY_DIR}/world.txt >> ${CMAKE_CURRENT_BINARY_DIR}/helloworld.txt"
31+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
ecbuild_add_test(
3+
TARGET test_ecbuild_test_requires_simple
4+
TYPE SCRIPT
5+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build-and-run.sh
6+
ENVIRONMENT CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
7+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"}
6+
SOURCE=${CMAKE_CURRENT_SOURCE_DIR:-$HERE}
7+
8+
# Add ecbuild to path
9+
export PATH=$SOURCE/../../bin:$PATH
10+
echo $PATH
11+
echo $SOURCE
12+
13+
# Build the project
14+
ecbuild $SOURCE/test_project -B $HERE/build
15+
16+
# Run only one specific test (which should invoke the dependencies)
17+
(cd $HERE/build; ctest -R write_world_after_hello) # Avoid using --test-dir option in ctest
18+
19+
# Check if the output is as expected
20+
echo -n "Hello, World!" | diff - $HERE/build/output.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
2+
3+
find_package( ecbuild REQUIRED )
4+
project( test_test_requires_simple VERSION 0.1.0 LANGUAGES NONE )
5+
6+
ecbuild_add_test(
7+
TARGET clean_output
8+
COMMAND ${CMAKE_COMMAND}
9+
ARGS -E remove ${CMAKE_CURRENT_BINARY_DIR}/output.txt
10+
)
11+
12+
ecbuild_add_test(
13+
TARGET write_hello
14+
TEST_REQUIRES clean_output
15+
COMMAND bash
16+
ARGS -c "echo -n 'Hello, ' >> ${CMAKE_CURRENT_BINARY_DIR}/output.txt"
17+
)
18+
19+
ecbuild_add_test(
20+
TARGET write_world_after_hello
21+
TEST_REQUIRES write_hello
22+
COMMAND bash
23+
ARGS -c "echo -n 'World!' >> ${CMAKE_CURRENT_BINARY_DIR}/output.txt"
24+
)

0 commit comments

Comments
 (0)