181 lines
5.0 KiB
PHP
181 lines
5.0 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
* This file is part of sebastian/comparator.
|
||
|
*
|
||
|
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*/
|
||
|
namespace SebastianBergmann\Comparator;
|
||
|
|
||
|
use DOMDocument;
|
||
|
use DOMNode;
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
|
||
|
/**
|
||
|
* @covers \SebastianBergmann\Comparator\DOMNodeComparator<extended>
|
||
|
*
|
||
|
* @uses \SebastianBergmann\Comparator\Comparator
|
||
|
* @uses \SebastianBergmann\Comparator\Factory
|
||
|
* @uses \SebastianBergmann\Comparator\ComparisonFailure
|
||
|
*/
|
||
|
final class DOMNodeComparatorTest extends TestCase
|
||
|
{
|
||
|
/**
|
||
|
* @var DOMNodeComparator
|
||
|
*/
|
||
|
private $comparator;
|
||
|
|
||
|
protected function setUp(): void
|
||
|
{
|
||
|
$this->comparator = new DOMNodeComparator;
|
||
|
}
|
||
|
|
||
|
public function acceptsSucceedsProvider()
|
||
|
{
|
||
|
$document = new DOMDocument;
|
||
|
$node = new DOMNode;
|
||
|
|
||
|
return [
|
||
|
[$document, $document],
|
||
|
[$node, $node],
|
||
|
[$document, $node],
|
||
|
[$node, $document]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function acceptsFailsProvider()
|
||
|
{
|
||
|
$document = new DOMDocument;
|
||
|
|
||
|
return [
|
||
|
[$document, null],
|
||
|
[null, $document],
|
||
|
[null, null]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function assertEqualsSucceedsProvider()
|
||
|
{
|
||
|
return [
|
||
|
[
|
||
|
$this->createDOMDocument('<root></root>'),
|
||
|
$this->createDOMDocument('<root/>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<root attr="bar"></root>'),
|
||
|
$this->createDOMDocument('<root attr="bar"/>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<root><foo attr="bar"></foo></root>'),
|
||
|
$this->createDOMDocument('<root><foo attr="bar"/></root>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument("<root>\n <child/>\n</root>"),
|
||
|
$this->createDOMDocument('<root><child/></root>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<Root></Root>'),
|
||
|
$this->createDOMDocument('<root></root>'),
|
||
|
$ignoreCase = true
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument("<a x='' a=''/>"),
|
||
|
$this->createDOMDocument("<a a='' x=''/>"),
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function assertEqualsFailsProvider()
|
||
|
{
|
||
|
return [
|
||
|
[
|
||
|
$this->createDOMDocument('<root></root>'),
|
||
|
$this->createDOMDocument('<bar/>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<foo attr1="bar"/>'),
|
||
|
$this->createDOMDocument('<foo attr1="foobar"/>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<foo> bar </foo>'),
|
||
|
$this->createDOMDocument('<foo />')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<foo xmlns="urn:myns:bar"/>'),
|
||
|
$this->createDOMDocument('<foo xmlns="urn:notmyns:bar"/>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<foo> bar </foo>'),
|
||
|
$this->createDOMDocument('<foo> bir </foo>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<Root></Root>'),
|
||
|
$this->createDOMDocument('<root></root>')
|
||
|
],
|
||
|
[
|
||
|
$this->createDOMDocument('<root> bar </root>'),
|
||
|
$this->createDOMDocument('<root> BAR </root>')
|
||
|
]
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider acceptsSucceedsProvider
|
||
|
*/
|
||
|
public function testAcceptsSucceeds($expected, $actual): void
|
||
|
{
|
||
|
$this->assertTrue(
|
||
|
$this->comparator->accepts($expected, $actual)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider acceptsFailsProvider
|
||
|
*/
|
||
|
public function testAcceptsFails($expected, $actual): void
|
||
|
{
|
||
|
$this->assertFalse(
|
||
|
$this->comparator->accepts($expected, $actual)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider assertEqualsSucceedsProvider
|
||
|
*/
|
||
|
public function testAssertEqualsSucceeds($expected, $actual, $ignoreCase = false): void
|
||
|
{
|
||
|
$exception = null;
|
||
|
|
||
|
try {
|
||
|
$delta = 0.0;
|
||
|
$canonicalize = false;
|
||
|
$this->comparator->assertEquals($expected, $actual, $delta, $canonicalize, $ignoreCase);
|
||
|
} catch (ComparisonFailure $exception) {
|
||
|
}
|
||
|
|
||
|
$this->assertNull($exception, 'Unexpected ComparisonFailure');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @dataProvider assertEqualsFailsProvider
|
||
|
*/
|
||
|
public function testAssertEqualsFails($expected, $actual): void
|
||
|
{
|
||
|
$this->expectException(ComparisonFailure::class);
|
||
|
$this->expectExceptionMessage('Failed asserting that two DOM');
|
||
|
|
||
|
$this->comparator->assertEquals($expected, $actual);
|
||
|
}
|
||
|
|
||
|
private function createDOMDocument($content)
|
||
|
{
|
||
|
$document = new DOMDocument;
|
||
|
$document->preserveWhiteSpace = false;
|
||
|
$document->loadXML($content);
|
||
|
|
||
|
return $document;
|
||
|
}
|
||
|
}
|