Completed
Push — master ( 283965...5ee203 )
by Jakub
01:42
created

TestSuitsFinder::getSuits()   A

Complexity

Conditions 6
Paths 8

Size

Total Lines 24
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 6
eloc 19
nc 8
nop 1
dl 0
loc 24
rs 9.0111
c 1
b 0
f 1
1
<?php
2
declare(strict_types=1);
3
4
namespace MyTester\Bridges\NetteRobotLoader;
5
6
use MyTester\ITestsSuitsFinder;
7
use MyTester\TestCase;
8
use Nette\Loaders\RobotLoader;
9
use Nette\Utils\FileSystem;
10
use ReflectionClass;
11
12
/**
13
 * @author Jakub Konečný
14
 * @internal
15
 */
16
final class TestSuitsFinder implements ITestsSuitsFinder {
17
  public function getSuits(string $folder): array {
18
    $suits = [];
19
    $robot = new RobotLoader();
20
    $tempDir = "$folder/temp/cache/Robot.Loader";
21
    if(is_dir("$folder/_temp")) {
22
      $tempDir = "$folder/_temp/cache/Robot.Loader";
23
    }
24
    FileSystem::createDir($tempDir);
25
    $robot->setTempDirectory($tempDir);
26
    $robot->addDirectory($folder);
27
    $robot->acceptFiles = ["*Test.php", "*.phpt", ];
28
    $robot->rebuild();
29
    $robot->register();
30
    $classes = $robot->getIndexedClasses();
31
    foreach($classes as $class => $file) {
32
      if(!class_exists($class)) {
33
        continue;
34
      }
35
      $rc = new ReflectionClass($class);
36
      if(!$rc->isAbstract() && $rc->isSubclassOf(TestCase::class)) {
37
        $suits[] = [$rc->getName(), $file];
38
      }
39
    }
40
    return $suits;
41
  }
42
}
43
?>