1
0
Эх сурвалжийг харах

GenEx: Test early determination of AND and OR

It should be possible for example to do this:

 "$<AND:${FOO},$<BOOL:${TGT}>,$<BOOL:$<TARGET_PROPERTY:${TGT},PROP>"

such that it works simliarly to the C code:

 if (foo && tgt && tgt->prop())
   {
   }

The example of generator expression code is a little bit contrived as
it could be written other ways with the same functionality. Nevertheless,
as these cases already work and are intentional, test for them.
Stephen Kelly 13 жил өмнө
parent
commit
4bacff7a4c

+ 4 - 0
Tests/GeneratorExpression/CMakeLists.txt

@@ -14,6 +14,9 @@ add_custom_target(check ALL
     -Dtest_and_1=$<AND:1>
     -Dtest_and_1_0=$<AND:1,0>
     -Dtest_and_1_1=$<AND:1,1>
+    # Ordinarily, the 'invalidcontent' would cause an error, but
+    # the '0' makes the AND abort early.
+    -Dtest_and_0_invalidcontent=$<AND:0,invalidcontent>
     -Dtest_config_0=$<CONFIG:$<CONFIGURATION>x>
     -Dtest_config_1=$<CONFIG:$<CONFIGURATION>>
     -Dtest_not_0=$<NOT:0>
@@ -24,6 +27,7 @@ add_custom_target(check ALL
     -Dtest_or_1=$<OR:1>
     -Dtest_or_1_0=$<OR:1,0>
     -Dtest_or_1_1=$<OR:1,1>
+    -Dtest_or_1_invalidcontent=$<OR:1,invalidcontent>
     -Dtest_bool_notfound=$<BOOL:NOTFOUND>
     -Dtest_bool_foo_notfound=$<BOOL:Foo-NOTFOUND>
     -Dtest_bool_true=$<BOOL:True>

+ 2 - 0
Tests/GeneratorExpression/check.cmake

@@ -15,6 +15,7 @@ check(test_and_0_1 "0")
 check(test_and_1 "1")
 check(test_and_1_0 "0")
 check(test_and_1_1 "1")
+check(test_and_0_invalidcontent "0")
 check(test_config_0 "0")
 check(test_config_1 "1")
 check(test_not_0 "1")
@@ -25,6 +26,7 @@ check(test_or_0_1 "1")
 check(test_or_1 "1")
 check(test_or_1_0 "1")
 check(test_or_1_1 "1")
+check(test_or_1_invalidcontent "1")
 check(test_bool_notfound "0")
 check(test_bool_foo_notfound "0")
 check(test_bool_true "1")

+ 9 - 0
Tests/RunCMake/GeneratorExpression/BadAND-stderr.txt

@@ -39,6 +39,15 @@ CMake Error at BadAND.cmake:1 \(add_custom_target\):
 
     \$<AND:nothing>
 
+  Parameters to \$<AND> must resolve to either '0' or '1'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++
+CMake Error at BadAND.cmake:1 \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<AND:1,nothing>
+
   Parameters to \$<AND> must resolve to either '0' or '1'.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)$

+ 1 - 0
Tests/RunCMake/GeneratorExpression/BadAND.cmake

@@ -4,4 +4,5 @@ add_custom_target(check ALL COMMAND check
   $<AND:,>
   $<AND:01>
   $<AND:nothing>
+  $<AND:1,nothing>
   VERBATIM)

+ 9 - 0
Tests/RunCMake/GeneratorExpression/BadOR-stderr.txt

@@ -39,6 +39,15 @@ CMake Error at BadOR.cmake:1 \(add_custom_target\):
 
     \$<OR:nothing>
 
+  Parameters to \$<OR> must resolve to either '0' or '1'.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++
+CMake Error at BadOR.cmake:1 \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<OR:0,nothing>
+
   Parameters to \$<OR> must resolve to either '0' or '1'.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)$

+ 1 - 0
Tests/RunCMake/GeneratorExpression/BadOR.cmake

@@ -4,4 +4,5 @@ add_custom_target(check ALL COMMAND check
   $<OR:,>
   $<OR:01>
   $<OR:nothing>
+  $<OR:0,nothing>
   VERBATIM)