Version 1
[yaffs-website] / vendor / phpunit / phpunit / src / Runner / Filter / Test.php
diff --git a/vendor/phpunit/phpunit/src/Runner/Filter/Test.php b/vendor/phpunit/phpunit/src/Runner/Filter/Test.php
new file mode 100644 (file)
index 0000000..bae4a5c
--- /dev/null
@@ -0,0 +1,116 @@
+<?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.
+ */
+
+/**
+ * @since Class available since Release 4.0.0
+ */
+class PHPUnit_Runner_Filter_Test extends RecursiveFilterIterator
+{
+    /**
+     * @var string
+     */
+    protected $filter = null;
+
+    /**
+     * @var int
+     */
+    protected $filterMin;
+    /**
+     * @var int
+     */
+    protected $filterMax;
+
+    /**
+     * @param RecursiveIterator $iterator
+     * @param string            $filter
+     */
+    public function __construct(RecursiveIterator $iterator, $filter)
+    {
+        parent::__construct($iterator);
+        $this->setFilter($filter);
+    }
+
+    /**
+     * @param string $filter
+     */
+    protected function setFilter($filter)
+    {
+        if (PHPUnit_Util_Regex::pregMatchSafe($filter, '') === false) {
+            // Handles:
+            //  * testAssertEqualsSucceeds#4
+            //  * testAssertEqualsSucceeds#4-8
+            if (preg_match('/^(.*?)#(\d+)(?:-(\d+))?$/', $filter, $matches)) {
+                if (isset($matches[3]) && $matches[2] < $matches[3]) {
+                    $filter = sprintf(
+                        '%s.*with data set #(\d+)$',
+                        $matches[1]
+                    );
+
+                    $this->filterMin = $matches[2];
+                    $this->filterMax = $matches[3];
+                } else {
+                    $filter = sprintf(
+                        '%s.*with data set #%s$',
+                        $matches[1],
+                        $matches[2]
+                    );
+                }
+            } // Handles:
+            //  * testDetermineJsonError@JSON_ERROR_NONE
+            //  * testDetermineJsonError@JSON.*
+            elseif (preg_match('/^(.*?)@(.+)$/', $filter, $matches)) {
+                $filter = sprintf(
+                    '%s.*with data set "%s"$',
+                    $matches[1],
+                    $matches[2]
+                );
+            }
+
+            // Escape delimiters in regular expression. Do NOT use preg_quote,
+            // to keep magic characters.
+            $filter = sprintf('/%s/', str_replace(
+                '/',
+                '\\/',
+                $filter
+            ));
+        }
+
+        $this->filter = $filter;
+    }
+
+    /**
+     * @return bool
+     */
+    public function accept()
+    {
+        $test = $this->getInnerIterator()->current();
+
+        if ($test instanceof PHPUnit_Framework_TestSuite) {
+            return true;
+        }
+
+        $tmp = PHPUnit_Util_Test::describe($test, false);
+
+        if ($tmp[0] != '') {
+            $name = implode('::', $tmp);
+        } else {
+            $name = $tmp[1];
+        }
+
+        $accepted = @preg_match($this->filter, $name, $matches);
+
+        if ($accepted && isset($this->filterMax)) {
+            $set      = end($matches);
+            $accepted = $set >= $this->filterMin && $set <= $this->filterMax;
+        }
+
+        return $accepted;
+    }
+}