diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php	Mon Apr 23 09:33:26 2018 +0100
@@ -0,0 +1,67 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Internal;
+
+use PHPUnit\Framework\TestCase;
+
+class DifferTest extends TestCase
+{
+    private function formatDiffString(array $diff) {
+        $diffStr = '';
+        foreach ($diff as $diffElem) {
+            switch ($diffElem->type) {
+                case DiffElem::TYPE_KEEP:
+                    $diffStr .= $diffElem->old;
+                    break;
+                case DiffElem::TYPE_REMOVE:
+                    $diffStr .= '-' . $diffElem->old;
+                    break;
+                case DiffElem::TYPE_ADD:
+                    $diffStr .= '+' . $diffElem->new;
+                    break;
+                case DiffElem::TYPE_REPLACE:
+                    $diffStr .= '/' . $diffElem->old . $diffElem->new;
+                    break;
+                default:
+                    assert(false);
+                    break;
+            }
+        }
+        return $diffStr;
+    }
+
+    /** @dataProvider provideTestDiff */
+    public function testDiff($oldStr, $newStr, $expectedDiffStr) {
+        $differ = new Differ(function($a, $b) { return $a === $b; });
+        $diff = $differ->diff(str_split($oldStr), str_split($newStr));
+        $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
+    }
+
+    public function provideTestDiff() {
+        return [
+            ['abc', 'abc', 'abc'],
+            ['abc', 'abcdef', 'abc+d+e+f'],
+            ['abcdef', 'abc', 'abc-d-e-f'],
+            ['abcdef', 'abcxyzdef', 'abc+x+y+zdef'],
+            ['axyzb', 'ab', 'a-x-y-zb'],
+            ['abcdef', 'abxyef', 'ab-c-d+x+yef'],
+            ['abcdef', 'cdefab', '-a-bcdef+a+b'],
+        ];
+    }
+
+    /** @dataProvider provideTestDiffWithReplacements */
+    public function testDiffWithReplacements($oldStr, $newStr, $expectedDiffStr) {
+        $differ = new Differ(function($a, $b) { return $a === $b; });
+        $diff = $differ->diffWithReplacements(str_split($oldStr), str_split($newStr));
+        $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
+    }
+
+    public function provideTestDiffWithReplacements() {
+        return [
+            ['abcde', 'axyze', 'a/bx/cy/dze'],
+            ['abcde', 'xbcdy', '/axbcd/ey'],
+            ['abcde', 'axye', 'a-b-c-d+x+ye'],
+            ['abcde', 'axyzue', 'a-b-c-d+x+y+z+ue'],
+        ];
+    }
+}