-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathHackUnit.php
More file actions
89 lines (78 loc) · 2.08 KB
/
Copy pathHackUnit.php
File metadata and controls
89 lines (78 loc) · 2.08 KB
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
<?hh // strict
namespace HackPack\HackUnit;
final class HackUnit {
private bool $failures = false;
private Report\SummaryBuilder $summaryBuilder;
public function __construct(
private Traversable<Report\Format> $reportFormatters,
private Report\Status $status,
private Test\SuiteBuilder $suiteBuilder,
private Test\Loader $loader,
private Test\Runner $runner,
) {
$this->summaryBuilder = new Report\SummaryBuilder();
}
public function run(): void {
$this->loader->onBuildFailure(
($event) ==> {
$this->failures = true;
$this->status->handleBuildFailure($event);
},
);
$this->suiteBuilder->onMalformedSuite(
inst_meth($this->summaryBuilder, 'handleMalformedSuite'),
);
$this->runner->onRunStart(
() ==> {
$this->status->handleRunStart();
$this->summaryBuilder->startTiming();
},
);
$this->runner->onFailure(
($e) ==> {
// Allow us to set the exit code
$this->failures = true;
$this->status->handleFailure($e);
$this->summaryBuilder->handleFailure($e);
},
);
$this->runner->onSkip(
($e) ==> {
$this->status->handleSkip($e);
$this->summaryBuilder->handleSkip($e);
},
);
$this->runner->onSuccess(
($e) ==> {
$this->summaryBuilder->handleSuccess($e);
},
);
$this->runner->onPass(
($e) ==> {
$this->status->handlePass($e);
$this->summaryBuilder->handlePass($e);
},
);
$this->runner->onUncaughtException(
($exception) ==> {
$this->summaryBuilder->handleUntestedException($exception);
},
);
$this->runner->onRunEnd(
() ==> {
$this->summaryBuilder->stopTiming();
$summary = $this->summaryBuilder->getSummary();
foreach ($this->reportFormatters as $formatter) {
$formatter->writeReport($summary);
}
},
);
// LET'S DO THIS!
$this->runner->run($this->loader->testSuites());
// Exit codes FTW
if ($this->failures) {
exit(1);
}
exit(0);
}
}