minor #12028 [Finder] [Iterator] Make the tests less fragile (AlphaStream)
This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes #12028).
Discussion
----------
[Finder] [Iterator] Make the tests less fragile
Modified the Iterator tests so that they assert only on what's actually being tested. In particular, the tests were checking the order of the files [that were created virtually simultaneously] after sorting them by date. This change is a part of the effort to make Symfony successfully pass tests on HHVM
| Q | A
| ------------- | ---
| Bug fix? | [no]
| New feature? | [no]
| BC breaks? | [no]
| Deprecations? | [no]
| Tests pass? | [yes]
| Fixed tickets | [none]
| License | MIT
| Doc PR | [none]
Commits
-------
10f9135
[Finder] [Iterator] Make the tests less fragile
This commit is contained in:
commit
55b35a2a64
@ -34,6 +34,31 @@ abstract class IteratorTestCase extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals($expected, array_values($values));
|
$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
|
* Same as IteratorTestCase::assertIterator with foreach usage
|
||||||
*
|
*
|
||||||
|
@ -80,7 +80,11 @@ abstract class RealIteratorTestCase extends IteratorTestCase
|
|||||||
if (is_array($files)) {
|
if (is_array($files)) {
|
||||||
$f = array();
|
$f = array();
|
||||||
foreach ($files as $file) {
|
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;
|
return $f;
|
||||||
|
@ -54,7 +54,13 @@ class SortableIteratorTest extends RealIteratorTestCase
|
|||||||
|
|
||||||
$iterator = new SortableIterator($inner, $mode);
|
$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()
|
public function getAcceptData()
|
||||||
@ -102,45 +108,53 @@ class SortableIteratorTest extends RealIteratorTestCase
|
|||||||
);
|
);
|
||||||
|
|
||||||
$sortByAccessedTime = array(
|
$sortByAccessedTime = array(
|
||||||
'foo/bar.tmp',
|
// For these two files the access time was set to 2005-10-15
|
||||||
'test.php',
|
array('foo/bar.tmp', 'test.php'),
|
||||||
'toto',
|
// These files were created more or less at the same time
|
||||||
'foo bar',
|
array(
|
||||||
'foo',
|
'.git',
|
||||||
'test.py',
|
'.foo',
|
||||||
'.foo',
|
'.foo/.bar',
|
||||||
'.foo/.bar',
|
'.foo/bar',
|
||||||
'.foo/bar',
|
'test.py',
|
||||||
'.git',
|
'foo',
|
||||||
'.bar',
|
'toto',
|
||||||
|
'foo bar',
|
||||||
|
),
|
||||||
|
// This file was accessed after sleeping for 1 sec
|
||||||
|
array('.bar'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$sortByChangedTime = array(
|
$sortByChangedTime = array(
|
||||||
'foo',
|
array(
|
||||||
'foo/bar.tmp',
|
'.git',
|
||||||
'toto',
|
'.foo',
|
||||||
'.git',
|
'.foo/.bar',
|
||||||
'.bar',
|
'.foo/bar',
|
||||||
'.foo',
|
'.bar',
|
||||||
'foo bar',
|
'foo',
|
||||||
'.foo/.bar',
|
'foo/bar.tmp',
|
||||||
'.foo/bar',
|
'toto',
|
||||||
'test.php',
|
'foo bar',
|
||||||
'test.py',
|
),
|
||||||
|
array('test.php'),
|
||||||
|
array('test.py'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$sortByModifiedTime = array(
|
$sortByModifiedTime = array(
|
||||||
'foo/bar.tmp',
|
array(
|
||||||
'foo',
|
'.git',
|
||||||
'toto',
|
'.foo',
|
||||||
'.git',
|
'.foo/.bar',
|
||||||
'.bar',
|
'.foo/bar',
|
||||||
'.foo',
|
'.bar',
|
||||||
'foo bar',
|
'foo',
|
||||||
'.foo/.bar',
|
'foo/bar.tmp',
|
||||||
'.foo/bar',
|
'toto',
|
||||||
'test.php',
|
'foo bar',
|
||||||
'test.py',
|
),
|
||||||
|
array('test.php'),
|
||||||
|
array('test.py'),
|
||||||
);
|
);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
Reference in New Issue
Block a user