Changeset 134
- Timestamp:
- 03/04/08 23:12:35 (10 months ago)
- Location:
- trunk/src/Stagehand
- Files:
-
- 1 added
- 3 modified
-
TestRunner.php (modified) (5 diffs)
-
TestRunner/AlterationMonitor.php (modified) (7 diffs)
-
TestRunner/Collector/Common.php (modified) (6 diffs)
-
TestRunner/DirectoryScanner.php (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/Stagehand/TestRunner.php
r133 r134 222 222 $options[] = '-R'; 223 223 224 if ( $config->preload) {224 if (!is_null($config->preloadFile)) { 225 225 $options[] = "-p {$config->preloadFile}"; 226 226 } … … 260 260 $color = false; 261 261 $enableAutotest = false; 262 $preload = false;263 262 $preloadFile = null; 264 $useTargetDirectories = false;265 263 $targetDirectories = array(); 266 264 foreach ($allOptions as $options) { … … 287 285 break; 288 286 case 'p': 289 $preload = true;290 287 $preloadFile = $option[1]; 291 288 break; … … 294 291 break; 295 292 case 'w': 296 $useTargetDirectories = true;297 293 $targetDirectories = explode(',', $option[1]); 298 294 break; … … 308 304 'color' => $color, 309 305 'enableAutotest' => $enableAutotest, 310 'preload' => $preload,311 306 'preloadFile' => $preloadFile, 312 'useTargetDirectories' => $useTargetDirectories,313 307 'targetDirectories' => $targetDirectories 314 308 ); -
trunk/src/Stagehand/TestRunner/AlterationMonitor.php
r133 r134 33 33 * @license http://www.opensource.org/licenses/bsd-license.php BSD License (revised) 34 34 * @version SVN: $Id$ 35 * @link http://winbinder.org/36 35 * @since File available since Release 2.1.0 37 36 */ 38 37 39 38 require_once 'Stagehand/TestRunner/Exception.php'; 39 require_once 'Stagehand/TestRunner/DirectoryScanner.php'; 40 40 41 41 // {{{ Stagehand_TestRunner_AlterationMonitor … … 48 48 * @license http://www.opensource.org/licenses/bsd-license.php BSD License (revised) 49 49 * @version Release: @package_version@ 50 * @link http://winbinder.org/51 50 * @since Class available since Release 2.1.0 52 51 */ … … 82 81 private $_previousElements; 83 82 private $_isFirstTime = true; 84 private $_excludePatterns = array('!^CVS$!',85 '!^.svn!',86 '!\.swp$!',87 '!~$!',88 '!\.bak$!',89 '!^#.+#$!'90 );91 83 private $_scanInterval = self::SCAN_INTERVAL_MIN; 84 private $_directoryScanner; 92 85 93 86 /**#@-*/ … … 110 103 $this->_directories = $directories; 111 104 $this->_command = $command; 105 $this->_directoryScanner = new Stagehand_TestRunner_DirectoryScanner(array($this, 'detectChanges')); 112 106 } 113 107 … … 138 132 } 139 133 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 140 170 /**#@-*/ 141 171 … … 181 211 $startTime = time(); 182 212 foreach ($this->_directories as $directory) { 183 $this->_ collectElements($directory);213 $this->_directoryScanner->scan($directory); 184 214 } 185 215 $endTime = time(); … … 203 233 $this->_previousElements = $this->_currentElements; 204 234 $this->_isFirstTime = false; 205 }206 }207 208 // }}}209 // {{{ _collectElements()210 211 /**212 * Collects all files and directories in a target directory and detects any213 * changes of a file or directory immediately.214 *215 * @param string $directory216 * @throws Stagehand_TestRunner_Exception217 */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 }260 235 } 261 236 } -
trunk/src/Stagehand/TestRunner/Collector/Common.php
r131 r134 37 37 38 38 require_once 'Stagehand/TestRunner/Exception.php'; 39 require_once 'Stagehand/TestRunner/DirectoryScanner.php'; 39 40 40 41 // {{{ Stagehand_TestRunner_Collector_Common … … 77 78 private $_targetPath; 78 79 private $_isRecursive; 79 private $_excludePatterns = array('!^CVS$!',80 '!^.svn!',81 '!\.swp$!',82 '!~$!',83 '!\.bak$!',84 '!^#.+#$!'85 );86 80 private $_testCases = array(); 87 81 … … 111 105 112 106 /** 113 * Collects test cases.107 * Collects tests. 114 108 * 115 109 * @return mixed … … 136 130 137 131 if (is_dir($absoluteTargetPath)) { 138 $this->_collectTestCases($absoluteTargetPath); 132 $directoryScanner = new Stagehand_TestRunner_DirectoryScanner(array($this, 'collectTestCases'), $this->_isRecursive); 133 $directoryScanner->scan($absoluteTargetPath); 139 134 } else { 140 $this->_collectTestCase FromFile($absoluteTargetPath);135 $this->_collectTestCasesFromFile($absoluteTargetPath); 141 136 } 142 137 143 138 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 } 144 154 } 145 155 … … 226 236 227 237 // }}} 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() 261 239 262 240 /** … … 265 243 * @param string $file 266 244 */ 267 private function _collectTestCase FromFile($file)245 private function _collectTestCasesFromFile($file) 268 246 { 269 247 if (!preg_match("/{$this->_suffix}\.php\$/", $file)) {
