@@ -416,3 +416,88 @@ def test_check_required_options_on_multiple_required_off(self):
416416 self .run_cmake (
417417 error_contains = "Use of 'FEATURE_FLAG' requires 'REQUIRED_OPTION1'"
418418 )
419+
420+ def test_check_conflicting_options_on_if_on_off (self ):
421+ """Test that when IF_ON is OFF, no conflict checks are performed."""
422+
423+ _cmake_lists_txt = """
424+ cmake_minimum_required(VERSION 3.24)
425+ project(test_preset)
426+ include(${PROJECT_SOURCE_DIR}/preset.cmake)
427+ set(FEATURE_FLAG OFF)
428+ set(CONFLICTING_OPTION1 ON)
429+ set(CONFLICTING_OPTION2 ON)
430+ check_conflicting_options_on(
431+ IF_ON
432+ FEATURE_FLAG
433+ CONFLICTS_WITH
434+ CONFLICTING_OPTION1
435+ CONFLICTING_OPTION2
436+ )
437+ """
438+ self .create_workspace ({"CMakeLists.txt" : _cmake_lists_txt })
439+ self .run_cmake ()
440+
441+ def test_check_conflicting_options_on_no_conflicts (self ):
442+ """Test that when IF_ON is ON but no conflicting options are ON, no error occurs."""
443+ _cmake_lists_txt = """
444+ cmake_minimum_required(VERSION 3.24)
445+ project(test_preset)
446+ include(${PROJECT_SOURCE_DIR}/preset.cmake)
447+ set(FEATURE_FLAG ON)
448+ set(CONFLICTING_OPTION1 OFF)
449+ set(CONFLICTING_OPTION2 OFF)
450+ check_conflicting_options_on(
451+ IF_ON
452+ FEATURE_FLAG
453+ CONFLICTS_WITH
454+ CONFLICTING_OPTION1
455+ CONFLICTING_OPTION2
456+ )
457+ """
458+ self .create_workspace ({"CMakeLists.txt" : _cmake_lists_txt })
459+ self .run_cmake ()
460+
461+ def test_check_conflicting_options_on_one_conflict (self ):
462+ """Test that when IF_ON is ON and one conflicting option is also ON, a fatal error occurs."""
463+ _cmake_lists_txt = """
464+ cmake_minimum_required(VERSION 3.24)
465+ project(test_preset)
466+ include(${PROJECT_SOURCE_DIR}/preset.cmake)
467+ set(FEATURE_FLAG ON)
468+ set(CONFLICTING_OPTION1 ON)
469+ set(CONFLICTING_OPTION2 OFF)
470+ check_conflicting_options_on(
471+ IF_ON
472+ FEATURE_FLAG
473+ CONFLICTS_WITH
474+ CONFLICTING_OPTION1
475+ CONFLICTING_OPTION2
476+ )
477+ """
478+ self .create_workspace ({"CMakeLists.txt" : _cmake_lists_txt })
479+ self .run_cmake (
480+ error_contains = "Both 'FEATURE_FLAG' and 'CONFLICTING_OPTION1' can't be ON"
481+ )
482+
483+ def test_check_conflicting_options_on_multiple_conflicts (self ):
484+ """Test that when IF_ON is ON and multiple conflicting options are ON, a fatal error occurs for the first conflict."""
485+ _cmake_lists_txt = """
486+ cmake_minimum_required(VERSION 3.24)
487+ project(test_preset)
488+ include(${PROJECT_SOURCE_DIR}/preset.cmake)
489+ set(FEATURE_FLAG ON)
490+ set(CONFLICTING_OPTION1 ON)
491+ set(CONFLICTING_OPTION2 ON)
492+ check_conflicting_options_on(
493+ IF_ON
494+ FEATURE_FLAG
495+ CONFLICTS_WITH
496+ CONFLICTING_OPTION1
497+ CONFLICTING_OPTION2
498+ )
499+ """
500+ self .create_workspace ({"CMakeLists.txt" : _cmake_lists_txt })
501+ self .run_cmake (
502+ error_contains = "Both 'FEATURE_FLAG' and 'CONFLICTING_OPTION1' can't be ON"
503+ )
0 commit comments