1
|
|
|
<?php |
|
|
|
|
2
|
|
|
//require 'PHPUnit/Autoload.php'; |
3
|
|
|
|
4
|
|
|
require __DIR__ . '/bootstrap.php'; |
5
|
|
|
|
6
|
|
|
if (!defined('PHPUnit_MAIN_METHOD')) { |
7
|
|
|
define('PHPUnit_MAIN_METHOD', 'KochTest\AllTests::main'); |
8
|
|
|
} |
9
|
|
|
|
10
|
|
|
class AllTests |
|
|
|
|
11
|
|
|
{ |
12
|
|
|
public static function main() |
13
|
|
|
{ |
14
|
|
|
PHPUnit_TextUI_TestRunner::run(self::suite()); |
15
|
|
|
} |
16
|
|
|
|
17
|
|
|
public static function suite() |
18
|
|
|
{ |
19
|
|
|
$suite = new PHPUnit_Framework_TestSuite('Koch Framework - TestSuite'); |
20
|
|
|
foreach (self::getTestFiles() as $file) { |
21
|
|
|
$suite->addFile$file); |
|
|
|
|
22
|
|
|
} |
23
|
|
|
|
24
|
|
|
return $suite; |
25
|
|
|
} |
26
|
|
|
|
27
|
|
|
/** |
28
|
|
|
* Tries to find in CLI parameters and returns array of files to be runj by PHPUnit |
29
|
|
|
* or throws Exception if no such parameter found or directory/file does not exist. |
30
|
|
|
* |
31
|
|
|
* @return array an array of files to be run by PHPUnit |
32
|
|
|
*/ |
33
|
|
|
private static function getTestFiles() |
34
|
|
|
{ |
35
|
|
|
$argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : array(); |
36
|
|
|
$run = null; |
37
|
|
|
foreach ($argv as $arg) { |
38
|
|
|
if (preg_match("/^\"?" . self::RUN . "(.+?)\"?$/", $arg, $sub)) { |
39
|
|
|
$run = $sub[1]; |
40
|
|
|
break; |
41
|
|
|
} |
42
|
|
|
} |
43
|
|
|
if ($run === null) { |
44
|
|
|
throw new Exception("No argument to run found."); |
45
|
|
|
} |
46
|
|
|
if (is_dir($run)) { |
47
|
|
|
return self::rglob("*[Tt]est.php", $run . DIRECTORY_SEPARATOR); |
48
|
|
|
} elseif (is_file($run)) { |
49
|
|
|
return array($run); |
50
|
|
|
} |
51
|
|
|
throw new Exception(sprintf("Argument '%s' neither file nor directory.", $run)); |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
/** |
55
|
|
|
* Recursive glob(). |
56
|
|
|
* |
57
|
|
|
* @param string $pattern the pattern passed to glob(), default is "*" |
58
|
|
|
* @param string $path the path to scan, default is |
59
|
|
|
* @param int $flags the flags passed to glob() |
60
|
|
|
* @return array an array of files in the given path matching the pattern. |
61
|
|
|
*/ |
62
|
|
|
private static function rglob($pattern = '*', $path = '', $flags = 0) |
63
|
|
|
{ |
64
|
|
|
$paths = glob($path . '*', GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT) or array(); |
|
|
|
|
65
|
|
|
$files = glob($path . $pattern, $flags) or array(); |
|
|
|
|
66
|
|
|
foreach ($paths as $path) { |
67
|
|
|
$files += self::rglob($pattern, $path, $flags); |
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
return $files; |
71
|
|
|
} |
72
|
|
|
} |
73
|
|
|
|
74
|
|
|
if (PHPUnit_MAIN_METHOD == 'AllTests::main') { |
75
|
|
|
AllTests::main(); |
76
|
|
|
} |
77
|
|
|
|
The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.
The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.
To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.