summaryrefslogtreecommitdiff
path: root/tests/test_tools/simpletest/collector.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_tools/simpletest/collector.php')
-rw-r--r--tests/test_tools/simpletest/collector.php115
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/test_tools/simpletest/collector.php b/tests/test_tools/simpletest/collector.php
new file mode 100644
index 00000000..f73193c7
--- /dev/null
+++ b/tests/test_tools/simpletest/collector.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * This file contains the following classes: {@link SimpleCollector},
+ * {@link SimplePatternCollector}.
+ *
+ * @author Travis Swicegood <development@domain51.com>
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: collector.php,v 1.7 2005/09/10 21:09:34 tswicegood Exp $
+ */
+
+/**
+ * The basic collector for {@link GroupTest}
+ *
+ * @see collect(), GroupTest::collect()
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleCollector {
+
+ /**
+ * Strips off any kind of slash at the end so as to normalise the path
+ *
+ * @param string $path Path to normalise.
+ */
+ function _removeTrailingSlash($path) {
+ return preg_replace('|[\\/]$|', '', $path);
+
+ /**
+ * @internal
+ * Try benchmarking the following. It's more code, but by not using the
+ * regex, it may be faster? Also, shouldn't be looking for
+ * DIRECTORY_SEPERATOR instead of a manual "/"?
+ */
+ if (substr($path, -1) == DIRECTORY_SEPERATOR) {
+ return substr($path, 0, -1);
+ } else {
+ return $path;
+ }
+ }
+
+ /**
+ * Scans the directory and adds what it can.
+ * @param object $test Group test with {@link GroupTest::addTestFile()} method.
+ * @param string $path Directory to scan.
+ * @see _attemptToAdd()
+ */
+ function collect($test, $path) {
+ $path = $this->_removeTrailingSlash($path);
+ if ($handle = opendir($path)) {
+ while (($entry = readdir($handle)) !== false) {
+ $this->_handle($test, $path . DIRECTORY_SEPARATOR . $entry);
+ }
+ closedir($handle);
+ }
+ }
+
+ /**
+ * This method determines what should be done with a given file and adds
+ * it via {@link GroupTest::addTestFile()} if necessary.
+ *
+ * This method should be overriden to provide custom matching criteria,
+ * such as pattern matching, recursive matching, etc. For an example, see
+ * {@link SimplePatternCollector::_handle()}.
+ *
+ * @param object $test Group test with {@link GroupTest::addTestFile()} method.
+ * @param string $filename A filename as generated by {@link collect()}
+ * @see collect()
+ * @access protected
+ */
+ function _handle($test, $file) {
+ if (!is_dir($file)) {
+ $test->addTestFile($file);
+ }
+ }
+}
+
+/**
+ * An extension to {@link SimpleCollector} that only adds files matching a
+ * given pattern.
+ *
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @see SimpleCollector
+ */
+class SimplePatternCollector extends SimpleCollector {
+ protected $_pattern;
+
+
+ /**
+ *
+ * @param string $pattern Perl compatible regex to test name against
+ * See {@link http://us4.php.net/manual/en/reference.pcre.pattern.syntax.php PHP's PCRE}
+ * for full documentation of valid pattern.s
+ */
+ function SimplePatternCollector($pattern = '/php$/i') {
+ $this->_pattern = $pattern;
+ }
+
+
+ /**
+ * Attempts to add files that match a given pattern.
+ *
+ * @see SimpleCollector::_handle()
+ * @param object $test Group test with {@link GroupTest::addTestFile()} method.
+ * @param string $path Directory to scan.
+ * @access protected
+ */
+ function _handle($test, $filename) {
+ if (preg_match($this->_pattern, $filename)) {
+ parent::_handle($test, $filename);
+ }
+ }
+}
+?> \ No newline at end of file