Просмотр исходного кода

tests: Add variable expansion tests

There are some corner cases in variable expansion which would be nice to
capture before going and rewriting the variable expansion code. The
majority of these are related to configuring files and strings with '@'
in them in conjunction with @ONLY being specified. Another is testing
for '(' usage inside of ENV variable references based on whether it is
quoted or not.
Ben Boeckel 12 лет назад
Родитель
Сommit
a9bdef2dda
25 измененных файлов с 130 добавлено и 0 удалено
  1. 1 0
      Tests/RunCMake/Syntax/AtWithVariable-stderr.txt
  2. 9 0
      Tests/RunCMake/Syntax/AtWithVariable.cmake
  3. 1 0
      Tests/RunCMake/Syntax/AtWithVariableAtOnly-stderr.txt
  4. 8 0
      Tests/RunCMake/Syntax/AtWithVariableAtOnly.cmake
  5. 5 0
      Tests/RunCMake/Syntax/AtWithVariableAtOnlyFile-stderr.txt
  6. 9 0
      Tests/RunCMake/Syntax/AtWithVariableAtOnlyFile.cmake
  7. 1 0
      Tests/RunCMake/Syntax/AtWithVariableEmptyExpansion-stderr.txt
  8. 8 0
      Tests/RunCMake/Syntax/AtWithVariableEmptyExpansion.cmake
  9. 1 0
      Tests/RunCMake/Syntax/AtWithVariableEmptyExpansionAtOnly-stderr.txt
  10. 8 0
      Tests/RunCMake/Syntax/AtWithVariableEmptyExpansionAtOnly.cmake
  11. 5 0
      Tests/RunCMake/Syntax/AtWithVariableFile-stderr.txt
  12. 8 0
      Tests/RunCMake/Syntax/AtWithVariableFile.cmake
  13. 1 0
      Tests/RunCMake/Syntax/EscapeQuotes-stderr.txt
  14. 9 0
      Tests/RunCMake/Syntax/EscapeQuotes.cmake
  15. 1 0
      Tests/RunCMake/Syntax/EscapedAt-stderr.txt
  16. 5 0
      Tests/RunCMake/Syntax/EscapedAt.cmake
  17. 1 0
      Tests/RunCMake/Syntax/ExpandInAt-stderr.txt
  18. 6 0
      Tests/RunCMake/Syntax/ExpandInAt.cmake
  19. 1 0
      Tests/RunCMake/Syntax/ParenInENV-result.txt
  20. 20 0
      Tests/RunCMake/Syntax/ParenInENV-stderr.txt
  21. 2 0
      Tests/RunCMake/Syntax/ParenInENV.cmake
  22. 1 0
      Tests/RunCMake/Syntax/ParenInQuotedENV-stderr.txt
  23. 2 0
      Tests/RunCMake/Syntax/ParenInQuotedENV.cmake
  24. 13 0
      Tests/RunCMake/Syntax/RunCMakeTest.cmake
  25. 4 0
      Tests/RunCMake/Syntax/atfile.txt.in

+ 1 - 0
Tests/RunCMake/Syntax/AtWithVariable-stderr.txt

@@ -0,0 +1 @@
+-->wrong<--

+ 9 - 0
Tests/RunCMake/Syntax/AtWithVariable.cmake

@@ -0,0 +1,9 @@
+set(right "wrong")
+set(var "\${right}")
+# Expanded here.
+set(ref "@var@")
+
+# 'right' is dereferenced because 'var' was dereferenced when
+# assigning to 'ref' above.
+string(CONFIGURE "${ref}" output)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/AtWithVariableAtOnly-stderr.txt

@@ -0,0 +1 @@
+-->\${right}<--

+ 8 - 0
Tests/RunCMake/Syntax/AtWithVariableAtOnly.cmake

@@ -0,0 +1,8 @@
+set(right "wrong")
+set(var "\${right}")
+# Expanded here.
+set(ref "@var@")
+
+# No dereference done at all.
+string(CONFIGURE "${ref}" output @ONLY)
+message("-->${output}<--")

+ 5 - 0
Tests/RunCMake/Syntax/AtWithVariableAtOnlyFile-stderr.txt

@@ -0,0 +1,5 @@
+-->==>\${right}<==
+==><==
+==>\${var}<==
+==>\${empty}<==
+<--

+ 9 - 0
Tests/RunCMake/Syntax/AtWithVariableAtOnlyFile.cmake

@@ -0,0 +1,9 @@
+set(right "wrong")
+set(var "\${right}")
+
+configure_file(
+  "${CMAKE_CURRENT_SOURCE_DIR}/atfile.txt.in"
+  "${CMAKE_CURRENT_BINARY_DIR}/atfile.txt"
+  @ONLY)
+file(READ "${CMAKE_CURRENT_BINARY_DIR}/atfile.txt" output)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/AtWithVariableEmptyExpansion-stderr.txt

@@ -0,0 +1 @@
+-->\${right}<--

+ 8 - 0
Tests/RunCMake/Syntax/AtWithVariableEmptyExpansion.cmake

@@ -0,0 +1,8 @@
+# Literal since 'var' is not defined.
+set(ref "@var@")
+set(right "wrong")
+set(var "\${right}")
+
+# 'var' is dereferenced here.
+string(CONFIGURE "${ref}" output)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/AtWithVariableEmptyExpansionAtOnly-stderr.txt

@@ -0,0 +1 @@
+-->\${right}<--

+ 8 - 0
Tests/RunCMake/Syntax/AtWithVariableEmptyExpansionAtOnly.cmake

@@ -0,0 +1,8 @@
+# Literal since 'var' is not defined.
+set(ref "@var@")
+set(right "wrong")
+set(var "\${right}")
+
+# 'var' is dereferenced, but now 'right'
+string(CONFIGURE "${ref}" output @ONLY)
+message("-->${output}<--")

+ 5 - 0
Tests/RunCMake/Syntax/AtWithVariableFile-stderr.txt

@@ -0,0 +1,5 @@
+-->==>\${right}<==
+==><==
+==>\${right}<==
+==><==
+<--

+ 8 - 0
Tests/RunCMake/Syntax/AtWithVariableFile.cmake

@@ -0,0 +1,8 @@
+set(right "wrong")
+set(var "\${right}")
+
+configure_file(
+  "${CMAKE_CURRENT_SOURCE_DIR}/atfile.txt.in"
+  "${CMAKE_CURRENT_BINARY_DIR}/atfile.txt")
+file(READ "${CMAKE_CURRENT_BINARY_DIR}/atfile.txt" output)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/EscapeQuotes-stderr.txt

@@ -0,0 +1 @@
+-->"<--

+ 9 - 0
Tests/RunCMake/Syntax/EscapeQuotes.cmake

@@ -0,0 +1,9 @@
+set(var "\"")
+set(ref "@var@")
+set(rref "\${var}")
+
+string(CONFIGURE "${ref}" output ESCAPE_QUOTES)
+message("-->${output}<--")
+
+string(CONFIGURE "${rref}" output ESCAPE_QUOTES)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/EscapedAt-stderr.txt

@@ -0,0 +1 @@
+-->\\n<--

+ 5 - 0
Tests/RunCMake/Syntax/EscapedAt.cmake

@@ -0,0 +1,5 @@
+set(var "n")
+set(ref "\\@var@")
+
+string(CONFIGURE "${ref}" output)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/ExpandInAt-stderr.txt

@@ -0,0 +1 @@
+-->@foo@<--

+ 6 - 0
Tests/RunCMake/Syntax/ExpandInAt.cmake

@@ -0,0 +1,6 @@
+set("\${varname}" bar)
+set(var foo)
+set(ref "@\${var}@")
+
+string(CONFIGURE "${ref}" output)
+message("-->${output}<--")

+ 1 - 0
Tests/RunCMake/Syntax/ParenInENV-result.txt

@@ -0,0 +1 @@
+1

+ 20 - 0
Tests/RunCMake/Syntax/ParenInENV-stderr.txt

@@ -0,0 +1,20 @@
+CMake Warning \(dev\) at CMakeLists.txt:3 \(include\):
+  Syntax Warning in cmake code at
+
+    .*/Tests/RunCMake/Syntax/ParenInENV.cmake:2:21
+
+  Argument not separated from preceding token by whitespace.
+This warning is for project developers.  Use -Wno-dev to suppress it.
+
+CMake Error at ParenInENV.cmake:2 \(message\):
+  Syntax error in cmake code at
+
+    .*/Tests/RunCMake/Syntax/ParenInENV.cmake:2
+
+  when parsing string
+
+    -->\$ENV{e
+
+  syntax error, unexpected \$end, expecting } \(9\)
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

+ 2 - 0
Tests/RunCMake/Syntax/ParenInENV.cmake

@@ -0,0 +1,2 @@
+set("ENV{e(x)}" value)
+message(-->$ENV{e(x)}<--)

+ 1 - 0
Tests/RunCMake/Syntax/ParenInQuotedENV-stderr.txt

@@ -0,0 +1 @@
+-->value<--

+ 2 - 0
Tests/RunCMake/Syntax/ParenInQuotedENV.cmake

@@ -0,0 +1,2 @@
+set("ENV{e(x)}" value)
+message("-->$ENV{e(x)}<--")

+ 13 - 0
Tests/RunCMake/Syntax/RunCMakeTest.cmake

@@ -52,3 +52,16 @@ run_cmake(UnterminatedString)
 run_cmake(UnterminatedBracket0)
 run_cmake(UnterminatedBracket1)
 run_cmake(UnterminatedBracketComment)
+
+# Variable expansion tests
+run_cmake(ExpandInAt)
+run_cmake(EscapedAt)
+run_cmake(EscapeQuotes)
+run_cmake(AtWithVariable)
+run_cmake(AtWithVariableEmptyExpansion)
+run_cmake(AtWithVariableAtOnly)
+run_cmake(AtWithVariableEmptyExpansionAtOnly)
+run_cmake(AtWithVariableFile)
+run_cmake(AtWithVariableAtOnlyFile)
+run_cmake(ParenInENV)
+run_cmake(ParenInQuotedENV)

+ 4 - 0
Tests/RunCMake/Syntax/atfile.txt.in

@@ -0,0 +1,4 @@
+==>@var@<==
+==>@empty@<==
+==>${var}<==
+==>${empty}<==