From df9eb77e2b084b7646abcd758b43dd3139a5d462 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Tue, 25 Aug 2015 10:14:15 +0100 Subject: [PATCH] Allow abstract BuildTask subclasses (closes #4538) --- dev/TaskRunner.php | 18 +++++++++++- tests/dev/TaskRunnerTest.php | 55 ++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/dev/TaskRunnerTest.php diff --git a/dev/TaskRunner.php b/dev/TaskRunner.php index 6e1b9845a..0c7bba1dd 100644 --- a/dev/TaskRunner.php +++ b/dev/TaskRunner.php @@ -100,7 +100,8 @@ class TaskRunner extends Controller { array_shift($taskClasses); if($taskClasses) foreach($taskClasses as $class) { - if(!singleton($class)->isEnabled()) continue; + if (!$this->taskEnabled($class)) continue; + $desc = (Director::is_cli()) ? Convert::html2raw(singleton($class)->getDescription()) : singleton($class)->getDescription(); @@ -116,6 +117,21 @@ class TaskRunner extends Controller { return $availableTasks; } + /** + * @param string $class + * @return boolean + */ + protected function taskEnabled($class) { + $reflectionClass = new ReflectionClass($class); + if ($reflectionClass->isAbstract()) { + return false; + } else if (!singleton($class)->isEnabled()) { + return false; + } + + return true; + } + } diff --git a/tests/dev/TaskRunnerTest.php b/tests/dev/TaskRunnerTest.php new file mode 100644 index 000000000..4e4fd3b44 --- /dev/null +++ b/tests/dev/TaskRunnerTest.php @@ -0,0 +1,55 @@ +setAccessible(true); + + $this->assertTrue($method->invoke($runner, 'TaskRunnerTest_EnabledTask'), + 'Enabled task incorrectly marked as disabled'); + $this->assertFalse($method->invoke($runner, 'TaskRunnerTest_DisabledTask'), + 'Disabled task incorrectly marked as enabled'); + $this->assertFalse($method->invoke($runner, 'TaskRunnerTest_AbstractTask'), + 'Disabled task incorrectly marked as enabled'); + $this->assertTrue($method->invoke($runner, 'TaskRunnerTest_ChildOfAbstractTask'), + 'Enabled task incorrectly marked as disabled'); + } + +} + +class TaskRunnerTest_EnabledTask extends BuildTask { + protected $enabled = true; + + public function run($request) { + // NOOP + } +} + +class TaskRunnerTest_DisabledTask extends BuildTask { + protected $enabled = false; + + public function run($request) { + // NOOP + } +} + +abstract class TaskRunnerTest_AbstractTask extends BuildTask { + protected $enabled = true; + + public function run($request) { + // NOOP + } +} + +class TaskRunnerTest_ChildOfAbstractTask extends TaskRunnerTest_AbstractTask { + protected $enabled = true; + + public function run($request) { + // NOOP + } +}