RemexCompatMunger: Don't call endTag() in case B/b
authorTim Starling <tstarling@wikimedia.org>
Mon, 6 Aug 2018 02:30:51 +0000 (12:30 +1000)
committerKunal Mehta <legoktm@member.fsf.org>
Sun, 21 Oct 2018 18:54:29 +0000 (11:54 -0700)
This was naïve, the linked bug documents a case where endTag() was
called despite children of the p-wrap still being in TreeBuilder's
stack. Instead, wait for the parent of the p-wrap to have endTag()
called on it, I've submitted a patch which will clean up the node in
that case.

Bug: T200827
Change-Id: I34694813eace9cadabf2db8f9ccca83d1368cfad
(cherry picked from commit 10c8cfea305ec1d450b16ad54ebddb5f910016f4)

includes/tidy/RemexCompatMunger.php
tests/phpunit/includes/tidy/RemexDriverTest.php

index ab2ba46..e6351e2 100644 (file)
@@ -262,7 +262,6 @@ class RemexCompatMunger implements TreeHandler {
                        $pElement = $parentData->childPElement;
                        $parentData->childPElement = null;
                        $newRef = $refElement->userData;
-                       $this->endTag( $pElement, $sourceStart, 0 );
                } elseif ( $under && $parentData->isSplittable
                        && (bool)$parentData->ancestorPNode !== $inline
                ) {
index b20557f..a5ebaa5 100644 (file)
@@ -257,6 +257,11 @@ class RemexDriverTest extends MediaWikiTestCase {
                        '<i><blockquote>x</i></blockquote>',
                        '<i></i><blockquote><p><i>x</i></p></blockquote>',
                ],
+               [
+                       'p-wrap ended by reparenting (T200827)',
+                       '<i><blockquote><p></i>',
+                       '<i></i><blockquote><p><i></i></p><p><i></i></p></blockquote>',
+               ],
        ];
 
        public function provider() {