* * 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:----Goov+Rb6FzgpiXXH3egbzTuThL8/UMlii2fTdcvqyldO9ndzjdz2Qh3c0DrrtNheW7K4BVaIySoENhNdRSVsVBuDqN0HBgLWGOq6HQarR5YHj/zj4fTaPY2IRLInyeqlY+PZKzivAJ82Oh1ZhzZqJr7NnOC7BGuz4B0SdwPvdGK039L1eWU4H25lzF8RqIX9nBxREm5jZ6LAOy1zG9Jd128YEGRsGoNJ6UcvBTieSUmN1lQCmd7RNf1anD9pw548nBwLA6GQcb6FWo+J5xbV1CW4axUPrDkcts1gV4oRup5FDXxHCdRGK5W+vrz0rhJ+CYlWcL+e06o+ew6e5Bx9bcLbGcQsExCIXhare8fzD/yiggZ7lBGTSDWHUKprFU6pk6DLdbEUBuVGESgCoMCF1gSM1QQHcFwddj/EeCdmkc//aFR1jzZOiuxqWN0DDgDhCsjc/9wySxT4u0ylhLyFVRaHxafAFi5unC8GTxNouBaCbtGEC6Xcm4wEYrPHYSu4NYApEtx6JUMAPeow/J09O5PbllkFNk/HnVVs6gF/CKEVGLBwSEo5tz69qmV03OgxGF/uPPgKGeffFrkFHLTGOniKjm8vnMi0zpvo/wOkkTSRs9Jq1tbNGZPLCzMXVQEvbOzmoKTixhlSB/Icf8GGQUecAUHtyswMfKu63pqV5S4=----ATTACHMENT:----OTY2NDY3NTU4ODg4ODI5NSA0MTc1MTQzMjYwMzc4MTY3IDEyMDA4Mjg3NTY0ODk4NDQ=