annotate vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents
children 129ea1e6d783
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@13 2
Chris@13 3 namespace PhpParser\Internal;
Chris@13 4
Chris@13 5 use PHPUnit\Framework\TestCase;
Chris@13 6
Chris@13 7 class DifferTest extends TestCase
Chris@13 8 {
Chris@13 9 private function formatDiffString(array $diff) {
Chris@13 10 $diffStr = '';
Chris@13 11 foreach ($diff as $diffElem) {
Chris@13 12 switch ($diffElem->type) {
Chris@13 13 case DiffElem::TYPE_KEEP:
Chris@13 14 $diffStr .= $diffElem->old;
Chris@13 15 break;
Chris@13 16 case DiffElem::TYPE_REMOVE:
Chris@13 17 $diffStr .= '-' . $diffElem->old;
Chris@13 18 break;
Chris@13 19 case DiffElem::TYPE_ADD:
Chris@13 20 $diffStr .= '+' . $diffElem->new;
Chris@13 21 break;
Chris@13 22 case DiffElem::TYPE_REPLACE:
Chris@13 23 $diffStr .= '/' . $diffElem->old . $diffElem->new;
Chris@13 24 break;
Chris@13 25 default:
Chris@13 26 assert(false);
Chris@13 27 break;
Chris@13 28 }
Chris@13 29 }
Chris@13 30 return $diffStr;
Chris@13 31 }
Chris@13 32
Chris@13 33 /** @dataProvider provideTestDiff */
Chris@13 34 public function testDiff($oldStr, $newStr, $expectedDiffStr) {
Chris@13 35 $differ = new Differ(function($a, $b) { return $a === $b; });
Chris@13 36 $diff = $differ->diff(str_split($oldStr), str_split($newStr));
Chris@13 37 $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
Chris@13 38 }
Chris@13 39
Chris@13 40 public function provideTestDiff() {
Chris@13 41 return [
Chris@13 42 ['abc', 'abc', 'abc'],
Chris@13 43 ['abc', 'abcdef', 'abc+d+e+f'],
Chris@13 44 ['abcdef', 'abc', 'abc-d-e-f'],
Chris@13 45 ['abcdef', 'abcxyzdef', 'abc+x+y+zdef'],
Chris@13 46 ['axyzb', 'ab', 'a-x-y-zb'],
Chris@13 47 ['abcdef', 'abxyef', 'ab-c-d+x+yef'],
Chris@13 48 ['abcdef', 'cdefab', '-a-bcdef+a+b'],
Chris@13 49 ];
Chris@13 50 }
Chris@13 51
Chris@13 52 /** @dataProvider provideTestDiffWithReplacements */
Chris@13 53 public function testDiffWithReplacements($oldStr, $newStr, $expectedDiffStr) {
Chris@13 54 $differ = new Differ(function($a, $b) { return $a === $b; });
Chris@13 55 $diff = $differ->diffWithReplacements(str_split($oldStr), str_split($newStr));
Chris@13 56 $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
Chris@13 57 }
Chris@13 58
Chris@13 59 public function provideTestDiffWithReplacements() {
Chris@13 60 return [
Chris@13 61 ['abcde', 'axyze', 'a/bx/cy/dze'],
Chris@13 62 ['abcde', 'xbcdy', '/axbcd/ey'],
Chris@13 63 ['abcde', 'axye', 'a-b-c-d+x+ye'],
Chris@13 64 ['abcde', 'axyzue', 'a-b-c-d+x+y+z+ue'],
Chris@13 65 ];
Chris@13 66 }
Chris@13 67 }