source: trunk/server/www/vendors/simpletest/collector.php @ 6

Last change on this file since 6 was 6, checked in by sander, 11 years ago

Added SimpleTest? test framework

File size: 3.6 KB
Line 
1<?php
2/**
3 * This file contains the following classes: {@link SimpleCollector},
4 * {@link SimplePatternCollector}.
5 *
6 * @author Travis Swicegood <development@domain51.com>
7 * @package SimpleTest
8 * @subpackage UnitTester
9 * @version $Id: collector.php 1723 2008-04-08 00:34:10Z lastcraft $
10 */
11
12/**
13 * The basic collector for {@link GroupTest}
14 *
15 * @see collect(), GroupTest::collect()
16 * @package SimpleTest
17 * @subpackage UnitTester
18 */
19class SimpleCollector {
20
21    /**
22     * Strips off any kind of slash at the end so as to normalise the path.
23     * @param string $path    Path to normalise.
24     * @return string         Path without trailing slash.
25     */
26    function _removeTrailingSlash($path) {
27        if (substr($path, -1) == DIRECTORY_SEPARATOR) {
28            return substr($path, 0, -1);
29        } elseif (substr($path, -1) == '/') {
30            return substr($path, 0, -1);
31        } else {
32            return $path;
33        }
34    }
35
36    /**
37     * Scans the directory and adds what it can.
38     * @param object $test    Group test with {@link GroupTest::addTestFile()} method.
39     * @param string $path    Directory to scan.
40     * @see _attemptToAdd()
41     */
42    function collect(&$test, $path) {
43        $path = $this->_removeTrailingSlash($path);
44        if ($handle = opendir($path)) {
45            while (($entry = readdir($handle)) !== false) {
46                if ($this->_isHidden($entry)) {
47                    continue;
48                }
49                $this->_handle($test, $path . DIRECTORY_SEPARATOR . $entry);
50            }
51            closedir($handle);
52        }
53    }
54
55    /**
56     * This method determines what should be done with a given file and adds
57     * it via {@link GroupTest::addTestFile()} if necessary.
58     *
59     * This method should be overriden to provide custom matching criteria,
60     * such as pattern matching, recursive matching, etc.  For an example, see
61     * {@link SimplePatternCollector::_handle()}.
62     *
63     * @param object $test      Group test with {@link GroupTest::addTestFile()} method.
64     * @param string $filename  A filename as generated by {@link collect()}
65     * @see collect()
66     * @access protected
67     */
68    function _handle(&$test, $file) {
69        if (is_dir($file)) {
70            return;
71        }
72        $test->addTestFile($file);
73    }
74   
75    /**
76     *  Tests for hidden files so as to skip them. Currently
77     *  only tests for Unix hidden files.
78     *  @param string $filename        Plain filename.
79     *  @return boolean                True if hidden file.
80     *  @access private
81     */
82    function _isHidden($filename) {
83        return strncmp($filename, '.', 1) == 0;
84    }
85}
86
87/**
88 * An extension to {@link SimpleCollector} that only adds files matching a
89 * given pattern.
90 *
91 * @package SimpleTest
92 * @subpackage UnitTester
93 * @see SimpleCollector
94 */
95class SimplePatternCollector extends SimpleCollector {
96    var $_pattern;
97
98    /**
99     *
100     * @param string $pattern   Perl compatible regex to test name against
101     *  See {@link http://us4.php.net/manual/en/reference.pcre.pattern.syntax.php PHP's PCRE}
102     *  for full documentation of valid pattern.s
103     */
104    function SimplePatternCollector($pattern = '/php$/i') {
105        $this->_pattern = $pattern;
106    }
107
108    /**
109     * Attempts to add files that match a given pattern.
110     *
111     * @see SimpleCollector::_handle()
112     * @param object $test    Group test with {@link GroupTest::addTestFile()} method.
113     * @param string $path    Directory to scan.
114     * @access protected
115     */
116    function _handle(&$test, $filename) {
117        if (preg_match($this->_pattern, $filename)) {
118            parent::_handle($test, $filename);
119        }
120    }
121}
122?>
Note: See TracBrowser for help on using the repository browser.