From 73c85837448e20b912ab2c4d27cd2affda9eedfd Mon Sep 17 00:00:00 2001 From: "J. King" Date: Sun, 17 Dec 2017 10:27:34 -0500 Subject: [PATCH] Remove reliance on xdebug; fixes #113 Code coverage information is now gathered via phpdbg (a separate executable) by if available rather than xdebug, as the latter is hard to turn on and off. A "test:quick" task has also been added to Robo, which excludes 31 tests which together account for almost two thirds of the test run time. This should pave the way for testing to be added as a commit hook for Git. --- RoboFile.php | 28 +++++++++++++++++++++++++++- lib/Misc/ValueInfo.php | 6 +++--- tests/bootstrap.php | 2 +- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/RoboFile.php b/RoboFile.php index 119c23f3..ae515db7 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -11,18 +11,44 @@ class RoboFile extends \Robo\Tasks { const BASE = __DIR__.\DIRECTORY_SEPARATOR; const BASE_TEST = self::BASE."tests".\DIRECTORY_SEPARATOR; + /** Runs the full test suite */ public function test(array $args): Result { // start the built-in PHP server, which is required for some of the tests $this->taskServer(8000)->host("localhost")->dir(self::BASE_TEST."docroot")->rawArg("-n")->arg(self::BASE_TEST."server.php")->background()->run(); // run tests - return $this->taskPHPUnit()->configFile(self::BASE_TEST."phpunit.xml")->args($args)->run(); + $execpath = realpath(self::BASE."vendor-bin/phpunit/vendor/phpunit/phpunit/phpunit"); + $confpath = realpath(self::BASE_TEST."phpunit.xml"); + return $this->taskExec("php")->arg($execpath)->option("-c", $confpath)->args($args)->run(); + } + + /** Runs a quick subset of the test suite */ + public function testQuick(array $args): Result { + return $this->test(array_merge(["--exclude-group","slow"], $args)); } public function coverage(array $args): Result { + // start the built-in PHP server, which is required for some of the tests + $this->taskServer(8000)->host("localhost")->dir(self::BASE_TEST."docroot")->rawArg("-n")->arg(self::BASE_TEST."server.php")->background()->run(); + // run tests with code coverage reporting enabled + $exec = $this->findCoverageEngine(); + $execpath = realpath(self::BASE."vendor-bin/phpunit/vendor/phpunit/phpunit/phpunit"); + $confpath = realpath(self::BASE_TEST."phpunit.xml"); + return $this->taskExec($exec)->arg($execpath)->option("-c", $confpath)->option("--coverage-html", self::BASE_TEST."coverage")->args($args)->run(); // run the test suite with code coverage reporting enabled return $this->test(array_merge(["--coverage-html",self::BASE_TEST."coverage"], $args)); } + protected function findCoverageEngine(): string { + $null = null; + $code = 0; + exec("phpdbg --version", $null, $code); + if (!$code) { + return "phpdbg -qrr"; + } else { + return "php"; + } + } + public function package(array $args): Result { // establish which commit to package $version = $args ? $args[0] : $this->askDefault("Commit to package:", "head"); diff --git a/lib/Misc/ValueInfo.php b/lib/Misc/ValueInfo.php index f4d765bb..a025bb56 100644 --- a/lib/Misc/ValueInfo.php +++ b/lib/Misc/ValueInfo.php @@ -103,7 +103,7 @@ class ValueInfo { } else { return 0; } - break; + break; // @codeCoverageIgnore case self::T_FLOAT: if (is_float($value)) { return $value; @@ -161,7 +161,7 @@ class ValueInfo { } else { return (string) $value; } - break; + break; // @codeCoverageIgnore case self::T_DATE: if ($value instanceof \DateTimeImmutable) { return $value->setTimezone(new \DateTimeZone("UTC")); @@ -239,7 +239,7 @@ class ValueInfo { return [$value]; } } - break; + break; // @codeCoverageIgnore default: throw new ExceptionType("typeUnknown", $type); // @codeCoverageIgnore } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 7a4a0207..628bd3d8 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -8,5 +8,5 @@ namespace JKingWeb\Arsse; const NS_BASE = __NAMESPACE__."\\"; define(NS_BASE."BASE", dirname(__DIR__).DIRECTORY_SEPARATOR); - +ini_set("memory_limit", "-1"); require_once BASE."vendor".DIRECTORY_SEPARATOR."autoload.php";