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