@@ -416,3 +416,88 @@ def test_check_required_options_on_multiple_required_off(self):
416
416
self .run_cmake (
417
417
error_contains = "Use of 'FEATURE_FLAG' requires 'REQUIRED_OPTION1'"
418
418
)
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