Skip to content

CMake(Visual C) support for js/doc-unit-tests

Johannes Schindelin via GitGitGadget git 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest7 patches 1 replyIn review
  2. v27 patches 4 repliesSuperseded
  3. v14 patches 4 repliesSuperseded

Changes in v3 from the cover letter

* Thanks to Phillip Wood's prodding, I managed to avoid the "Empty Namespace" problem in Visual Studio's Test Explorer.

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7cmake: also build unit testscontrib/buildsystems/CMakeLists.txt+18 -00 replies
2/7unit-tests: do not mistake `.pdb` files for being executablet/Makefile+1 -10 replies
3/7unit-tests: do show relative file pathst/unit-tests/test-lib.c+48 -40 replies
4/7artifacts-tar: when including `.dll` files, don't forget the unit-testsMakefile+1 -10 replies
5/7cmake: fix typo in variable namecontrib/buildsystems/CMakeLists.txt+2 -20 replies
6/7cmake: use test names instead of full pathscontrib/buildsystems/CMakeLists.txt+3 -20 replies
7/7cmake: handle also unit testscontrib/buildsystems/CMakeLists.txt+11 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.

Read the v3 thread

Cover letter [PATCH v3 0/7] CMake(Visual C) support for js/doc-unit-tests

The recent patch series that adds proper unit testing to Git requires a couple of add-on patches to make it work with the CMake build on Windows (Visual C). This patch series aims to provide that support.

This patch series is based on js/doc-unit-tests.

Changes since v2:

* Thanks to Phillip Wood's prodding, I managed to avoid the "Empty Namespace" problem in Visual Studio's Test Explorer.

Changes since v1:

* The code added to test-lib.c now avoids using a strbuf.
* The unit tests are now also handled via CTest.
* While at it, I cleaned up a little in the CTest-related definitions.

Johannes Schindelin (7):
cmake: also build unit tests
unit-tests: do not mistake .pdb files for being executable
unit-tests: do show relative file paths
artifacts-tar: when including .dll files, don't forget the
unit-tests
cmake: fix typo in variable name
cmake: use test names instead of full paths
cmake: handle also unit tests

 Makefile                            |  2 +-
 contrib/buildsystems/CMakeLists.txt | 38 ++++++++++++++++++---
 t/Makefile                          |  2 +-
 t/unit-tests/test-lib.c             | 52 ++++++++++++++++++++++++++---
 4 files changed, 84 insertions(+), 10 deletions(-)

base-commit: 03f9bc407975bba86d1d1807519d76e1693ff66f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1579%2Fdscho%2Fdoc-unit-tests-and-cmake-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1579/dscho/doc-unit-tests-and-cmake-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1579

Range-diff vs v2:

 1:  2cc1c03d851 = 1:  2cc1c03d851 cmake: also build unit tests
 2:  90db3d5d41f = 2:  90db3d5d41f unit-tests: do not mistake `.pdb` files for being executable
 3:  f0b804129e8 = 3:  f0b804129e8 unit-tests: do show relative file paths
 4:  a70339f57a7 = 4:  a70339f57a7 artifacts-tar: when including `.dll` files, don't forget the unit-tests
 5:  75a74571fbe = 5:  75a74571fbe cmake: fix typo in variable name
 6:  41228df1b46 ! 6:  0a2d08b91e5 cmake: use test names instead of full paths

@@ Commit message
dots confuse the Test Explorer and it uses a large part of the path as "namespace".

- Let's just use t.<name> instead. This still adds an ugly "Empty
- Namespace" layer by default, but at least the ugly absolute path is now
- gone.
+ Let's just use t.suite.<name> instead. This presents the tests in
+ Visual Studio's Test Explorer in the following form by default (i.e.
+ unless the user changes the view via the "Group by" menu):
+
+ ◢ ◈ git
+ ◢ ◈ t
+ ◢ ◈ suite
+ ◈ t0000-basic
+ ◈ t0001-init
+ ◈ t0002-gitfile
+ [...]

@@ contrib/buildsystems/CMakeLists.txt: file(GLOB test_scripts "${CMAKE_SOURCE_DIR}
foreach(tsh ${test_scripts})
- add_test(NAME ${tsh}
+ string(REGEX REPLACE ".*/(.*)\\.sh" "\\1" test_name ${tsh})
-+ add_test(NAME "t.${test_name}"
++ add_test(NAME "t.suite.${test_name}"
COMMAND ${SH_EXE} ${tsh} --no-bin-wrappers --no-chain-lint -vx WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/t)
endforeach()
@@ contrib/buildsystems/CMakeLists.txt: file(GLOB test_scripts "${CMAKE_SOURCE_DIR}
# This test script takes an extremely long time and is known to time out even # on fast machines because it requires in excess of one hour to run
-set_tests_properties("${CMAKE_SOURCE_DIR}/t/t7112-reset-submodule.sh" PROPERTIES TIMEOUT 4000)
-+set_tests_properties("t.t7112-reset-submodule" PROPERTIES TIMEOUT 4000) ++set_tests_properties("t.suite.t7112-reset-submodule" PROPERTIES TIMEOUT 4000)

endif()#BUILD_TESTING
7: 003d44e9f0d ! 7: 64707240a4e cmake: handle also unit tests

     @@ contrib/buildsystems/CMakeLists.txt: foreach(unit_test ${unit_test_PROGRAMS})
      +	#
      +	# All other unit tests should be run.
      +	if(NOT ${unit_test} STREQUAL "t-basic")
     -+		add_test(NAME "unit-tests.${unit_test}"
     ++		add_test(NAME "t.unit-tests.${unit_test}"
      +			COMMAND "./${unit_test}"
      +			WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/t/unit-tests)
      +	endif()
Signature · 1 line
gitgitgadget