Completed
Push — code-coverage ( 571de7...0d23d4 )
by Jakub
03:03 queued 01:26
created

Collector   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 16
c 1
b 0
f 1
dl 0
loc 32
rs 10
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A start() 0 4 1
A registerEngine() 0 2 1
A save() 0 3 2
A selectEngine() 0 11 4
1
<?php
2
declare(strict_types=1);
3
4
namespace MyTester\CodeCoverage;
5
6
use MyTester\ICodeCoverageEngine;
7
8
final class Collector {
9
  /** @var ICodeCoverageEngine[] */
10
  private array $engines;
11
  private ?ICodeCoverageEngine $currentEngine = null;
12
13
  public function registerEngine(ICodeCoverageEngine $engine): void {
14
    $this->engines[] = $engine;
15
  }
16
17
  public function start(): void {
18
    $engine = $this->selectEngine();
19
    $engine->start();
20
    register_shutdown_function([$this, "save"]);
21
  }
22
23
  public function save(): void {
24
    if($this->currentEngine !== null) {
25
      $this->currentEngine->collect();
26
    }
27
  }
28
29
  private function selectEngine(): ICodeCoverageEngine {
30
    if($this->currentEngine !== null) {
31
      return $this->currentEngine;
32
    }
33
    foreach($this->engines as $engine) {
34
      if($engine->isAvailable()) {
35
        $this->currentEngine = $engine;
36
        return $engine;
37
      }
38
    }
39
    throw new \RuntimeException("No code coverage engine is available.");
40
  }
41
}
42
?>