Skip to content

Commit

Permalink
Fix CMake.test() target for Ninja Multi-Config (#11594)
Browse files Browse the repository at this point in the history
* Fix bug in CMake.test() when using Ninja Multi-Config (#11405)

* Add unit test for the CMake.test() helper

* Fix unit test for Windows platform
  • Loading branch information
Naufragous committed Jul 9, 2022
1 parent 3507c09 commit 5ae2626
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
3 changes: 2 additions & 1 deletion conan/tools/cmake/cmake.py
Expand Up @@ -153,7 +153,8 @@ def test(self, build_type=None, target=None, cli_args=None, build_tool_args=None
return
if not target:
is_multi = is_multi_configuration(self._generator)
target = "RUN_TESTS" if is_multi else "test"
is_ninja = "Ninja" in self._generator
target = "RUN_TESTS" if is_multi and not is_ninja else "test"

self._build(build_type=build_type, target=target, cli_args=cli_args,
build_tool_args=build_tool_args)
45 changes: 45 additions & 0 deletions conans/test/unittests/tools/cmake/test_cmake_test.py
@@ -0,0 +1,45 @@
import platform
import pytest

from conan.tools.cmake import CMake
from conan.tools.cmake.presets import write_cmake_presets
from conans.client.conf import get_default_settings_yml
from conans.model.conf import Conf
from conans.model.settings import Settings
from conans.test.utils.mocks import ConanFileMock
from conans.test.utils.test_files import temp_folder


@pytest.mark.parametrize("generator,target", [
("NMake Makefiles", "test"),
("Ninja Makefiles", "test"),
("Ninja Multi-Config", "test"),
("Unix Makefiles", "test"),
("Visual Studio 14 2015", "RUN_TESTS"),
("Xcode", "RUN_TESTS"),
])
def test_run_tests(generator, target):
"""
Testing that the proper test target is picked for different generators, especially multi-config ones.
Issue related: https://github.com/conan-io/conan/issues/11405
"""
settings = Settings.loads(get_default_settings_yml())
settings.os = "Windows"
settings.arch = "x86"
settings.build_type = "Release"
settings.compiler = "Visual Studio"
settings.compiler.runtime = "MDd"
settings.compiler.version = "14"

conanfile = ConanFileMock()
conanfile.conf = Conf()
conanfile.folders.generators = "."
conanfile.folders.set_base_generators(temp_folder())
conanfile.settings = settings

write_cmake_presets(conanfile, "toolchain", generator, {})
cmake = CMake(conanfile)
cmake.test()

search_pattern = "--target {}" if platform.system() == "Windows" else "'--target' '{}'"
assert search_pattern.format(target) in conanfile.command

0 comments on commit 5ae2626

Please sign in to comment.