From 660ca7e8a10214d19b08d90ab0f239dbcfafc39a Mon Sep 17 00:00:00 2001 From: David Grudl Date: Thu, 7 Feb 2019 21:06:36 +0100 Subject: [PATCH] TestCaseRunner WIP --- demo/TestFour.php | 19 +++++++ demo/TestOne.php | 13 +++++ demo/TestThree.php | 13 +++++ demo/TestTwo.php | 13 +++++ demo/runner.phpt | 14 ++++++ src/Framework/TestCaseRunner.php | 86 ++++++++++++++++++++++++++++++++ src/bootstrap.php | 1 + src/tester.php | 1 + 8 files changed, 160 insertions(+) create mode 100644 demo/TestFour.php create mode 100644 demo/TestOne.php create mode 100644 demo/TestThree.php create mode 100644 demo/TestTwo.php create mode 100644 demo/runner.phpt create mode 100644 src/Framework/TestCaseRunner.php diff --git a/demo/TestFour.php b/demo/TestFour.php new file mode 100644 index 00000000..ef695009 --- /dev/null +++ b/demo/TestFour.php @@ -0,0 +1,19 @@ +findTests(__DIR__ . '/Test*.php') + ->run(); diff --git a/src/Framework/TestCaseRunner.php b/src/Framework/TestCaseRunner.php new file mode 100644 index 00000000..d223b293 --- /dev/null +++ b/src/Framework/TestCaseRunner.php @@ -0,0 +1,86 @@ +isSubclassOf(TestCase::class) && isset($files[$rc->getFileName()])) { + $this->classes[] = $class; + } + } + return $this; + } + + + public function run(): void + { + if ($this->runFromCli()) { + return; + } + + foreach ($this->classes as $class) { + $test = $this->createInstance($class); + $test->run(); + } + } + + + private function runFromCli(): bool + { + $args = preg_filter('#--method=([\w:-]+)$#Ai', '$1', $_SERVER['argv'] ?? []); + $arg = reset($args); + if (!$arg) { + return false; + + } elseif ($arg === self::LIST_METHODS) { + Environment::$checkAssertions = false; + $methods = []; + foreach ($this->classes as $class) { + foreach ($class::findMethods() as $method) { + $methods[] = $class . '::' . $method; + } + } + header('Content-Type: text/plain'); + echo '[' . implode(',', $methods) . ']'; + + } else { + [$class, $method] = explode('::', $arg); + $test = $this->createInstance($class); + $test->runTest($method); + } + return true; + } + + + protected function createInstance(string $class): TestCase + { + // TOO: can be altered via setFactory(callable) + return new $class; + } +} diff --git a/src/bootstrap.php b/src/bootstrap.php index 7c6b9a90..1a059117 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -14,6 +14,7 @@ require __DIR__ . '/Framework/Dumper.php'; require __DIR__ . '/Framework/FileMock.php'; require __DIR__ . '/Framework/TestCase.php'; +require __DIR__ . '/Framework/TestCaseRunner.php'; require __DIR__ . '/Framework/DomQuery.php'; require __DIR__ . '/Framework/FileMutator.php'; require __DIR__ . '/CodeCoverage/Collector.php'; diff --git a/src/tester.php b/src/tester.php index efa15a34..0b369140 100644 --- a/src/tester.php +++ b/src/tester.php @@ -26,6 +26,7 @@ require __DIR__ . '/Framework/Dumper.php'; require __DIR__ . '/Framework/DataProvider.php'; require __DIR__ . '/Framework/TestCase.php'; +require __DIR__ . '/Framework/TestCaseRunner.php'; require __DIR__ . '/CodeCoverage/PhpParser.php'; require __DIR__ . '/CodeCoverage/Generators/AbstractGenerator.php'; require __DIR__ . '/CodeCoverage/Generators/HtmlGenerator.php';