Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Simplify the addition of unit tests to our framework
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 2 Mar 2016 10:21:19 +0000 (11:21 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 2 Mar 2016 10:30:05 +0000 (11:30 +0100)
And document it.

doc/doxygen/inside_tests.doc
tools/cmake/UnitTesting.cmake

index 4502ac0..80988e8 100644 (file)
@@ -49,8 +49,8 @@ make testall                    # Rebuild the test runner on need
 ./testall                       # Launch all tests
 ./testall --help                # revise how it goes if you forgot
 ./testall --tests=-all          # run no test at all (yeah, that's useless)
 ./testall                       # Launch all tests
 ./testall --help                # revise how it goes if you forgot
 ./testall --tests=-all          # run no test at all (yeah, that's useless)
-./testall --dump-only           # Display all existing test suite
-./testall --tests=-all,+dict    # Only launch the tests from the dict testsuite
+./testall --dump-only           # Display all existing test suites
+./testall --tests=-all,+dict    # Only launch the tests from the dict test suite
 ./testall --tests=-all,+foo:bar # run only the bar test from the foo suite.
 \endverbatim
 
 ./testall --tests=-all,+foo:bar # run only the bar test from the foo suite.
 \endverbatim
 
@@ -58,35 +58,22 @@ make testall                    # Rebuild the test runner on need
 \section inside_tests_add_units Adding unit tests
 
 If you want to test a specific function or set of functions, you need
 \section inside_tests_add_units Adding unit tests
 
 If you want to test a specific function or set of functions, you need
-a unit test. Edit
-<project/directory>/tools/cmake/UnitTesting.cmake to add your
-source file to the TEST_CFILES list, and add the corresponding unit
-file to the TEST_UNITS list. For example, if your file is toto.c,
-your unit file will be toto_unit.c. The full path to your file must be
-provided, but the unit file will always be in src/ directly.
-
-If you want to create unit tests in the file src/xbt/toto.c, your
-changes should look similar to:
+a unit test. Edit the file tools/cmake/UnitTesting.cmake to
+add your source file to the FILES_CONTAINING_UNITTESTS list. For
+example, if you want to create unit tests in the file src/xbt/plouf.c,
+your changes should look like that:
 
 \verbatim
 --- a/tools/cmake/UnitTesting.cmake
 +++ b/tools/cmake/UnitTesting.cmake
 
 \verbatim
 --- a/tools/cmake/UnitTesting.cmake
 +++ b/tools/cmake/UnitTesting.cmake
-@@ -11,6 +11,7 @@ set(TEST_CFILES
+@@ -11,6 +11,7 @@ set(FILES_CONTAINING_UNITTESTS
    src/xbt/xbt_strbuff.c
    src/xbt/xbt_sha.c
    src/xbt/config.c
    src/xbt/xbt_strbuff.c
    src/xbt/xbt_sha.c
    src/xbt/config.c
-+  src/xbt/toto.c
-   )
- set(TEST_UNITS
-   ${CMAKE_CURRENT_BINARY_DIR}/src/cunit_unit.c
-@@ -22,6 +23,7 @@ set(TEST_UNITS
-   ${CMAKE_CURRENT_BINARY_DIR}/src/xbt_strbuff_unit.c
-   ${CMAKE_CURRENT_BINARY_DIR}/src/xbt_sha_unit.c
-   ${CMAKE_CURRENT_BINARY_DIR}/src/config_unit.c
-+  ${CMAKE_CURRENT_BINARY_DIR}/src/toto_unit.c
-   ${CMAKE_CURRENT_BINARY_DIR}/src/simgrid_units_main.c
++  src/xbt/plouf.c
    )
    )
+
+ if(HAVE_MC)
 \endverbatim
 
 Then, you want to actually add your tests in the source file. All the
 \endverbatim
 
 Then, you want to actually add your tests in the source file. All the
@@ -112,7 +99,8 @@ reporting any issue. Finally, #xbt_test_log can be used to report
 intermediate steps. The messages will be shown only if the
 corresponding test fails.
 
 intermediate steps. The messages will be shown only if the
 corresponding test fails.
 
-Here is a recaping example, inspired from the dynar implementation.
+Here is a recaping example, inspired from src/xbt/dynar.h (see that
+file for details).
 @code
 /* The rest of your module implementation */
 
 @code
 /* The rest of your module implementation */
 
index c7dc531..1417fef 100644 (file)
@@ -1,7 +1,10 @@
-# To add a new tested file, simply add the original file in
-# TEST_CFILES and generated file in TEST_UNITS. The rest is automatic.
+# This file is in charge of the unit testing in SimGrid.
+# See http://simgrid.gforge.inria.fr/simgrid/3.13/doc/inside_tests.html#inside_tests_add_units
 
 
-set(TEST_CFILES
+# To register a file containing unit tests, simply add it to
+# FILES_CONTAINING_UNITTESTS and have a pleasant day.
+
+set(FILES_CONTAINING_UNITTESTS
   src/xbt/cunit.c
   src/xbt/ex.c
   src/xbt/dynar.c
   src/xbt/cunit.c
   src/xbt/ex.c
   src/xbt/dynar.c
@@ -10,52 +13,38 @@ set(TEST_CFILES
   src/xbt/xbt_str.c
   src/xbt/xbt_strbuff.c
   src/xbt/config.c
   src/xbt/xbt_str.c
   src/xbt/xbt_strbuff.c
   src/xbt/config.c
-  )
-set(TEST_UNITS
-  ${CMAKE_CURRENT_BINARY_DIR}/src/cunit_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/ex_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/dynar_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/dict_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/swag_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/xbt_str_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/xbt_strbuff_unit.c
-  ${CMAKE_CURRENT_BINARY_DIR}/src/config_unit.c
-
-  ${CMAKE_CURRENT_BINARY_DIR}/src/simgrid_units_main.c
-  )
+)
 
 if(HAVE_MC)
 
 if(HAVE_MC)
-  set(TEST_CFILES ${TEST_CFILES}
+  set(FILES_CONTAINING_UNITTESTS ${FILES_CONTAINING_UNITTESTS}
       src/mc/PageStore.cpp
       src/mc/mc_snapshot.cpp
       src/mc/PageStore.cpp
       src/mc/mc_snapshot.cpp
-      )
-  set(TEST_UNITS ${TEST_UNITS}
-     ${CMAKE_CURRENT_BINARY_DIR}/src/PageStore_unit.cpp
-     ${CMAKE_CURRENT_BINARY_DIR}/src/mc_snapshot_unit.cpp
-     )
+  )
 endif()
 
 endif()
 
-ADD_CUSTOM_COMMAND(
-  OUTPUT       ${TEST_UNITS}
-
-  DEPENDS      ${CMAKE_HOME_DIRECTORY}/tools/sg_unit_extractor.pl
-  ${TEST_CFILES}
-
-  COMMAND      ${CMAKE_COMMAND} -E remove -f ${TEST_UNITS}
+####  Nothing to change below this line to add a new tested file
+################################################################
 
 
-  COMMAND chmod +x ${CMAKE_HOME_DIRECTORY}/tools/sg_unit_extractor.pl
+foreach(file ${FILES_CONTAINING_UNITTESTS})
+  get_filename_component(basename ${file} NAME_WE)
+  set(EXTRACTED_TEST_SOURCE_FILES ${EXTRACTED_TEST_SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/src/${basename}_unit.c)
+endforeach()
+  
+set(EXTRACTED_TEST_SOURCE_FILES ${EXTRACTED_TEST_SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/src/simgrid_units_main.c)
 
 
-  COMMAND ${CMAKE_HOME_DIRECTORY}/tools/sg_unit_extractor.pl --root=src/ --outdir=${CMAKE_CURRENT_BINARY_DIR}/src/ ${TEST_CFILES}
-
-  WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
+set_source_files_properties(${EXTRACTED_TEST_SOURCE_FILES} PROPERTIES GENERATED true)
 
 
+ADD_CUSTOM_COMMAND(
+  OUTPUT  ${EXTRACTED_TEST_SOURCE_FILES}
+  DEPENDS ${CMAKE_HOME_DIRECTORY}/tools/sg_unit_extractor.pl ${FILES_CONTAINING_UNITTESTS}
   COMMENT "Generating *_units files for testall..."
   COMMENT "Generating *_units files for testall..."
-  )
-
-### Ensure the build of testall
 
 
-set_source_files_properties(${TEST_UNITS} PROPERTIES GENERATED true)
+  WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
+  COMMAND          ${CMAKE_COMMAND} -E remove -f ${EXTRACTED_TEST_SOURCE_FILES}
+  COMMAND           chmod +x ${CMAKE_HOME_DIRECTORY}/tools/sg_unit_extractor.pl
+  COMMAND           ${CMAKE_HOME_DIRECTORY}/tools/sg_unit_extractor.pl --root=src/ --outdir=${CMAKE_CURRENT_BINARY_DIR}/src/ ${FILES_CONTAINING_UNITTESTS}
+)
 
 
-add_executable       (testall ${TEST_UNITS})
+add_executable       (testall ${EXTRACTED_TEST_SOURCE_FILES})
 target_link_libraries(testall simgrid)
 
 target_link_libraries(testall simgrid)