zoe Wed May 13 16:58:27 2009 UTC Modified files: /phpruntests/src/testcase/sections/outputsections rtExpectFSection.php Log: Added support for %r http://cvs.php.net/viewvc.cgi/phpruntests/src/testcase/sections/outputsections/rtExpectFSection.php?r1=1.2&r2=1.3&diff_format=u Index: phpruntests/src/testcase/sections/outputsections/rtExpectFSection.php diff -u phpruntests/src/testcase/sections/outputsections/rtExpectFSection.php:1.2 phpruntests/src/testcase/sections/outputsections/rtExpectFSection.php:1.3 --- phpruntests/src/testcase/sections/outputsections/rtExpectFSection.php:1.2 Fri Apr 24 08:41:26 2009 +++ phpruntests/src/testcase/sections/outputsections/rtExpectFSection.php Wed May 13 16:58:27 2009 @@ -9,18 +9,19 @@ parent::createPattern(); $this->createPattern(); } - + /** * Create the pattern used to match against actual output * */ protected function createPattern() - { - $this->expectedPattern = preg_quote($this->expectedPattern, '/'); - $this->expectedPattern = $this->expectfUnicodeSubstitutions ($this->expectedPattern); - $this->expectedPattern = $this->expectfRegexSubstitutions($this->expectedPattern); + { + + $this->expectedPattern = $this->expectfEmbeddedRegex($this->expectedPattern); + $this->expectedPattern = $this->expectfUnicodeSubstitutions ($this->expectedPattern); + $this->expectedPattern = $this->expectfRegexSubstitutions($this->expectedPattern); } - + /* * Replaces string with unicode and vice versa. Allows same tests for PHP5 and PHP6 * @param string @@ -29,25 +30,25 @@ private function expectfUnicodeSubstitutions($string) { $string = str_replace( - array('%unicode_string_optional%'), - version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? 'string' : 'Unicode string', $string + array('%unicode_string_optional%'), + version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? 'string' : 'Unicode string', $string ); - + $string = str_replace( - array('%unicode\|string%', '%string\|unicode%'), - version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? 'string' : 'unicode', - $string + array('%unicode\|string%', '%string\|unicode%'), + version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? 'string' : 'unicode', + $string ); - + $string = str_replace( - array('%u\|b%', '%b\|u%'), - version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? '' : 'u', - $string + array('%u\|b%', '%b\|u%'), + version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? '' : 'u', + $string ); return $string; } - + /* * Substitute the %strings used in EXPECTF sections with a regular expression * @param string @@ -68,7 +69,40 @@ $string = str_replace('%c', '.', $string); return $string; - } + } + + /* + * Deal with embedded regular expressions between %r tags. + * @param string + * @return string + */ + private function expectfEmbeddedRegex($string) { + $temp = ""; + $r = "%r"; + $startOffset = 0; + + $length = strlen($string); + while($startOffset < $length) { + $start = strpos($string, $r, $startOffset); + if ($start !== false) { + // we have found a start tag + $end = strpos($string, $r, $start+2); + if ($end === false) { + // unbalanced tag, ignore it. + $end = $start = $length; + } + } else { + // no more %r sections + $start = $end = $length; + } + // quote a non re portion of the string + $temp = $temp . preg_quote(substr($string, $startOffset, ($start - $startOffset)), '/'); + // add the re unquoted. + $temp = $temp . '(' .substr($string, $start+2, ($end - $start-2)) . ')'; + $startOffset = $end + 2; + } + return substr($temp, 0, -2); + } /** * Compare the test output with the expected pattern @@ -79,14 +113,14 @@ public function compare($testOutput) { $testOutput = trim(preg_replace("/$this->carriageReturnLineFeed/", $this->lineFeed, $testOutput)); - + /*For debugging: - + file_put_contents(sys_get_temp_dir().'/zrtexp',$this->expectedPattern ); file_put_contents(sys_get_temp_dir().'/zrtout', $testOutput ); */ - + if (preg_match((binary) "/^$this->expectedPattern\$/s", $testOutput)) { return true; } else {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php