Allow duplicate articles in parser tests with same content
authorUmherirrender <umherirrender_de.wp@web.de>
Sat, 16 Sep 2017 12:34:15 +0000 (14:34 +0200)
committerUmherirrender <umherirrender_de.wp@web.de>
Sun, 1 Oct 2017 21:23:17 +0000 (21:23 +0000)
Some extensions needs Template:(( in the parser tests,
but when using phpunit tests all pages are created at the begin,
which gives errors like
'duplicate article 'Template:((' at
/Arrays/arrayLoopsInteractionParserTests.txt:10

Change-Id: Iefa3dc8d647d58f2d5382b847bbd6228f46faff3

tests/parser/ParserTestRunner.php

index 0121d53..149ba80 100644 (file)
@@ -1592,11 +1592,21 @@ class ParserTestRunner {
                        throw new MWException( "invalid title '$name' at $file:$line\n" );
                }
 
+               $newContent = ContentHandler::makeContent( $text, $title );
+
                $page = WikiPage::factory( $title );
                $page->loadPageData( 'fromdbmaster' );
 
                if ( $page->exists() ) {
-                       throw new MWException( "duplicate article '$name' at $file:$line\n" );
+                       $content = $page->getContent( Revision::RAW );
+                       // Only reject the title, if the content/content model is different.
+                       // This makes it easier to create Template:(( or Template:)) in different extensions
+                       if ( $newContent->equals( $content ) ) {
+                               return;
+                       }
+                       throw new MWException(
+                               "duplicate article '$name' with different content at $file:$line\n"
+                       );
                }
 
                // Use mock parser, to make debugging of actual parser tests simpler.
@@ -1606,7 +1616,7 @@ class ParserTestRunner {
                $restore = $this->executeSetupSnippets( [ 'wgParser' => new ParserTestMockParser ] );
                try {
                        $status = $page->doEditContent(
-                               ContentHandler::makeContent( $text, $title ),
+                               $newContent,
                                '',
                                EDIT_NEW | EDIT_INTERNAL
                        );