Предположим, я хочу подтвердить, что эти фрагменты XML совпадают:
public function assertXmlIsSame() {
$leExpectedXml = <<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;
$leActualXml = <<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder
</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;$this->assertEquals(
$leExpectedXml,
$leActualXml,
'le xmls should be the same'
);
}
Я получаю вывод:
Fail Failed asserting that two strings are equal. ( -Expected | +Actual )
- '<note>
- <to>Tove</to>
- <from>Jani</from>
- <heading>Reminder</heading>
- <body>Don't forget me this weekend!</body>
- </note>'
+ '<note>
+ <to>Tove</to>
+ <from>Jani</from>
+ <heading>Reminder
+ </heading>
+ <body>Don't forget me this weekend!</body>
+ </note>'
что бесполезно, так как весь XML выводится даже со строкой равенства.
Если я создам SebastianBergmann\Diff\Differ
и сбросить этот diff:
$diff = (new Differ())->diff($leExpectedXml, $leActualXml);
codecept_debug($diff);
Вывод выглядит так:
--- Original
+++ New
@@ @@
<note>
<to>Tove</to>
<from>Jani</from>
- <heading>Reminder</heading>
+ <heading>Reminder
+ </heading>
<body>Don't forget me this weekend!</body>
</note>
Намного более читабельный и больше того, что я ожидал от кодирования.
Есть ли для кодирования только подсветка различий для измененных частей? Как особенно если xml-структуры становятся больше, почти невозможно увидеть разницу с выводом diff по умолчанию.
Задача ещё не решена.
Других решений пока нет …