Open
Description
php -v: PHP 7.2.9-1+ubuntu16.04.1+deb.sury.org+1
When PHPUnit\Framework\TestCase::assertEquals
is used to compare two Maps it always returns true, regardless of contents.
Example:
use Ds\Map;
use PHPUnit\Framework\TestCase;
class MyTest extends TestCase
public function testMaps():void {
$mapA = new Map([
1 => 'Foo',
2 => 'Bar'
]);
$mapB = new Map([
3 => 'Cat',
4 => 'Car'
]);
$this->assertEquals($mapA, $mapB); // returns true
}
}
Explanation:
This seems to happen because SebastianBergmann\Exporter::toArray
uses (array)
to cast objects for comparison. Since whenever you cast a Ds\Map
to an array it becomes an empty array this means that assertEquals
always returns true.
You might argue that this is a bug in PhpUnit, but I felt I should open it here first to see how you think a comparison should be done on Maps.