1414use RobinIngelbrecht \PHPUnitCoverageTools \MinCoverage \MinCoverageRule ;
1515use RobinIngelbrecht \PHPUnitCoverageTools \MinCoverage \MinCoverageRules ;
1616use RobinIngelbrecht \PHPUnitCoverageTools \MinCoverage \ResultStatus ;
17+ use RobinIngelbrecht \PHPUnitCoverageTools \Timer \SystemTimer ;
18+ use RobinIngelbrecht \PHPUnitCoverageTools \Timer \Timer ;
1719use Symfony \Component \Console \Helper \FormatterHelper ;
1820
1921final class ApplicationFinishedSubscriber extends FormatterHelper implements FinishedSubscriber
@@ -24,11 +26,13 @@ public function __construct(
2426 private readonly bool $ cleanUpCloverXml ,
2527 private readonly Exitter $ exitter ,
2628 private readonly ConsoleOutput $ consoleOutput ,
29+ private readonly Timer $ timer ,
2730 ) {
2831 }
2932
3033 public function notify (Finished $ event ): void
3134 {
35+ $ this ->timer ->start ();
3236 /** @var string $reflectionFileName */
3337 $ reflectionFileName = (new \ReflectionClass (ClassLoader::class))->getFileName ();
3438 $ absolutePathToCloverXml = dirname ($ reflectionFileName , 3 ).'/ ' .$ this ->relativePathToCloverXml ;
@@ -48,15 +52,21 @@ public function notify(Finished $event): void
4852 if ($ this ->minCoverageRules ->hasTotalRule () && \XMLReader::ELEMENT == $ reader ->nodeType && 'metrics ' == $ reader ->name && 2 === $ reader ->depth ) {
4953 /** @var \SimpleXMLElement $node */
5054 $ node = simplexml_load_string ($ reader ->readOuterXml ());
51- $ metricTotal = CoverageMetric::fromCloverXmlNode ($ node , MinCoverageRule::TOTAL );
55+ $ metricTotal = CoverageMetric::fromCloverXmlNode (
56+ node: $ node ,
57+ forClass: MinCoverageRule::TOTAL
58+ );
5259 continue ;
5360 }
5461 if ($ this ->minCoverageRules ->hasOtherRulesThanTotalRule () && \XMLReader::ELEMENT == $ reader ->nodeType && 'class ' == $ reader ->name && 3 === $ reader ->depth ) {
5562 /** @var \SimpleXMLElement $node */
5663 $ node = simplexml_load_string ($ reader ->readInnerXml ());
5764 /** @var string $className */
5865 $ className = $ reader ->getAttribute ('name ' );
59- $ metrics [] = CoverageMetric::fromCloverXmlNode ($ node , $ className );
66+ $ metrics [] = CoverageMetric::fromCloverXmlNode (
67+ node: $ node ,
68+ forClass: $ className
69+ );
6070 }
6171 }
6272 $ reader ->close ();
@@ -74,7 +84,11 @@ public function notify(Finished $event): void
7484 metrics: $ metrics ,
7585 metricTotal: $ metricTotal ,
7686 );
77- $ this ->consoleOutput ->print ($ results );
87+
88+ $ this ->consoleOutput ->print (
89+ results: $ results ,
90+ duration: $ this ->timer ->stop ()
91+ );
7892
7993 $ needsExit = !empty (array_filter (
8094 $ results ,
@@ -134,7 +148,8 @@ public static function fromConfigurationAndParameters(
134148 minCoverageRules: $ rules ,
135149 cleanUpCloverXml: $ cleanUpCloverXml ,
136150 exitter: new Exitter (),
137- consoleOutput: new ConsoleOutput (new \Symfony \Component \Console \Output \ConsoleOutput ()),
151+ consoleOutput: ConsoleOutput::create (),
152+ timer: SystemTimer::create (),
138153 );
139154 }
140155}
0 commit comments