1
1
<?php declare(strict_types=1);
2
+ use PHPUnit\Event;
2
3
use PHPUnit\Event\Facade;
4
+ use PHPUnit\Framework\TestSuite;
3
5
use PHPUnit\Runner\CodeCoverage;
4
6
use PHPUnit\Runner\ErrorHandler;
7
+ use PHPUnit\Runner\TestSuiteLoader;
5
8
use PHPUnit\TextUI\Configuration\Registry as ConfigurationRegistry;
6
9
use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry;
7
10
use PHPUnit\TextUI\Configuration\PhpHandler;
@@ -31,7 +34,7 @@ if ($composerAutoload) {
31
34
require $phar ;
32
35
}
33
36
34
- function __phpunit_run_isolated_test ()
37
+ function __phpunit_run_isolated_class ()
35
38
{
36
39
$dispatcher = Facade::instance()-> initForIsolation (
37
40
PHPUnit\Event\Telemetry\HRTime::fromSecondsAndNanoseconds(
@@ -69,52 +72,67 @@ function __phpunit_run_isolated_test()
69
72
70
73
ErrorHandler::instance()->useDeprecationTriggers($deprecationTriggers);
71
74
72
- $test = new { className } (' { name } ');
75
+ ini_set('xdebug.scream', '0 ');
73
76
74
- $test->setData('{ dataName} ', unserialize('{ data} '));
75
- $test->setDependencyInput(unserialize('{ dependencyInput} '));
76
- $test->setInIsolation(true);
77
+ try {
78
+ $testClass = (new TestSuiteLoader)-> load (' {filename}' );
79
+ } catch (Exception $e) {
80
+ print $e -> getMessage () . PHP_EOL;
81
+ exit(1);
82
+ }
77
83
78
- ob_end_clean();
84
+ $output = '';
85
+ $results = [];
79
86
80
- $test->run();
87
+ $suite = TestSuite::fromClassReflector($testClass);
88
+ $suite->setIsInSeparatedProcess(false);
81
89
82
- $output = '' ;
90
+ $testSuiteValueObjectForEvents = Event\TestSuite\TestSuiteBuilder::from($suite) ;
83
91
84
- if (!$test->expectsOutput( )) {
85
- $ output = $ test -> output () ;
92
+ if (!$suite->invokeMethodsBeforeFirstTest(Facade::emitter(), $testSuiteValueObjectForEvents )) {
93
+ return ;
86
94
}
87
95
88
- ini_set('xdebug.scream', '0');
96
+ foreach($suite->tests() as $test) {
97
+ $test -> setRunClassInSeparateProcess (false );
98
+ $test -> run ();
99
+
100
+ $testOutput = ' ' ;
89
101
90
- // Not every STDOUT target stream is rewindable
91
- @rewind(STDOUT);
102
+ if (! $test -> expectsOutput ()) {
103
+ $testOutput = $test -> output ();
104
+ }
92
105
93
- if ($stdout = @stream_get_contents(STDOUT)) {
94
- $output = $stdout . $output ;
95
- $streamMetaData = stream_get_meta_data(STDOUT);
106
+ // Not every STDOUT target stream is rewindable
107
+ @rewind(STDOUT);
96
108
97
- if (! empty($streamMetaData [' stream_type' ]) && ' STDIO' === $streamMetaData [' stream_type' ]) {
98
- @ftruncate(STDOUT, 0);
99
- @rewind(STDOUT);
109
+ if ($stdout = @stream_get_contents(STDOUT)) {
110
+ $testOutput = $stdout . $testOutput ;
111
+ $streamMetaData = stream_get_meta_data(STDOUT);
112
+
113
+ if (! empty($streamMetaData [' stream_type' ]) && ' STDIO' === $streamMetaData [' stream_type' ]) {
114
+ @ftruncate(STDOUT, 0);
115
+ @rewind(STDOUT);
116
+ }
100
117
}
118
+
119
+ $results[] = (object)[
120
+ 'testResult' => $test->result(),
121
+ 'codeCoverage' => { collectCodeCoverageInformation} ? CodeCoverage::instance()->codeCoverage() : null,
122
+ 'numAssertions' => $test->numberOfAssertionsPerformed(),
123
+ 'output' => $testOutput,
124
+ 'events' => $dispatcher->flush(),
125
+ 'passedTests' => PassedTests::instance()
126
+ ];
127
+
128
+ $output .= $testOutput;
101
129
}
102
130
131
+ $suite->invokeMethodsAfterLastTest(Facade::emitter());
132
+
103
133
Facade::emitter()->testRunnerFinishedChildProcess($output, '');
104
134
105
- file_put_contents(
106
- '{ processResultFile} ',
107
- serialize(
108
- (object)[
109
- 'testResult' => $test->result(),
110
- 'codeCoverage' => { collectCodeCoverageInformation} ? CodeCoverage::instance()->codeCoverage() : null,
111
- 'numAssertions' => $test->numberOfAssertionsPerformed(),
112
- 'output' => $output,
113
- 'events' => $dispatcher->flush(),
114
- 'passedTests' => PassedTests::instance()
115
- ]
116
- )
117
- );
135
+ file_put_contents('{ processResultFile} ', serialize($results));
118
136
}
119
137
120
138
function __phpunit_error_handler($errno, $errstr, $errfile, $errline)
@@ -137,4 +155,4 @@ if ('{bootstrap}' !== '') {
137
155
require_once ' {bootstrap}' ;
138
156
}
139
157
140
- __phpunit_run_isolated_test ();
158
+ __phpunit_run_isolated_class ();
0 commit comments