-
Notifications
You must be signed in to change notification settings - Fork 6
/
RoboFile.php
123 lines (100 loc) · 3.43 KB
/
RoboFile.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
<?php
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Report\Clover;
use SebastianBergmann\CodeCoverage\Report\Html\Facade;
/**
* RoboFile.
*
* @author Marc Weistroff <marc@weistroff.net>
*/
class RoboFile extends \Robo\Tasks
{
const PHPDBG_EXEC = 'phpdbg -qrr';
const PHP_EXEC = 'php';
private $phpExec = self::PHP_EXEC;
public function testMergeCoverage()
{
$finder = new Symfony\Component\Finder\Finder();
$finder->name('coverage-*.php')->files()->in([__DIR__.'/build/phpunit', __DIR__.'/build/behat/report']);
$reports = [];
$filter = new Filter();
$global = new CodeCoverage(null, $filter);
$id = 'ah-test-suite';
$global->setTests([$id => ['size' => 'unknown', 'status' => null]]);
foreach ($finder as $file) {
$cc = require $file;
$global->merge($cc);
}
$writer = new Clover();
$writer->process($global, __DIR__.'/build/coverage-clover');
$writer = new Facade();
$writer->process($global, __DIR__.'/build/coverage-html');
}
public function testClean()
{
if (file_exists('build')) {
$this->taskCleanDir(['build'])->run();
}
if (file_exists('var/cache/test')) {
$this->taskCleanDir(['var/cache/test'])->run();
}
$this->taskFilesystemStack()
->mkdir('build/behat/debug')
->mkdir('build/behat/report')
->mkdir('build/phpunit')
->run();
$this->taskExec('./dbreset test')
->run();
}
public function testBehat($features = '')
{
$res = $this->taskExec("$this->phpExec ./vendor/bin/behat --tags '~@javascript' -f pretty -f junit")
->arg('--colors')
->arg($features)
->run();
return $res->wasSuccessful();
}
public function testBehatJavascript($features = '')
{
$this->taskExec(' /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary')
->arg('--headless')
->arg('--disable-gpu')
->arg('--remote-debugging-port=9222')
->arg('--remote-debugging-host=0.0.0.0')
->background()
->run()
;
$this->taskExec("$this->phpExec bin/console app:route:export-js --env=test")
->run();
$this->taskExec("$this->phpExec bin/console server:run localhost:8888")
->arg('--ansi')
->arg('--quiet')
->arg('--env=test')
->background()
->run();
$res = $this->taskExec("$this->phpExec vendor/bin/behat --verbose --tags '@javascript' -f pretty -f junit")
->arg('--colors')
->arg($features)
->run();
return $res->wasSuccessful();
}
public function testPhpunit()
{
$cmd = "$this->phpExec ./vendor/bin/phpunit";
if (getenv("NOCC") == 1) {
$cmd = sprintf('%s --no-coverage', $cmd);
}
$res = $this->taskExec($cmd)->run();
return $res->wasSuccessful();
}
public function testAll()
{
$this->testClean();
$res1 = $this->testBehat();
$res2 = $this->testPhpunit();
$res3 = $this->testBehatJavascript();
$this->testMergeCoverage();
return $res1 && $res2 && $res3;
}
}