public function testDelta() { // Convert a diff into delta string. $this->d->setChanges(array(array(Diff::EQUAL, "jump"), array(Diff::DELETE, "s"), array(Diff::INSERT, "ed"), array(Diff::EQUAL, " over "), array(Diff::DELETE, "the"), array(Diff::INSERT, "a"), array(Diff::EQUAL, " lazy"), array(Diff::INSERT, "old dog"))); $text1 = $this->d->text1(); $this->assertEquals("jumps over the lazy", $text1); $delta = $this->d->toDelta(); $this->assertEquals("=4\t-1\t+ed\t=6\t-3\t+a\t=5\t+old dog", $delta); // Convert delta string into a diff. $this->assertEquals($this->d->getChanges(), $this->d->fromDelta($text1, $delta)->getChanges()); // Generates error (19 != 20). try { $this->d->fromDelta($text1 . 'x', $delta); $this->fail(); } catch (\InvalidArgumentException $e) { } // Generates error (19 != 18). try { $this->d->fromDelta(mb_substr($text1, 1), $delta); $this->fail(); } catch (\InvalidArgumentException $e) { } // Test deltas with special characters. $this->d->setChanges(array(array(Diff::EQUAL, Utils::unicodeChr(0x680) . " \t %"), array(Diff::DELETE, Utils::unicodeChr(0x681) . " \n ^"), array(Diff::INSERT, Utils::unicodeChr(0x682) . " \\ |"))); $text1 = $this->d->text1(); $this->assertEquals(Utils::unicodeChr(0x680) . " \t %" . Utils::unicodeChr(0x681) . " \n ^", $text1); $delta = $this->d->toDelta(); $this->assertEquals("=7\t-7\t+%DA%82 %02 %5C %7C", $delta); // Convert delta string into a diff. $this->assertEquals($this->d->getChanges(), $this->d->fromDelta($text1, $delta)->getChanges()); // Verify pool of unchanged characters. $this->d->setChanges(array(array(Diff::INSERT, "A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; / ? : @ & = + \$ , # "))); $text2 = $this->d->text2(); $this->assertEquals("A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; / ? : @ & = + \$ , # ", $text2); $delta = $this->d->toDelta(); $this->assertEquals("+A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; / ? : @ & = + \$ , # ", $delta); // Convert delta string into a diff. $this->assertEquals($this->d->getChanges(), $this->d->fromDelta("", $delta)->getChanges()); }