Completed
Push — master ( 1f7fc9...50ad35 )
by Jakub
01:38
created

TestSuitesFinder   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 25
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
rs 10
c 0
b 0
f 0
eloc 20
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
A getSuites() 0 24 6
1
<?php
2
declare(strict_types=1);
3
4
namespace MyTester\Bridges\NetteRobotLoader;
5
6
use MyTester\ITestsSuitesFinder;
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 TestSuitesFinder implements ITestsSuitesFinder {
17
  public function getSuites(string $folder): array {
18
    $suites = [];
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
        $suites[] = [$rc->getName(), $file];
38
      }
39
    }
40
    return $suites;
41
  }
42
}
43
?>