Version 1
[yaffs-website] / vendor / phpunit / phpunit / src / Framework / Constraint / StringMatches.php
diff --git a/vendor/phpunit/phpunit/src/Framework/Constraint/StringMatches.php b/vendor/phpunit/phpunit/src/Framework/Constraint/StringMatches.php
new file mode 100644 (file)
index 0000000..af42fc1
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use SebastianBergmann\Diff\Differ;
+
+/**
+ * ...
+ *
+ * @since Class available since Release 3.5.0
+ */
+class PHPUnit_Framework_Constraint_StringMatches extends PHPUnit_Framework_Constraint_PCREMatch
+{
+    /**
+     * @var string
+     */
+    protected $string;
+
+    /**
+     * @param string $string
+     */
+    public function __construct($string)
+    {
+        parent::__construct($string);
+
+        $this->pattern = $this->createPatternFromFormat(
+            preg_replace('/\r\n/', "\n", $string)
+        );
+
+        $this->string = $string;
+    }
+
+    protected function failureDescription($other)
+    {
+        return 'format description matches text';
+    }
+
+    protected function additionalFailureDescription($other)
+    {
+        $from = preg_split('(\r\n|\r|\n)', $this->string);
+        $to   = preg_split('(\r\n|\r|\n)', $other);
+
+        foreach ($from as $index => $line) {
+            if (isset($to[$index]) && $line !== $to[$index]) {
+                $line = $this->createPatternFromFormat($line);
+
+                if (preg_match($line, $to[$index]) > 0) {
+                    $from[$index] = $to[$index];
+                }
+            }
+        }
+
+        $this->string = implode("\n", $from);
+        $other        = implode("\n", $to);
+
+        $differ = new Differ("--- Expected\n+++ Actual\n");
+
+        return $differ->diff($this->string, $other);
+    }
+
+    protected function createPatternFromFormat($string)
+    {
+        $string = str_replace(
+            array(
+            '%e',
+            '%s',
+            '%S',
+            '%a',
+            '%A',
+            '%w',
+            '%i',
+            '%d',
+            '%x',
+            '%f',
+            '%c'
+            ),
+            array(
+            '\\' . DIRECTORY_SEPARATOR,
+            '[^\r\n]+',
+            '[^\r\n]*',
+            '.+',
+            '.*',
+            '\s*',
+            '[+-]?\d+',
+            '\d+',
+            '[0-9a-fA-F]+',
+            '[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?',
+            '.'
+            ),
+            preg_quote($string, '/')
+        );
+
+        return '/^' . $string . '$/s';
+    }
+}