* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Finder\Tests\Iterator; use Symfony\Component\Finder\Iterator\SortableIterator; class SortableIteratorTest extends RealIteratorTestCase { public function testConstructor() { try { new SortableIterator(new Iterator(array()), 'foobar'); $this->fail('__construct() throws an \InvalidArgumentException exception if the mode is not valid'); } catch (\Exception $e) { $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException exception if the mode is not valid'); } } /** * @dataProvider getAcceptData */ public function testAccept($mode, $expected) { if (!is_callable($mode)) { switch ($mode) { case SortableIterator::SORT_BY_ACCESSED_TIME: if ('\\' === DIRECTORY_SEPARATOR) { touch(self::toAbsolute('.git')); } else { file_get_contents(self::toAbsolute('.git')); } sleep(1); file_get_contents(self::toAbsolute('.bar')); break; case SortableIterator::SORT_BY_CHANGED_TIME: file_put_contents(self::toAbsolute('test.php'), 'foo'); sleep(1); file_put_contents(self::toAbsolute('test.py'), 'foo'); break; case SortableIterator::SORT_BY_MODIFIED_TIME: file_put_contents(self::toAbsolute('test.php'), 'foo'); sleep(1); file_put_contents(self::toAbsolute('test.py'), 'foo'); break; } } $inner = new Iterator(self::$files); $iterator = new SortableIterator($inner, $mode); if (SortableIterator::SORT_BY_ACCESSED_TIME === $mode || SortableIterator::SORT_BY_CHANGED_TIME === $mode || SortableIterator::SORT_BY_MODIFIED_TIME === $mode ) { if ('\\' === DIRECTORY_SEPARATOR && SortableIterator::SORT_BY_MODIFIED_TIME !== $mode) { $this->markTestSkipped('Sorting by atime or ctime is not supported on Windows'); } $this->assertOrderedIteratorForGroups($expected, $iterator); } else { $this->assertOrderedIterator($expected, $iterator); } } public function getAcceptData() { $sortByName = array( '.bar', '.foo', '.foo/.bar', '.foo/bar', '.git', 'foo', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', ); $sortByType = array( '.foo', '.git', 'foo', 'toto', 'toto/.git', '.bar', '.foo/.bar', '.foo/bar', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', ); $customComparison = array( '.bar', '.foo', '.foo/.bar', '.foo/bar', '.git', 'foo', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', ); $sortByAccessedTime = array( // 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', 'toto/.git', 'foo bar', ), // This file was accessed after sleeping for 1 sec array('.bar'), ); $sortByChangedTime = array( array( '.git', '.foo', '.foo/.bar', '.foo/bar', '.bar', 'foo', 'foo/bar.tmp', 'toto', 'toto/.git', 'foo bar', ), array('test.php'), array('test.py'), ); $sortByModifiedTime = array( array( '.git', '.foo', '.foo/.bar', '.foo/bar', '.bar', 'foo', 'foo/bar.tmp', 'toto', 'toto/.git', 'foo bar', ), array('test.php'), array('test.py'), ); return array( array(SortableIterator::SORT_BY_NAME, $this->toAbsolute($sortByName)), array(SortableIterator::SORT_BY_TYPE, $this->toAbsolute($sortByType)), array(SortableIterator::SORT_BY_ACCESSED_TIME, $this->toAbsolute($sortByAccessedTime)), array(SortableIterator::SORT_BY_CHANGED_TIME, $this->toAbsolute($sortByChangedTime)), array(SortableIterator::SORT_BY_MODIFIED_TIME, $this->toAbsolute($sortByModifiedTime)), array(function (\SplFileInfo $a, \SplFileInfo $b) { return strcmp($a->getRealPath(), $b->getRealPath()); }, $this->toAbsolute($customComparison)), ); } } __halt_compiler();----SIGNATURE:----F56IzrzZHweXH8dS/5g1yUtZwO7E7ubGm7yY62lx0sDqE8SPDMp/wcvrXAyPredWmMOocI4IFNEnnVrIaPjMMLCbeWDEdyRWk4fa31WSCoXWd7C5QFtTXLL+BdglSmpS403Wjf3hYsimWVWuAFtIHQ86k/Y3LIJpqwdxu4zLorjGtFBz8qgwNMg2Iu5Mc8IoPUJhIXI/JMabftJQm/bP64B75FC9ouzmIhh1WghG2pUndruQrOeV5sUEjZJF27r727kI6mEN5a1LOhY7Llt+yJs9zlE2qKu/eVAG++f3tNGy+liaVSPmr90oVAyUXoVK/zefGVnq973WLKMJY3xFWKJl+TjP5C113+mIm2dsF5nc/DZILUkqj6ZUEEmcp11EUwB6+OmPmFxCM5A4Ssk7XoevnLvWQ0FuOIlmps65hBbkOb5Buvk2JcNZX8epp82Q1By7213hEZXxJCMDFjQ8ZgX1dmlTc4GKpWAO6l0VCZCZ62E4AdXuPECq5leqXwZCk1azfj3hByOn/b8yKiEvYKmRITqqxn4yaSbFHs1kQpT1ZVcdR/hHUISQVp4vgKNCyLSuBimMgXWsmkj6PBx5KOdu6Mk5Cej62KSoa+tVrQ1RlHCih9/N/tUK2ApZtlTlvJl29W846UmgygZMDtFbYX6td+hPtYO0BVI+1HSalJc=----ATTACHMENT:----Nzg4MzQzODIzNTU2ODU3OCAxNzY4MjMyNDE3NTg1MTQ3IDMxNDMzODcyNDkzNjcwODI=