Răsfoiți Sursa

fix off-by-one bug in pattern matching

[SVN r28942]
Aleksey Gurtovoy 21 ani în urmă
părinte
comite
4953256b14

+ 44 - 30
tools/regression/xsl_reports/xsl/test/test_re_match.xml

@@ -1,6 +1,6 @@
 <!--
 
-Copyright MetaCommunications, Inc. 2003-2004.
+Copyright MetaCommunications, Inc. 2003-2005.
 
 Distributed under the Boost Software License, Version 1.0. (See
 accompanying file LICENSE_1_0.txt or copy at
@@ -10,34 +10,48 @@ http://www.boost.org/LICENSE_1_0.txt)
 
 <root>
 
-<test pattern="" text="" />
-<test pattern="a" text="a" />
-
-<test pattern="*" text="" />
-<test pattern="*" text="aaaa" />
-
-<test pattern="*dsafasd*" text="" />
-<test pattern="*dsafasd*" text="__dsafasd___" />
-<test pattern="*dsafasd*" text="dsafasd" />
-<test pattern="*dsafasd*" text="dsafas" />
-
-<test pattern="*dsafasd" text="" />
-<test pattern="*dsafasd" text="___dsafasd" />
-<test pattern="*dsafasd" text="dsafasd" />
-<test pattern="*dsafasd" text="dsafasd__" />
-
-<test pattern="dsafasd*" text="" />
-<test pattern="dsafasd*" text="dsafasd__" />
-<test pattern="dsafasd*" text="dsafasd" />
-<test pattern="dsafasd*" text="__dsafasd" />
-
-
-<test pattern="dsaf*asd" text="" />
-<test pattern="dsaf*asd" text="dsaf__asd" />
-<test pattern="dsaf*asd" text="dsafasd" />
-<test pattern="dsafas*d" text="dsafasdd" />
-<test pattern="d*safasd" text="ddsafasd" />
-<test pattern="dsafas*d" text="dsafas" />
-<test pattern="d*safasd" text="safasd" />
+<test pattern="" text="" result="true"/>
+<test pattern="pattern" text="pattern" result="true"/>
+<test pattern="" text="pattern" result="false"/>
+<test pattern="pattern" text="" result="false"/>
+
+<test pattern="*" text="" result="true"/>
+<test pattern="*" text="pattern" result="true"/>
+
+<test pattern="*pattern*" text="" result="false"/>
+<test pattern="*pattern*" text="__pattern__" result="true"/>
+<test pattern="*pattern*" text="pattern" result="true"/>
+<test pattern="*pattern*" text="patter" result="false"/>
+<test pattern="*pattern*" text="patte__" result="false"/>
+<test pattern="*pattern*" text="attern" result="false"/>
+<test pattern="*pattern*" text="__ttern" result="false"/>
+
+<test pattern="*pattern" text="" result="false"/>
+<test pattern="*pattern" text="__pattern" result="true"/>
+<test pattern="*pattern" text="pattern" result="true"/>
+<test pattern="*pattern" text="pattern__" result="false"/>
+<test pattern="*pattern" text="patter" result="false"/>
+<test pattern="*pattern" text="patte__" result="false"/>
+<test pattern="*pattern" text="attern" result="false"/>
+<test pattern="*pattern" text="__ttern" result="false"/>
+
+<test pattern="pattern*" text="" result="false"/>
+<test pattern="pattern*" text="pattern__" result="true"/>
+<test pattern="pattern*" text="pattern" result="true"/>
+<test pattern="pattern*" text="patter" result="false"/>
+<test pattern="pattern*" text="__pattern" result="false"/>
+<test pattern="pattern*" text="attern" result="false"/>
+<test pattern="pattern*" text="patter_" result="false"/>
+<test pattern="pattern*" text="patte__" result="false"/>
+
+<test pattern="patt*ern" text="" result="false"/>
+<test pattern="patt*ern" text="patt__ern" result="true"/>
+<test pattern="patt*ern" text="pattern" result="true"/>
+<test pattern="patter*n" text="patter__n" result="true"/>
+<test pattern="p*attern" text="pttern" result="false"/>
+<test pattern="p*attern" text="pattern" result="true"/>
+<test pattern="patter*n" text="patter" result="false"/>
+<test pattern="p*attern" text="attern" result="false"/>
+<test pattern="p*attern" text="p_ttern" result="false"/>
 
 </root>

+ 6 - 3
tools/regression/xsl_reports/xsl/test/test_re_match.xsl

@@ -38,7 +38,7 @@ http://www.boost.org/LICENSE_1_0.txt)
                 <func:result select="substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/>
             </xsl:when>
             <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' ">
-                <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 2 )"/>
+                <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 1 )"/>
                 <func:result select="starts-with( $text, $pattern_head )"/>
             </xsl:when>
             <xsl:when test="contains( $pattern, '*' ) ">
@@ -50,8 +50,11 @@ http://www.boost.org/LICENSE_1_0.txt)
     </func:function>
 
     <xsl:template match='test'>
-        <test-result regex="{@pattern}" text="{@text}" result="{meta:re_match( @pattern, @text )}" >
-        </test-result>
+        <xsl:variable name="result" select="meta:re_match( @pattern, @text ) = 'true'"/>
+        <xsl:variable name="expected-result" select="@result"/>
+        <xsl:if test="$result != $expected-result">
+            <failed regex="{@pattern}" text="{@text}" result="{$result}"  expected-result="{$expected-result}"/>
+        </xsl:if>
     </xsl:template>
 
 </xsl:stylesheet>

+ 1 - 1
tools/regression/xsl_reports/xsl/v2/common.xsl

@@ -172,7 +172,7 @@ http://www.boost.org/LICENSE_1_0.txt)
                 <func:result select="substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/>
             </xsl:when>
             <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' ">
-                <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 2 )"/>
+                <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 1 )"/>
                 <func:result select="starts-with( $text, $pattern_head )"/>
             </xsl:when>
             <xsl:when test="contains( $pattern, '*' ) ">

粤ICP备19079148号