-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPhpUnit.php
127 lines (100 loc) · 2.58 KB
/
PhpUnit.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace Genesis\Commands;
/**
* @author Adam Bisek <[email protected]>
*/
class PhpUnit extends Command
{
private $workingDir;
private $target;
private $options;
/**
* Returns working directory. System will switch to this directory before running tests
* @return string
*/
public function getWorkingDir()
{
return $this->workingDir;
}
/**
* Sets working directory. System will switch to this directory before running tests
* @param mixed $workingDir
*/
public function setWorkingDir($workingDir)
{
$this->workingDir = $workingDir;
}
/**
* Returns target to be executed. Dir in working directory, dot (current dir), TestFile, etc
* @return mixed
*/
public function getTarget()
{
return $this->target;
}
/**
* Sets target to be executed. Dir in working directory, dot (current dir), TestFile, etc
* @param mixed $target
*/
public function setTarget($target)
{
$this->target = $target;
}
/**
* @return array|NULL
*/
public function getOptions()
{
return $this->options;
}
/**
* Possible options:
* - executable (mandatory)
* - xdebugExtensionFile
* - configFile
* @param array|NULL $options
*/
public function setOptions(array $options = NULL)
{
$this->options = $options;
}
public function execute()
{
if (!isset($this->options['executable'])) {
$this->error('PHPUnit executable not defined.');
}
$cmd = '';
if (isset($this->options['xdebugExtensionFile'])) {
if (!is_file($this->options['xdebugExtensionFile'])) { // PHP is quite when extension file does not exists
$this->error("Xdebug extension file '{$this->options['xdebugExtensionFile']}' does not exists.");
}
$cmd .= 'php -d zend_extension=' . escapeshellarg($this->options['xdebugExtensionFile']) . ' ';
}
$cmd .= escapeshellarg($this->options['executable']) . ' ';
$cmd .= escapeshellarg($this->target) . ' ';
$options = [
'configFile' => '--configuration',
];
foreach($options as $name => $switch) {
if(isset($this->options[$name])) {
$cmd .= $switch . ' ';
$cmd .= escapeshellarg($this->options[$name]) . ' ';
}
}
$currdir = getcwd();
$result = @chdir($this->workingDir);
if (!$result) {
$this->error("Cannot change working directory to '$this->workingDir'.");
}
$command = new Exec();
$command->setCommand($cmd);
$result = $command->execute();
if ($result->getResult() !== 0) {
$this->error(sprintf('Tests failed with code %d.', $result->getResult()));
}
$result = @chdir($currdir);
if (!$result) {
$this->error("Cannot change working directory back to '$currdir'.");
}
}
}