<?php namespace SilverStripe\View\Tests\Parsers; use SilverStripe\Dev\SapphireTest; use SilverStripe\View\Parsers\Diff; class DiffTest extends SapphireTest { /** * @see https://groups.google.com/forum/#!topic/silverstripe-dev/yHcluCvuszo */ public function testTableDiff() { if (!class_exists('DOMDocument')) { $this->markTestSkipped('"DOMDocument" required'); return; } $from = "<table> <tbody> <tr class=\"blah\"> <td colspan=\"2\">Row 1</td> </tr> <tr class=\"foo\"> <td>Row 2</td> <td>Row 2</td> </tr> <tr> <td>Row 3</td> <td>Row 3</td> </tr> </tbody> </table>"; $to = "<table class=\"new-class\"> <tbody> <tr class=\"blah\"> <td colspan=\"2\">Row 1</td> </tr> <tr class=\"foo\"> <td>Row 2</td> <td>Row 2</td> </tr> </tbody> </table>"; $expected = "<ins>" . $to . "</ins>" . "<del>" . $from . "</del>"; $compare = Diff::compareHTML($from, $to); // Very hard to debug this way, wouldn't need to do this if PHP had an *actual* DOM parsing lib, // and not just the poor excuse that is DOMDocument $compare = preg_replace('/[\s\t\n\r]*/', '', $compare); $expected = preg_replace('/[\s\t\n\r]*/', '', $expected); $this->assertEquals($expected, $compare); } /** * @see https://github.com/silverstripe/silverstripe-framework/issues/8053 */ public function testLegacyEachStatement() { $sentenceOne = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $sentenceTwo = 'Nulla porttitor, ex quis commodo pharetra, diam dui efficitur justo, eu gravida elit eros vel libero.'; $from = "$sentenceOne $sentenceTwo"; $to = "$sentenceTwo $sentenceOne"; // We're cheating our test a little bit here, because depending on what HTML cleaner you have, you'll get // spaces added or not added around the tags. $expected = "/^ *<del>$sentenceOne<\/del> *$sentenceTwo *<ins>$sentenceOne<\/ins> *$/"; $actual = Diff::compareHTML($from, $to); $this->assertRegExp($expected, $actual); } public function testDiffArray() { $from = ['Lorem', ['array here please ignore'], 'ipsum dolor']; $to = 'Lorem,ipsum'; $expected = "/^Lorem,ipsum *<del>dolor<\/del> *$/"; $actual = Diff::compareHTML($from, $to); $this->assertRegExp($expected, $actual); } }