annotate vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@13 2
Chris@13 3 namespace PhpParser\Internal;
Chris@13 4
Chris@17 5 class DifferTest extends \PHPUnit\Framework\TestCase
Chris@13 6 {
Chris@13 7 private function formatDiffString(array $diff) {
Chris@13 8 $diffStr = '';
Chris@13 9 foreach ($diff as $diffElem) {
Chris@13 10 switch ($diffElem->type) {
Chris@13 11 case DiffElem::TYPE_KEEP:
Chris@13 12 $diffStr .= $diffElem->old;
Chris@13 13 break;
Chris@13 14 case DiffElem::TYPE_REMOVE:
Chris@13 15 $diffStr .= '-' . $diffElem->old;
Chris@13 16 break;
Chris@13 17 case DiffElem::TYPE_ADD:
Chris@13 18 $diffStr .= '+' . $diffElem->new;
Chris@13 19 break;
Chris@13 20 case DiffElem::TYPE_REPLACE:
Chris@13 21 $diffStr .= '/' . $diffElem->old . $diffElem->new;
Chris@13 22 break;
Chris@13 23 default:
Chris@13 24 assert(false);
Chris@13 25 break;
Chris@13 26 }
Chris@13 27 }
Chris@13 28 return $diffStr;
Chris@13 29 }
Chris@13 30
Chris@13 31 /** @dataProvider provideTestDiff */
Chris@13 32 public function testDiff($oldStr, $newStr, $expectedDiffStr) {
Chris@13 33 $differ = new Differ(function($a, $b) { return $a === $b; });
Chris@13 34 $diff = $differ->diff(str_split($oldStr), str_split($newStr));
Chris@13 35 $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
Chris@13 36 }
Chris@13 37
Chris@13 38 public function provideTestDiff() {
Chris@13 39 return [
Chris@13 40 ['abc', 'abc', 'abc'],
Chris@13 41 ['abc', 'abcdef', 'abc+d+e+f'],
Chris@13 42 ['abcdef', 'abc', 'abc-d-e-f'],
Chris@13 43 ['abcdef', 'abcxyzdef', 'abc+x+y+zdef'],
Chris@13 44 ['axyzb', 'ab', 'a-x-y-zb'],
Chris@13 45 ['abcdef', 'abxyef', 'ab-c-d+x+yef'],
Chris@13 46 ['abcdef', 'cdefab', '-a-bcdef+a+b'],
Chris@13 47 ];
Chris@13 48 }
Chris@13 49
Chris@13 50 /** @dataProvider provideTestDiffWithReplacements */
Chris@13 51 public function testDiffWithReplacements($oldStr, $newStr, $expectedDiffStr) {
Chris@13 52 $differ = new Differ(function($a, $b) { return $a === $b; });
Chris@13 53 $diff = $differ->diffWithReplacements(str_split($oldStr), str_split($newStr));
Chris@13 54 $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
Chris@13 55 }
Chris@13 56
Chris@13 57 public function provideTestDiffWithReplacements() {
Chris@13 58 return [
Chris@13 59 ['abcde', 'axyze', 'a/bx/cy/dze'],
Chris@13 60 ['abcde', 'xbcdy', '/axbcd/ey'],
Chris@13 61 ['abcde', 'axye', 'a-b-c-d+x+ye'],
Chris@13 62 ['abcde', 'axyzue', 'a-b-c-d+x+y+z+ue'],
Chris@13 63 ];
Chris@13 64 }
Chris@13 65 }