123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?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 1784 2008-04-26 13:07:14Z pp11 $
- */
-
- /**
- * 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.
- * @return string Path without trailing slash.
- */
- protected function removeTrailingSlash($path) {
- if (substr($path, -1) == DIRECTORY_SEPARATOR) {
- return substr($path, 0, -1);
- } elseif (substr($path, -1) == '/') {
- 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) {
- if ($this->isHidden($entry)) {
- continue;
- }
- $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
- */
- protected function handle(&$test, $file) {
- if (is_dir($file)) {
- return;
- }
- $test->addFile($file);
- }
-
- /**
- * Tests for hidden files so as to skip them. Currently
- * only tests for Unix hidden files.
- * @param string $filename Plain filename.
- * @return boolean True if hidden file.
- * @access private
- */
- protected function isHidden($filename) {
- return strncmp($filename, '.', 1) == 0;
- }
- }
-
- /**
- * An extension to {@link SimpleCollector} that only adds files matching a
- * given pattern.
- *
- * @package SimpleTest
- * @subpackage UnitTester
- * @see SimpleCollector
- */
- class SimplePatternCollector extends SimpleCollector {
- private $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 __construct($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
- */
- protected function handle(&$test, $filename) {
- if (preg_match($this->pattern, $filename)) {
- parent::handle($test, $filename);
- }
- }
- }
- ?>
|