IteratorTestCase.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\Finder\Tests\Iterator;
  11. use PHPUnit\Framework\TestCase;
  12. abstract class IteratorTestCase extends TestCase
  13. {
  14. protected function assertIterator($expected, \Traversable $iterator)
  15. {
  16. // set iterator_to_array $use_key to false to avoid values merge
  17. // this made FinderTest::testAppendWithAnArray() fail with GnuFinderAdapter
  18. $values = array_map(function (\SplFileInfo $fileinfo) { return str_replace('/', \DIRECTORY_SEPARATOR, $fileinfo->getPathname()); }, iterator_to_array($iterator, false));
  19. $expected = array_map(function ($path) { return str_replace('/', \DIRECTORY_SEPARATOR, $path); }, $expected);
  20. sort($values);
  21. sort($expected);
  22. $this->assertEquals($expected, array_values($values));
  23. }
  24. protected function assertOrderedIterator($expected, \Traversable $iterator)
  25. {
  26. $values = array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator));
  27. $this->assertEquals($expected, array_values($values));
  28. }
  29. /**
  30. * Same as assertOrderedIterator, but checks the order of groups of
  31. * array elements.
  32. *
  33. * @param array $expected - an array of arrays. For any two subarrays
  34. * $a and $b such that $a goes before $b in $expected, the method
  35. * asserts that any element of $a goes before any element of $b
  36. * in the sequence generated by $iterator
  37. */
  38. protected function assertOrderedIteratorForGroups(array $expected, \Traversable $iterator)
  39. {
  40. $values = array_values(array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator)));
  41. foreach ($expected as $subarray) {
  42. $temp = [];
  43. while (\count($values) && \count($temp) < \count($subarray)) {
  44. $temp[] = array_shift($values);
  45. }
  46. sort($temp);
  47. sort($subarray);
  48. $this->assertEquals($subarray, $temp);
  49. }
  50. }
  51. /**
  52. * Same as IteratorTestCase::assertIterator with foreach usage.
  53. */
  54. protected function assertIteratorInForeach(array $expected, \Traversable $iterator)
  55. {
  56. $values = [];
  57. foreach ($iterator as $file) {
  58. $this->assertInstanceOf('Symfony\\Component\\Finder\\SplFileInfo', $file);
  59. $values[] = $file->getPathname();
  60. }
  61. sort($values);
  62. sort($expected);
  63. $this->assertEquals($expected, array_values($values));
  64. }
  65. /**
  66. * Same as IteratorTestCase::assertOrderedIterator with foreach usage.
  67. */
  68. protected function assertOrderedIteratorInForeach(array $expected, \Traversable $iterator)
  69. {
  70. $values = [];
  71. foreach ($iterator as $file) {
  72. $this->assertInstanceOf('Symfony\\Component\\Finder\\SplFileInfo', $file);
  73. $values[] = $file->getPathname();
  74. }
  75. $this->assertEquals($expected, array_values($values));
  76. }
  77. }