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(