From ea4ae7401191ce896b833ddf80dad35790f5b1e5 Mon Sep 17 00:00:00 2001 From: Eric GELOEN Date: Wed, 6 Nov 2013 01:36:01 +0100 Subject: [PATCH 1/3] [Form][DateTime] Propagate invalid_message & invalid_message parameters to date & time sub widgets --- .../Component/Form/Extension/Core/Type/DateTimeType.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php index a612b6fc9c..e8c4e748de 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php @@ -117,6 +117,8 @@ class DateTimeType extends AbstractType 'empty_value', 'required', 'translation_domain', + 'invalid_message', + 'invalid_message_parameters', ))); $timeOptions = array_intersect_key($options, array_flip(array( @@ -128,6 +130,8 @@ class DateTimeType extends AbstractType 'empty_value', 'required', 'translation_domain', + 'invalid_message', + 'invalid_message_parameters', ))); if (null !== $options['date_widget']) { From 10f9135f636213bc1f0e532c1fab1d95c5843b24 Mon Sep 17 00:00:00 2001 From: Alex Bakhturin Date: Wed, 24 Sep 2014 16:34:46 -0700 Subject: [PATCH 2/3] [Finder] [Iterator] Make the tests less fragile --- .../Tests/Iterator/IteratorTestCase.php | 25 ++++++ .../Tests/Iterator/RealIteratorTestCase.php | 6 +- .../Tests/Iterator/SortableIteratorTest.php | 82 +++++++++++-------- 3 files changed, 78 insertions(+), 35 deletions(-) diff --git a/src/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php b/src/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php index 504cfb01b1..5f74f38095 100644 --- a/src/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php +++ b/src/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php @@ -34,6 +34,31 @@ abstract class IteratorTestCase extends \PHPUnit_Framework_TestCase $this->assertEquals($expected, array_values($values)); } + /** + * Same as assertOrderedIterator, but checks the order of groups of + * array elements. + * + * @param array $expected - an array of arrays. For any two subarrays + * $a and $b such that $a goes before $b in $expected, the method + * asserts that any element of $a goes before any element of $b + * in the sequence generated by $iterator + * @param \Traversable $iterator + */ + protected function assertOrderedIteratorForGroups($expected, \Traversable $iterator) + { + $values = array_values(array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator))); + + foreach ($expected as $subarray) { + $temp = array(); + while (count($values) && count($temp) < count($subarray)) { + array_push($temp, array_shift($values)); + } + sort($temp); + sort($subarray); + $this->assertEquals($subarray, $temp); + } + } + /** * Same as IteratorTestCase::assertIterator with foreach usage * diff --git a/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php b/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php index 8aa5c89d82..2a7383dc0a 100644 --- a/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php +++ b/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php @@ -80,7 +80,11 @@ abstract class RealIteratorTestCase extends IteratorTestCase if (is_array($files)) { $f = array(); foreach ($files as $file) { - $f[] = self::$tmpDir.DIRECTORY_SEPARATOR.str_replace('/', DIRECTORY_SEPARATOR, $file); + if (is_array($file)) { + $f[] = self::toAbsolute($file); + } else { + $f[] = self::$tmpDir.DIRECTORY_SEPARATOR.str_replace('/', DIRECTORY_SEPARATOR, $file); + } } return $f; diff --git a/src/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php b/src/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php index f4def17a18..e2f433f8e7 100644 --- a/src/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php +++ b/src/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php @@ -54,7 +54,13 @@ class SortableIteratorTest extends RealIteratorTestCase $iterator = new SortableIterator($inner, $mode); - $this->assertOrderedIterator($expected, $iterator); + if ($mode === SortableIterator::SORT_BY_ACCESSED_TIME + || $mode === SortableIterator::SORT_BY_CHANGED_TIME + || $mode === SortableIterator::SORT_BY_MODIFIED_TIME) { + $this->assertOrderedIteratorForGroups($expected, $iterator); + } else { + $this->assertOrderedIterator($expected, $iterator); + } } public function getAcceptData() @@ -102,45 +108,53 @@ class SortableIteratorTest extends RealIteratorTestCase ); $sortByAccessedTime = array( - 'foo/bar.tmp', - 'test.php', - 'toto', - 'foo bar', - 'foo', - 'test.py', - '.foo', - '.foo/.bar', - '.foo/bar', - '.git', - '.bar', + // For these two files the access time was set to 2005-10-15 + array('foo/bar.tmp', 'test.php'), + // These files were created more or less at the same time + array( + '.git', + '.foo', + '.foo/.bar', + '.foo/bar', + 'test.py', + 'foo', + 'toto', + 'foo bar', + ), + // This file was accessed after sleeping for 1 sec + array('.bar'), ); $sortByChangedTime = array( - 'foo', - 'foo/bar.tmp', - 'toto', - '.git', - '.bar', - '.foo', - 'foo bar', - '.foo/.bar', - '.foo/bar', - 'test.php', - 'test.py', + array( + '.git', + '.foo', + '.foo/.bar', + '.foo/bar', + '.bar', + 'foo', + 'foo/bar.tmp', + 'toto', + 'foo bar', + ), + array('test.php'), + array('test.py'), ); $sortByModifiedTime = array( - 'foo/bar.tmp', - 'foo', - 'toto', - '.git', - '.bar', - '.foo', - 'foo bar', - '.foo/.bar', - '.foo/bar', - 'test.php', - 'test.py', + array( + '.git', + '.foo', + '.foo/.bar', + '.foo/bar', + '.bar', + 'foo', + 'foo/bar.tmp', + 'toto', + 'foo bar', + ), + array('test.php'), + array('test.py'), ); return array( From f1ae970a4e3c861819a1a0621b3cc299f2ea2dc6 Mon Sep 17 00:00:00 2001 From: Alex Bakhturin Date: Fri, 26 Sep 2014 10:04:52 -0700 Subject: [PATCH 3/3] Make Doctrine's dependency injection test less fragile. [Doctrine][DependencyInjection] The test checks that a few items are ordered according to the value of their 'priority' attribute. However, a few of the items have the same value of this attribute. RegisterEventListenersAndSubscribersPass doesn't use a stable sorting, yet the test asserts that items that are 'equal' shall go in the original order. Modified so that the order of the original items is not checked. --- .../RegisterEventListenersAndSubscribersPassTest.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php b/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php index 24fbcdc9a6..ae8a76750f 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php @@ -139,7 +139,11 @@ class RegisterEventListenersAndSubscribersPassTest extends \PHPUnit_Framework_Te ; $this->process($container); - $this->assertEquals(array('c', 'd', 'e', 'b', 'a'), $this->getServiceOrder($container, 'addEventSubscriber')); + $serviceOrder = $this->getServiceOrder($container, 'addEventSubscriber'); + $unordered = array_splice($serviceOrder, 0, 3); + sort($unordered); + $this->assertEquals(array('c', 'd', 'e'), $unordered); + $this->assertEquals(array('b', 'a'), $serviceOrder); } private function process(ContainerBuilder $container)