Completed
Push — master ( d069a6...fdd0b3 )
by Jakub
01:41
created

TestSuitesFinder   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Test Coverage

Coverage 90.91%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 7
eloc 21
c 2
b 0
f 0
dl 0
loc 32
ccs 20
cts 22
cp 0.9091
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A isAvailable() 0 3 1
A getSuites() 0 25 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace MyTester\Bridges\NetteRobotLoader;
6
7
use MyTester\ITestsSuitesFinder;
8
use MyTester\TestCase;
9
use Nette\Loaders\RobotLoader;
10
use Nette\Utils\FileSystem;
11
use ReflectionClass;
12
13
/**
14
 * @author Jakub Konečný
15
 * @internal
16
 */
17
final class TestSuitesFinder implements ITestsSuitesFinder
18
{
19 1
    public function getSuites(string $folder): array
20
    {
21 1
        if (!$this->isAvailable()) {
22
            return [];
23
        }
24 1
        $suites = [];
25 1
        $robot = new RobotLoader();
26 1
        $tempDir = "$folder/temp/cache/Robot.Loader";
27 1
        FileSystem::createDir($tempDir);
28 1
        $robot->setTempDirectory($tempDir);
29 1
        $robot->addDirectory($folder);
30 1
        $robot->acceptFiles = ["*Test.php", ];
31 1
        $robot->rebuild();
32 1
        $robot->register();
33 1
        $classes = $robot->getIndexedClasses();
34 1
        foreach ($classes as $class => $file) {
35 1
            if (!class_exists($class)) {
36
                continue;
37
            }
38 1
            $rc = new ReflectionClass($class);
39 1
            if (!$rc->isAbstract() && $rc->isSubclassOf(TestCase::class)) {
40 1
                $suites[] = $rc->getName();
41
            }
42
        }
43 1
        return $suites;
44
    }
45
46 1
    private function isAvailable(): bool
47
    {
48 1
        return class_exists(RobotLoader::class);
49
    }
50
}
51