From 82de7edc540a2b5700b537eb4b1509072cba2829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georg=20Gro=C3=9Fberger?= Date: Thu, 3 Dec 2015 17:01:08 +0100 Subject: [PATCH 1/3] Make the task resolution more flexible This allows to use namespace + classname combinations that integrate more beautifully into custom packages. --- Mage/Task/Factory.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php index 9384d4c..7236ad4 100644 --- a/Mage/Task/Factory.php +++ b/Mage/Task/Factory.php @@ -44,11 +44,22 @@ class Factory $instance = null; $taskName = ucwords(str_replace('-', ' ', $taskName)); $taskName = str_replace(' ', '', $taskName); + $taskName = str_replace('/', '\\', $taskName); - if (strpos($taskName, '/') === false) { - $className = 'Task\\' . $taskName; - } else { - $className = 'Mage\\Task\\BuiltIn\\' . str_replace(' ', '\\', ucwords(str_replace('/', ' ', $taskName))) . 'Task'; + $className = $taskName; + $patterns = [ + 'Task\\%s', + '%s\\Task', + 'Mage\\Task\\BuiltIn\\%s\\Task', + '%s', + ]; + + foreach ($patterns as $classNamePattern) { + $className = sprintf($classNamePattern, $taskName); + + if (class_exists($className)) { + break; + } } if (!class_exists($className)) { From 4a7dfa64fbb10876b0b5e4b94d4d96b01c3bfb09 Mon Sep 17 00:00:00 2001 From: Georg Grossberger Date: Sun, 6 Dec 2015 15:20:00 +0100 Subject: [PATCH 2/3] Use traditional array syntax for PHP 5.3 compatibility --- Mage/Task/Factory.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php index 7236ad4..1ba1d3a 100644 --- a/Mage/Task/Factory.php +++ b/Mage/Task/Factory.php @@ -47,12 +47,12 @@ class Factory $taskName = str_replace('/', '\\', $taskName); $className = $taskName; - $patterns = [ + $patterns = array( 'Task\\%s', '%s\\Task', 'Mage\\Task\\BuiltIn\\%s\\Task', '%s', - ]; + ); foreach ($patterns as $classNamePattern) { $className = sprintf($classNamePattern, $taskName); From 7db28f946dd628752c24efa7a7bccaf5ab4d02c6 Mon Sep 17 00:00:00 2001 From: Georg Grossberger Date: Sun, 6 Dec 2015 15:36:49 +0100 Subject: [PATCH 3/3] Fix wrong task resolution for built in tassk Also adds some tests for this --- Mage/Task/Factory.php | 6 +++--- tests/MageTest/Task/FactoryTest.php | 33 +++++++++++++++++++---------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php index 1ba1d3a..8892d5c 100644 --- a/Mage/Task/Factory.php +++ b/Mage/Task/Factory.php @@ -44,19 +44,19 @@ class Factory $instance = null; $taskName = ucwords(str_replace('-', ' ', $taskName)); $taskName = str_replace(' ', '', $taskName); - $taskName = str_replace('/', '\\', $taskName); + $taskName = ucwords(str_replace('/', ' ', $taskName)); + $taskName = str_replace(' ', '\\', $taskName); $className = $taskName; $patterns = array( 'Task\\%s', '%s\\Task', - 'Mage\\Task\\BuiltIn\\%s\\Task', + 'Mage\\Task\\BuiltIn\\%sTask', '%s', ); foreach ($patterns as $classNamePattern) { $className = sprintf($classNamePattern, $taskName); - if (class_exists($className)) { break; } diff --git a/tests/MageTest/Task/FactoryTest.php b/tests/MageTest/Task/FactoryTest.php index 2dfb56b..ed4cda1 100644 --- a/tests/MageTest/Task/FactoryTest.php +++ b/tests/MageTest/Task/FactoryTest.php @@ -50,19 +50,30 @@ class FactoryTest extends PHPUnit_Framework_TestCase */ public function testGetCustomTask() { - $this->getMockBuilder('Mage\\Task\\AbstractTask') - ->setConstructorArgs(array($this->config)) - ->setMockClassName('MyTask') - ->getMock(); + $tasks = array( + 'Task\\MyFirstTask' => 'my-first-task', + 'MySecond\\Task' => 'my-second', + 'Mage\\Task\\BuiltIn\\CustomThirdTask' => 'custom-third', + 'Mage\\Task\\BuiltIn\\Custom\\FourthTask' => 'custom/fourth', + 'My\\Fifth\\TaskClass' => 'my/fifth/task-class', + ); - /* - * current workaround - * @link https://github.com/sebastianbergmann/phpunit-mock-objects/issues/134 - */ - class_alias('MyTask', 'Task\\MyTask'); + foreach ($tasks as $taskClass => $taskName) { + $alias = uniqid('DummyTask'); + $this->getMockBuilder('Mage\\Task\\AbstractTask') + ->setConstructorArgs(array($this->config)) + ->setMockClassName($alias) + ->getMock(); - $task = Factory::get('my-task', $this->config); - $this->assertInstanceOf('Task\\MyTask', $task); + /* + * current workaround + * @link https://github.com/sebastianbergmann/phpunit-mock-objects/issues/134 + */ + class_alias($alias, $taskClass); + + $task = Factory::get($taskName, $this->config); + $this->assertInstanceOf($taskClass, $task); + } } /**