Changeset 134

Show
Ignore:
Timestamp:
03/04/08 23:12:35 (10 months ago)
Author:
iteman
Message:

- Refactored.

Location:
trunk/src/Stagehand
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/Stagehand/TestRunner.php

    r133 r134  
    222222        $options[] = '-R'; 
    223223 
    224         if ($config->preload) { 
     224        if (!is_null($config->preloadFile)) { 
    225225            $options[] = "-p {$config->preloadFile}"; 
    226226        } 
     
    260260        $color = false; 
    261261        $enableAutotest = false; 
    262         $preload = false; 
    263262        $preloadFile = null; 
    264         $useTargetDirectories = false; 
    265263        $targetDirectories = array(); 
    266264        foreach ($allOptions as $options) { 
     
    287285                        break; 
    288286                    case 'p': 
    289                         $preload = true; 
    290287                        $preloadFile = $option[1]; 
    291288                        break; 
     
    294291                        break; 
    295292                    case 'w': 
    296                         $useTargetDirectories = true; 
    297293                        $targetDirectories = explode(',', $option[1]); 
    298294                        break; 
     
    308304                             'color' => $color, 
    309305                             'enableAutotest' => $enableAutotest, 
    310                              'preload' => $preload, 
    311306                             'preloadFile' => $preloadFile, 
    312                              'useTargetDirectories' => $useTargetDirectories, 
    313307                             'targetDirectories' => $targetDirectories 
    314308                             ); 
  • trunk/src/Stagehand/TestRunner/AlterationMonitor.php

    r133 r134  
    3333 * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License (revised) 
    3434 * @version    SVN: $Id$ 
    35  * @link       http://winbinder.org/ 
    3635 * @since      File available since Release 2.1.0 
    3736 */ 
    3837 
    3938require_once 'Stagehand/TestRunner/Exception.php'; 
     39require_once 'Stagehand/TestRunner/DirectoryScanner.php'; 
    4040 
    4141// {{{ Stagehand_TestRunner_AlterationMonitor 
     
    4848 * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License (revised) 
    4949 * @version    Release: @package_version@ 
    50  * @link       http://winbinder.org/ 
    5150 * @since      Class available since Release 2.1.0 
    5251 */ 
     
    8281    private $_previousElements; 
    8382    private $_isFirstTime = true; 
    84     private $_excludePatterns = array('!^CVS$!', 
    85                                       '!^.svn!', 
    86                                       '!\.swp$!', 
    87                                       '!~$!', 
    88                                       '!\.bak$!', 
    89                                       '!^#.+#$!' 
    90                                       ); 
    9183    private $_scanInterval = self::SCAN_INTERVAL_MIN; 
     84    private $_directoryScanner; 
    9285 
    9386    /**#@-*/ 
     
    110103        $this->_directories = $directories; 
    111104        $this->_command = $command; 
     105        $this->_directoryScanner = new Stagehand_TestRunner_DirectoryScanner(array($this, 'detectChanges')); 
    112106    } 
    113107 
     
    138132    } 
    139133 
     134    // }}} 
     135    // {{{ detectChanges() 
     136 
     137    /** 
     138     * Detects any changes of a file or directory immediately. 
     139     * 
     140     * @param string $element 
     141     * @throws Stagehand_TestRunner_Exception 
     142     */ 
     143    public function detectChanges($element) 
     144    { 
     145        if (!$this->_isFirstTime) { 
     146            if (!array_key_exists($element, $this->_previousElements)) { 
     147                throw new Stagehand_TestRunner_Exception(); 
     148            } 
     149 
     150            if (!is_dir($element)) { 
     151                $mtime = filemtime($element); 
     152                if ($this->_previousElements[$element]['mtime'] != $mtime) { 
     153                    throw new Stagehand_TestRunner_Exception(); 
     154                } 
     155            } 
     156 
     157            $perms = fileperms($element); 
     158            if ($this->_previousElements[$element]['perms'] != $perms) { 
     159                throw new Stagehand_TestRunner_Exception(); 
     160            } 
     161        } 
     162 
     163        if (!is_dir($element)) { 
     164            $this->_currentElements[$element]['mtime'] = filemtime($element); 
     165        } 
     166 
     167        $this->_currentElements[$element]['perms'] = fileperms($element); 
     168    } 
     169 
    140170    /**#@-*/ 
    141171 
     
    181211                $startTime = time(); 
    182212                foreach ($this->_directories as $directory) { 
    183                     $this->_collectElements($directory); 
     213                    $this->_directoryScanner->scan($directory); 
    184214                } 
    185215                $endTime = time(); 
     
    203233            $this->_previousElements = $this->_currentElements; 
    204234            $this->_isFirstTime = false; 
    205         } 
    206     } 
    207  
    208     // }}} 
    209     // {{{ _collectElements() 
    210  
    211     /** 
    212      * Collects all files and directories in a target directory and detects any 
    213      * changes of a file or directory immediately. 
    214      * 
    215      * @param string $directory 
    216      * @throws Stagehand_TestRunner_Exception 
    217      */ 
    218     private function _collectElements($directory) 
    219     { 
    220         $files = scandir($directory); 
    221         for ($i = 0, $count = count($files); $i < $count; ++$i) { 
    222             if ($files[$i] == '.' || $files[$i] == '..') { 
    223                 continue; 
    224             } 
    225  
    226             foreach ($this->_excludePatterns as $excludePattern) { 
    227                 if (preg_match($excludePattern, $files[$i])) { 
    228                     continue 2; 
    229                 } 
    230             } 
    231  
    232             $element = $directory . DIRECTORY_SEPARATOR . $files[$i]; 
    233             if (!$this->_isFirstTime) { 
    234                 if (!array_key_exists($element, $this->_previousElements)) { 
    235                     throw new Stagehand_TestRunner_Exception(); 
    236                 } 
    237  
    238                 if (!is_dir($element)) { 
    239                     $mtime = filemtime($element); 
    240                     if ($this->_previousElements[$element]['mtime'] != $mtime) { 
    241                         throw new Stagehand_TestRunner_Exception(); 
    242                     } 
    243                 } 
    244  
    245                 $perms = fileperms($element); 
    246                 if ($this->_previousElements[$element]['perms'] != $perms) { 
    247                     throw new Stagehand_TestRunner_Exception(); 
    248                 } 
    249             } 
    250  
    251             if (!is_dir($element)) { 
    252                 $this->_currentElements[$element]['mtime'] = filemtime($element); 
    253             } 
    254  
    255             $this->_currentElements[$element]['perms'] = fileperms($element); 
    256  
    257             if (is_dir($element)) { 
    258                 $this->_collectElements($element); 
    259             } 
    260235        } 
    261236    } 
  • trunk/src/Stagehand/TestRunner/Collector/Common.php

    r131 r134  
    3737 
    3838require_once 'Stagehand/TestRunner/Exception.php'; 
     39require_once 'Stagehand/TestRunner/DirectoryScanner.php'; 
    3940 
    4041// {{{ Stagehand_TestRunner_Collector_Common 
     
    7778    private $_targetPath; 
    7879    private $_isRecursive; 
    79     private $_excludePatterns = array('!^CVS$!', 
    80                                       '!^.svn!', 
    81                                       '!\.swp$!', 
    82                                       '!~$!', 
    83                                       '!\.bak$!', 
    84                                       '!^#.+#$!' 
    85                                       ); 
    8680    private $_testCases = array(); 
    8781 
     
    111105 
    112106    /** 
    113      * Collects test cases. 
     107     * Collects tests. 
    114108     * 
    115109     * @return mixed 
     
    136130 
    137131        if (is_dir($absoluteTargetPath)) { 
    138             $this->_collectTestCases($absoluteTargetPath); 
     132            $directoryScanner = new Stagehand_TestRunner_DirectoryScanner(array($this, 'collectTestCases'), $this->_isRecursive); 
     133            $directoryScanner->scan($absoluteTargetPath); 
    139134        } else { 
    140             $this->_collectTestCaseFromFile($absoluteTargetPath); 
     135            $this->_collectTestCasesFromFile($absoluteTargetPath); 
    141136        } 
    142137 
    143138        return $this->_buildTestSuite(); 
     139    } 
     140 
     141    // }}} 
     142    // {{{ collectTestCases() 
     143 
     144    /** 
     145     * Collects all test cases included in the specified directory. 
     146     * 
     147     * @param string $element 
     148     */ 
     149    public function collectTestCases($element) 
     150    { 
     151        if (is_file($element)) { 
     152            $this->_collectTestCasesFromFile($element); 
     153        } 
    144154    } 
    145155 
     
    226236 
    227237    // }}} 
    228     // {{{ _collectTestCases() 
    229  
    230     /** 
    231      * Collects all test cases included in the specified directory. 
    232      * 
    233      * @param string $directory 
    234      */ 
    235     private function _collectTestCases($directory) 
    236     { 
    237         $files = scandir($directory); 
    238         for ($i = 0, $count = count($files); $i < $count; ++$i) { 
    239             if ($files[$i] == '.' || $files[$i] == '..') { 
    240                 continue; 
    241             } 
    242  
    243             foreach ($this->_excludePatterns as $excludePattern) { 
    244                 if (preg_match($excludePattern, $files[$i])) { 
    245                     continue 2; 
    246                 } 
    247             } 
    248  
    249             $element = $directory . DIRECTORY_SEPARATOR . $files[$i]; 
    250             if (is_dir($element) && $this->_isRecursive) { 
    251                 $this->_collectTestCases($element); 
    252                 continue; 
    253             } 
    254  
    255             $this->_collectTestCaseFromFile($element); 
    256         } 
    257     } 
    258  
    259     // }}} 
    260     // {{{ _collectTestCaseFromFile() 
     238    // {{{ _collectTestCasesFromFile() 
    261239 
    262240    /** 
     
    265243     * @param string $file 
    266244     */ 
    267     private function _collectTestCaseFromFile($file) 
     245    private function _collectTestCasesFromFile($file) 
    268246    { 
    269247        if (!preg_match("/{$this->_suffix}\.php\$/", $file)) {