Completed
Push — master ( 88991f...6ec29e )
by Jakub
01:26
created

Collector::start()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 3
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 4
rs 10
1
<?php
2
declare(strict_types=1);
3
4
namespace MyTester\CodeCoverage;
5
6
use MyTester\ICodeCoverageEngine;
7
use RuntimeException;
8
9
/**
10
 * Code coverage collector
11
 *
12
 * @author Jakub Konečný
13
 * @internal
14
 */
15
final class Collector {
16
  /** @var ICodeCoverageEngine[] */
17
  private array $engines;
18
  private ?ICodeCoverageEngine $currentEngine = null;
19
20
  public function registerEngine(ICodeCoverageEngine $engine): void {
21
    $this->engines[] = $engine;
22
  }
23
24
  public function start(): void {
25
    $engine = $this->selectEngine();
26
    $engine->start();
27
    register_shutdown_function([$this, "save"]);
28
  }
29
30
  public function save(): void {
31
    if($this->currentEngine !== null) {
32
      $this->currentEngine->collect();
33
    }
34
  }
35
36
  private function selectEngine(): ICodeCoverageEngine {
37
    if($this->currentEngine !== null) {
38
      return $this->currentEngine;
39
    }
40
    foreach($this->engines as $engine) {
41
      if($engine->isAvailable()) {
42
        $this->currentEngine = $engine;
43
        return $engine;
44
      }
45
    }
46
    throw new RuntimeException("No code coverage engine is available.");
47
  }
48
}
49
?>