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

TestSuitesFinder::isAvailable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
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