From 9115a0701a5107a521fe1086a344b0e3c0240793 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 13 Jan 2017 12:42:53 +0100 Subject: [PATCH 1/4] Added new validator to make sure each place has unique translation names --- .../Compiler/ValidateWorkflowsPass.php | 2 + .../UniqueTransitionNameValidatorTest.php | 51 +++++++++++++++++++ .../UniqueTransitionNameValidator.php | 36 +++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php create mode 100644 src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php index a2f695992926d..a86ae757bdc10 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php @@ -16,6 +16,7 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\Workflow\Validator\DefinitionValidatorInterface; use Symfony\Component\Workflow\Validator\StateMachineValidator; +use Symfony\Component\Workflow\Validator\UniqueTransitionNameValidator; use Symfony\Component\Workflow\Validator\WorkflowValidator; /** @@ -40,6 +41,7 @@ public function process(ContainerBuilder $container) } $this->createValidator($tag)->validate($definition, $tag['name']); + (new UniqueTransitionNameValidator())->validate($definition, $tag['name']); } } } diff --git a/src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php b/src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php new file mode 100644 index 0000000000000..4450921a9663d --- /dev/null +++ b/src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php @@ -0,0 +1,51 @@ +validate($definition, 'foo'); + } + + public function testSameTransitionNameButNotSamePlace() + { + $places = range('a', 'd'); + + $transitions = array(); + $transitions[] = new Transition('t1', 'a', 'b'); + $transitions[] = new Transition('t1', 'b', 'c'); + $transitions[] = new Transition('t1', 'd', 'c'); + + $definition = new Definition($places, $transitions); + + (new UniqueTransitionNameValidator())->validate($definition, 'foo'); + } + + public function testValidWorkflow() + { + $definition = $this->createSimpleWorkflowDefinition(); + + (new UniqueTransitionNameValidator())->validate($definition, 'foo'); + } +} diff --git a/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php b/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php new file mode 100644 index 0000000000000..aa5007b30dca3 --- /dev/null +++ b/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Workflow\Validator; + +use Symfony\Component\Workflow\Definition; +use Symfony\Component\Workflow\Exception\InvalidDefinitionException; + +/** + * Make sure all transitions for one place has unique name. + * + * @author Tobias Nyholm + */ +class UniqueTransitionNameValidator implements DefinitionValidatorInterface +{ + public function validate(Definition $definition, $name) + { + $places = array_fill_keys($definition->getPlaces(), []); + foreach ($definition->getTransitions() as $transition) { + foreach ($transition->getFroms() as $from) { + if (in_array($transition->getName(), $places[$from])) { + throw new InvalidDefinitionException(sprintf('All transitions for a place must have an unique name. Multiple transitions named "%s" where found for place "%s" in workflow "%s".', $transition->getName(), $from, $name)); + } + $places[$from][] = $transition->getName(); + } + } + } +} From 65d4c5e55172eec418bb9699089c8a33f27f392c Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 13 Jan 2017 12:54:24 +0100 Subject: [PATCH 2/4] Stylefix --- .../Workflow/Validator/UniqueTransitionNameValidator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php b/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php index aa5007b30dca3..32b18a42d31eb 100644 --- a/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php +++ b/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php @@ -23,7 +23,7 @@ class UniqueTransitionNameValidator implements DefinitionValidatorInterface { public function validate(Definition $definition, $name) { - $places = array_fill_keys($definition->getPlaces(), []); + $places = array_fill_keys($definition->getPlaces(), array()); foreach ($definition->getTransitions() as $transition) { foreach ($transition->getFroms() as $from) { if (in_array($transition->getName(), $places[$from])) { From 88a22c3a7657713bfbdd769470e62b873b4dc3b5 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 16 Jan 2017 09:01:32 +0100 Subject: [PATCH 3/4] Moved unique name check to the WorkflowValidator --- .../Compiler/ValidateWorkflowsPass.php | 2 - .../UniqueTransitionNameValidatorTest.php | 51 ------------------- .../Tests/Validator/WorkflowValidatorTest.php | 34 +++++++++++++ .../UniqueTransitionNameValidator.php | 36 ------------- .../Workflow/Validator/WorkflowValidator.php | 11 ++++ 5 files changed, 45 insertions(+), 89 deletions(-) delete mode 100644 src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php delete mode 100644 src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php index a86ae757bdc10..a2f695992926d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ValidateWorkflowsPass.php @@ -16,7 +16,6 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\Workflow\Validator\DefinitionValidatorInterface; use Symfony\Component\Workflow\Validator\StateMachineValidator; -use Symfony\Component\Workflow\Validator\UniqueTransitionNameValidator; use Symfony\Component\Workflow\Validator\WorkflowValidator; /** @@ -41,7 +40,6 @@ public function process(ContainerBuilder $container) } $this->createValidator($tag)->validate($definition, $tag['name']); - (new UniqueTransitionNameValidator())->validate($definition, $tag['name']); } } } diff --git a/src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php b/src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php deleted file mode 100644 index 4450921a9663d..0000000000000 --- a/src/Symfony/Component/Workflow/Tests/Validator/UniqueTransitionNameValidatorTest.php +++ /dev/null @@ -1,51 +0,0 @@ -validate($definition, 'foo'); - } - - public function testSameTransitionNameButNotSamePlace() - { - $places = range('a', 'd'); - - $transitions = array(); - $transitions[] = new Transition('t1', 'a', 'b'); - $transitions[] = new Transition('t1', 'b', 'c'); - $transitions[] = new Transition('t1', 'd', 'c'); - - $definition = new Definition($places, $transitions); - - (new UniqueTransitionNameValidator())->validate($definition, 'foo'); - } - - public function testValidWorkflow() - { - $definition = $this->createSimpleWorkflowDefinition(); - - (new UniqueTransitionNameValidator())->validate($definition, 'foo'); - } -} diff --git a/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php b/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php index 30d2551fa1b0f..bffb435225024 100644 --- a/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php +++ b/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php @@ -2,7 +2,9 @@ namespace Symfony\Component\Workflow\Tests\Validator; +use Symfony\Component\Workflow\Definition; use Symfony\Component\Workflow\Tests\WorkflowBuilderTrait; +use Symfony\Component\Workflow\Transition; use Symfony\Component\Workflow\Validator\WorkflowValidator; class WorkflowValidatorTest extends \PHPUnit_Framework_TestCase @@ -26,4 +28,36 @@ public function testSinglePlaceWorkflowValidatorAndSimpleWorkflow() (new WorkflowValidator(true))->validate($definition, 'foo'); } + + /** + * @expectedException \Symfony\Component\Workflow\Exception\InvalidDefinitionException + * expectedExceptionMessage All transitions for a place must have an unique name. Multiple transitions named "t1" where found for place "a" in workflow "foo". + */ + public function testWorkflowWithInvalidNames() + { + $places = range('a', 'c'); + + $transitions = array(); + $transitions[] = new Transition('t0', 'c', 'b'); + $transitions[] = new Transition('t1', 'a', 'b'); + $transitions[] = new Transition('t1', 'a', 'c'); + + $definition = new Definition($places, $transitions); + + (new WorkflowValidator())->validate($definition, 'foo'); + } + + public function testSameTransitionNameButNotSamePlace() + { + $places = range('a', 'd'); + + $transitions = array(); + $transitions[] = new Transition('t1', 'a', 'b'); + $transitions[] = new Transition('t1', 'b', 'c'); + $transitions[] = new Transition('t1', 'd', 'c'); + + $definition = new Definition($places, $transitions); + + (new WorkflowValidator())->validate($definition, 'foo'); + } } diff --git a/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php b/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php deleted file mode 100644 index 32b18a42d31eb..0000000000000 --- a/src/Symfony/Component/Workflow/Validator/UniqueTransitionNameValidator.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Workflow\Validator; - -use Symfony\Component\Workflow\Definition; -use Symfony\Component\Workflow\Exception\InvalidDefinitionException; - -/** - * Make sure all transitions for one place has unique name. - * - * @author Tobias Nyholm - */ -class UniqueTransitionNameValidator implements DefinitionValidatorInterface -{ - public function validate(Definition $definition, $name) - { - $places = array_fill_keys($definition->getPlaces(), array()); - foreach ($definition->getTransitions() as $transition) { - foreach ($transition->getFroms() as $from) { - if (in_array($transition->getName(), $places[$from])) { - throw new InvalidDefinitionException(sprintf('All transitions for a place must have an unique name. Multiple transitions named "%s" where found for place "%s" in workflow "%s".', $transition->getName(), $from, $name)); - } - $places[$from][] = $transition->getName(); - } - } - } -} diff --git a/src/Symfony/Component/Workflow/Validator/WorkflowValidator.php b/src/Symfony/Component/Workflow/Validator/WorkflowValidator.php index cd31e1fb3e58b..27bd06f0d651b 100644 --- a/src/Symfony/Component/Workflow/Validator/WorkflowValidator.php +++ b/src/Symfony/Component/Workflow/Validator/WorkflowValidator.php @@ -31,6 +31,17 @@ public function __construct($singlePlace = false) public function validate(Definition $definition, $name) { + // Make sure all transitions for one place has unique name. + $places = array_fill_keys($definition->getPlaces(), array()); + foreach ($definition->getTransitions() as $transition) { + foreach ($transition->getFroms() as $from) { + if (in_array($transition->getName(), $places[$from])) { + throw new InvalidDefinitionException(sprintf('All transitions for a place must have an unique name. Multiple transitions named "%s" where found for place "%s" in workflow "%s".', $transition->getName(), $from, $name)); + } + $places[$from][] = $transition->getName(); + } + } + if (!$this->singlePlace) { return; } From 3f539b325e752c94b42dacea30eba5167efd2aa0 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 16 Jan 2017 09:06:11 +0100 Subject: [PATCH 4/4] typo --- .../Workflow/Tests/Validator/WorkflowValidatorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php b/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php index bffb435225024..e75ebaf82e233 100644 --- a/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php +++ b/src/Symfony/Component/Workflow/Tests/Validator/WorkflowValidatorTest.php @@ -31,7 +31,7 @@ public function testSinglePlaceWorkflowValidatorAndSimpleWorkflow() /** * @expectedException \Symfony\Component\Workflow\Exception\InvalidDefinitionException - * expectedExceptionMessage All transitions for a place must have an unique name. Multiple transitions named "t1" where found for place "a" in workflow "foo". + * @expectedExceptionMessage All transitions for a place must have an unique name. Multiple transitions named "t1" where found for place "a" in workflow "foo". */ public function testWorkflowWithInvalidNames() { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy