Browse Source

BUG: Fixed STRING(REGEX REPLACE ...) and added better test.

Brad King 23 years ago
parent
commit
6ab16695d0

+ 2 - 2
Source/cmStringCommand.cxx

@@ -254,7 +254,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
     std::string::size_type r = re.end();
     
     // Concatenate the part of the input that was not matched.
-    output += input.substr(base, l-base);
+    output += input.substr(base, l);
     
     // Make sure the match had some text.
     if(r-l == 0)
@@ -282,7 +282,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
         if((start != std::string::npos) && (end != std::string::npos) &&
            (start >= 0) && (start <= len) && (end >= 0) && (end <= len))
           {
-          output += input.substr(base+l, r-l);
+          output += input.substr(base+start, end-start);
           }
         else
           {

+ 5 - 4
Tests/Complex/CMakeLists.txt

@@ -221,12 +221,13 @@ STRING(REGEX MATCHALL "b" RESULT "abcb")
 IF(NOT RESULT)
   MESSAGE(SEND_ERROR "STRING(REGEX MATCHALL ... ) test failed.")
 ENDIF(NOT RESULT)
-STRING(REGEX REPLACE "(b)" "[\\1]" RESULT "abcde")
-IF("x${RESULT}" MATCHES "^xa\\[b\\]cde$")
+STRING(REGEX REPLACE ".([bd])." "[\\1]" RESULT "a(b)c(d)e")
+IF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
   SET(STRING_REGEX_PASSED 1)
-ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]cde$")
+ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
 IF(NOT STRING_REGEX_PASSED)
-  MESSAGE(SEND_ERROR "STRING(REGEX REPLACE ... ) test failed.")
+  MESSAGE(SEND_ERROR
+          "STRING(REGEX REPLACE ... ) test failed (\"${RESULT}\" v. \"a[b]c[d]e\")")
 ENDIF(NOT STRING_REGEX_PASSED)
 
 #

+ 5 - 4
Tests/ComplexOneConfig/CMakeLists.txt

@@ -221,12 +221,13 @@ STRING(REGEX MATCHALL "b" RESULT "abcb")
 IF(NOT RESULT)
   MESSAGE(SEND_ERROR "STRING(REGEX MATCHALL ... ) test failed.")
 ENDIF(NOT RESULT)
-STRING(REGEX REPLACE "(b)" "[\\1]" RESULT "abcde")
-IF("x${RESULT}" MATCHES "^xa\\[b\\]cde$")
+STRING(REGEX REPLACE ".([bd])." "[\\1]" RESULT "a(b)c(d)e")
+IF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
   SET(STRING_REGEX_PASSED 1)
-ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]cde$")
+ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
 IF(NOT STRING_REGEX_PASSED)
-  MESSAGE(SEND_ERROR "STRING(REGEX REPLACE ... ) test failed.")
+  MESSAGE(SEND_ERROR
+          "STRING(REGEX REPLACE ... ) test failed (\"${RESULT}\" v. \"a[b]c[d]e\")")
 ENDIF(NOT STRING_REGEX_PASSED)
 
 #

+ 5 - 4
Tests/ComplexRelativePaths/CMakeLists.txt

@@ -221,12 +221,13 @@ STRING(REGEX MATCHALL "b" RESULT "abcb")
 IF(NOT RESULT)
   MESSAGE(SEND_ERROR "STRING(REGEX MATCHALL ... ) test failed.")
 ENDIF(NOT RESULT)
-STRING(REGEX REPLACE "(b)" "[\\1]" RESULT "abcde")
-IF("x${RESULT}" MATCHES "^xa\\[b\\]cde$")
+STRING(REGEX REPLACE ".([bd])." "[\\1]" RESULT "a(b)c(d)e")
+IF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
   SET(STRING_REGEX_PASSED 1)
-ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]cde$")
+ENDIF("x${RESULT}" MATCHES "^xa\\[b\\]c\\[d\\]e$")
 IF(NOT STRING_REGEX_PASSED)
-  MESSAGE(SEND_ERROR "STRING(REGEX REPLACE ... ) test failed.")
+  MESSAGE(SEND_ERROR
+          "STRING(REGEX REPLACE ... ) test failed (\"${RESULT}\" v. \"a[b]c[d]e\")")
 ENDIF(NOT STRING_REGEX_PASSED)
 
 #