mirror of
				https://github.com/diocloid/LinkTitles.git
				synced 2025-10-22 05:42:32 +02:00 
			
		
		
		
	Merge branch 'release-5.0.8'
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +0,0 @@
 | 
			
		||||
[submodule "gh-pages"]
 | 
			
		||||
	path = gh-pages
 | 
			
		||||
	url = git@github.com:bovender/LinkTitles.git
 | 
			
		||||
	branch = gh-pages
 | 
			
		||||
 
 | 
			
		||||
@@ -452,6 +452,7 @@ master branch if you want to install the extension for your own Wiki.
 | 
			
		||||
-   @tetsuya-zama, bug fix
 | 
			
		||||
-   @yoshida3669, namespace-related bug fixes
 | 
			
		||||
-   Caleb Mingle (@dentafrice), bug fix
 | 
			
		||||
-   @paladox, bug fixes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Testing
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								gh-pages
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								gh-pages
									
									
									
									
									
								
							 Submodule gh-pages deleted from 48501118d1
									
								
							@@ -146,7 +146,7 @@ class Special extends \SpecialPage {
 | 
			
		||||
			$start += 1;
 | 
			
		||||
 | 
			
		||||
			// Check if the time limit is exceeded
 | 
			
		||||
			if ( microtime( true ) - $startTime > $config->specialPageReloadAfter )
 | 
			
		||||
			if ( microtime( true ) - $startTime > $this->config->specialPageReloadAfter )
 | 
			
		||||
			{
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -29,13 +29,13 @@
 | 
			
		||||
 */
 | 
			
		||||
class ConfigTest extends LinkTitles\TestCase {
 | 
			
		||||
 | 
			
		||||
  public function testParseOnEdit() {
 | 
			
		||||
    $this->setMwGlobals( [
 | 
			
		||||
      'wgLinkTitlesParseOnEdit' => true,
 | 
			
		||||
      'wgLinkTitlesParseOnRender' => false
 | 
			
		||||
    ] );
 | 
			
		||||
    $config = new LinkTitles\Config();
 | 
			
		||||
    global $wgLinkTitlesParseOnEdit;
 | 
			
		||||
    $this->assertSame( $config->parseOnEdit, $wgLinkTitlesParseOnEdit );
 | 
			
		||||
  }
 | 
			
		||||
	public function testParseOnEdit() {
 | 
			
		||||
		$this->setMwGlobals( [
 | 
			
		||||
			'wgLinkTitlesParseOnEdit' => true,
 | 
			
		||||
			'wgLinkTitlesParseOnRender' => false
 | 
			
		||||
		] );
 | 
			
		||||
		$config = new LinkTitles\Config();
 | 
			
		||||
		global $wgLinkTitlesParseOnEdit;
 | 
			
		||||
		$this->assertSame( $config->parseOnEdit, $wgLinkTitlesParseOnEdit );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,87 +26,87 @@
 | 
			
		||||
 */
 | 
			
		||||
class ExtensionTest extends LinkTitles\TestCase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
	/**
 | 
			
		||||
	 * @dataProvider provideParseOnEditData
 | 
			
		||||
   */
 | 
			
		||||
  public function testParseOnEdit( $parseOnEdit, $input, $expectedOutput) {
 | 
			
		||||
    $this->setMwGlobals( [
 | 
			
		||||
      'wgLinkTitlesParseOnEdit' => $parseOnEdit,
 | 
			
		||||
      'wgLinkTitlesParseOnRender' => !$parseOnEdit
 | 
			
		||||
    ] );
 | 
			
		||||
    $pageId = $this->insertPage( 'test page', $input )['id'];
 | 
			
		||||
    $page = WikiPage::newFromId( $pageId );
 | 
			
		||||
    $this->assertSame( $expectedOutput, self::getPageText( $page ) );
 | 
			
		||||
  }
 | 
			
		||||
	 */
 | 
			
		||||
	public function testParseOnEdit( $parseOnEdit, $input, $expectedOutput) {
 | 
			
		||||
		$this->setMwGlobals( [
 | 
			
		||||
			'wgLinkTitlesParseOnEdit' => $parseOnEdit,
 | 
			
		||||
			'wgLinkTitlesParseOnRender' => !$parseOnEdit
 | 
			
		||||
		] );
 | 
			
		||||
		$pageId = $this->insertPage( 'test page', $input )['id'];
 | 
			
		||||
		$page = WikiPage::newFromId( $pageId );
 | 
			
		||||
		$this->assertSame( $expectedOutput, self::getPageText( $page ) );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  public function provideParseOnEditData() {
 | 
			
		||||
    return [
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnEdit
 | 
			
		||||
        'This page should link to the link target but not to test page',
 | 
			
		||||
        'This page should link to the [[link target]] but not to test page'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        false, // parseOnEdit
 | 
			
		||||
        'This page should *not* link to the link target',
 | 
			
		||||
        'This page should *not* link to the link target'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnEdit
 | 
			
		||||
        'With __NOAUTOLINKS__, this page should not link to the link target',
 | 
			
		||||
        'With __NOAUTOLINKS__, this page should not link to the link target'
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
	public function provideParseOnEditData() {
 | 
			
		||||
		return [
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnEdit
 | 
			
		||||
				'This page should link to the link target but not to test page',
 | 
			
		||||
				'This page should link to the [[link target]] but not to test page'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				false, // parseOnEdit
 | 
			
		||||
				'This page should *not* link to the link target',
 | 
			
		||||
				'This page should *not* link to the link target'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnEdit
 | 
			
		||||
				'With __NOAUTOLINKS__, this page should not link to the link target',
 | 
			
		||||
				'With __NOAUTOLINKS__, this page should not link to the link target'
 | 
			
		||||
			],
 | 
			
		||||
		];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
	/**
 | 
			
		||||
	 * @dataProvider provideParseOnRenderData
 | 
			
		||||
   */
 | 
			
		||||
  public function testParseOnRender( $parseOnRender, $input, $expectedOutput) {
 | 
			
		||||
    $this->setMwGlobals( [
 | 
			
		||||
      'wgLinkTitlesParseOnEdit' => false, // do not modify the page as we create it
 | 
			
		||||
      'wgLinkTitlesParseOnRender' => $parseOnRender
 | 
			
		||||
    ] );
 | 
			
		||||
    $title = $this->insertPage( 'test page', $input )['title'];
 | 
			
		||||
    $page = new WikiPage( $title );
 | 
			
		||||
    $output = $page->getParserOutput( new ParserOptions(), null, true );
 | 
			
		||||
    $lines = explode( "\n", $output->getText() );
 | 
			
		||||
    $this->assertRegexp( $expectedOutput, $lines[0] );
 | 
			
		||||
  }
 | 
			
		||||
	 */
 | 
			
		||||
	public function testParseOnRender( $parseOnRender, $input, $expectedOutput) {
 | 
			
		||||
		$this->setMwGlobals( [
 | 
			
		||||
			'wgLinkTitlesParseOnEdit' => false, // do not modify the page as we create it
 | 
			
		||||
			'wgLinkTitlesParseOnRender' => $parseOnRender
 | 
			
		||||
		] );
 | 
			
		||||
		$title = $this->insertPage( 'test page', $input )['title'];
 | 
			
		||||
		$page = new WikiPage( $title );
 | 
			
		||||
		$output = $page->getParserOutput( new ParserOptions(), null, true );
 | 
			
		||||
		$lines = explode( "\n", $output->getText() );
 | 
			
		||||
		$this->assertRegexp( $expectedOutput, $lines[0] );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  public function provideParseOnRenderData() {
 | 
			
		||||
    return [
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        'This page should link to the link target but not to the test page',
 | 
			
		||||
        '_This page should link to the <a href=[^>]+>link target</a> but not to the test page_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        false, // parseOnRender
 | 
			
		||||
        'This page should not link to the link target',
 | 
			
		||||
        '_This page should not link to the link target_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '__NOAUTOLINKS__With noautolinks magic word, this page should not link to the link target',
 | 
			
		||||
        '_With noautolinks magic word, this page should not link to the link target_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '__NOAUTOLINKS__With noautolinks magic word, <autolinks>link target in autolinks tag</autolinks> should be linked',
 | 
			
		||||
        '_With noautolinks magic word, <a href=[^>]+>link target</a> in autolinks tag should be linked_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '<noautolinks>In a noautolinks tag, link target should NOT be linked</noautolinks>',
 | 
			
		||||
        '_In a noautolinks tag, link target should NOT be linked_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '<noautolinks>In a noautolinks tag, <autolinks>link target in autolinks tag</autolinks> should be linked</noautolinks>',
 | 
			
		||||
        '_In a noautolinks tag, <a href=[^>]+>link target</a> in autolinks tag should be linked_'
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
	public function provideParseOnRenderData() {
 | 
			
		||||
		return [
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnRender
 | 
			
		||||
				'This page should link to the link target but not to the test page',
 | 
			
		||||
				'_This page should link to the <a href=[^>]+>link target</a> but not to the test page_'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				false, // parseOnRender
 | 
			
		||||
				'This page should not link to the link target',
 | 
			
		||||
				'_This page should not link to the link target_'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnRender
 | 
			
		||||
				'__NOAUTOLINKS__With noautolinks magic word, this page should not link to the link target',
 | 
			
		||||
				'_With noautolinks magic word, this page should not link to the link target_'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnRender
 | 
			
		||||
				'__NOAUTOLINKS__With noautolinks magic word, <autolinks>link target in autolinks tag</autolinks> should be linked',
 | 
			
		||||
				'_With noautolinks magic word, <a href=[^>]+>link target</a> in autolinks tag should be linked_'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnRender
 | 
			
		||||
				'<noautolinks>In a noautolinks tag, link target should NOT be linked</noautolinks>',
 | 
			
		||||
				'_In a noautolinks tag, link target should NOT be linked_'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				true, // parseOnRender
 | 
			
		||||
				'<noautolinks>In a noautolinks tag, <autolinks>link target in autolinks tag</autolinks> should be linked</noautolinks>',
 | 
			
		||||
				'_In a noautolinks tag, <a href=[^>]+>link target</a> in autolinks tag should be linked_'
 | 
			
		||||
			],
 | 
			
		||||
		];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,11 +41,11 @@ class LinkTitlesLinkerTest extends LinkTitles\TestCase {
 | 
			
		||||
		parent::setUp(); // call last to have the Targets object invalidated after inserting the page
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  public function addDBData() {
 | 
			
		||||
	public function addDBData() {
 | 
			
		||||
		$this->title = $this->insertPage( 'source page', 'This page is the test page' )['title'];
 | 
			
		||||
    $this->insertPage( 'link target', 'This page serves as a link target' );
 | 
			
		||||
		$this->insertPage( 'link target', 'This page serves as a link target' );
 | 
			
		||||
		parent::addDBDataOnce(); // call parent after adding page to have targets invalidated
 | 
			
		||||
  }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @dataProvider provideTestTitleWithNumberData
 | 
			
		||||
@@ -54,8 +54,8 @@ class LinkTitlesLinkerTest extends LinkTitles\TestCase {
 | 
			
		||||
		$config = new LinkTitles\Config();
 | 
			
		||||
		$config->wordStartOnly = true;
 | 
			
		||||
		$config->wordEndOnly = true;
 | 
			
		||||
    $this->insertPage( 'numbered-1', 'This page serves as a link target with a numbered title' );
 | 
			
		||||
    $this->insertPage( 'numbered-101', 'This page serves as a link target with a numbered title' );
 | 
			
		||||
		$this->insertPage( 'numbered-1', 'This page serves as a link target with a numbered title' );
 | 
			
		||||
		$this->insertPage( 'numbered-101', 'This page serves as a link target with a numbered title' );
 | 
			
		||||
		parent::addDBDataOnce(); // call parent after adding page to have targets invalidated
 | 
			
		||||
		$source = LinkTitles\Source::createFromTitleAndText( $this->title, $input, $config );
 | 
			
		||||
		$linker = new LinkTitles\Linker( $config );
 | 
			
		||||
@@ -85,6 +85,21 @@ class LinkTitlesLinkerTest extends LinkTitles\TestCase {
 | 
			
		||||
		];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Test issue #39, https://github.com/bovender/LinkTitles/issues/39
 | 
			
		||||
	 */
 | 
			
		||||
	public function testNoautolinks() {
 | 
			
		||||
		$config = new LinkTitles\Config();
 | 
			
		||||
		$config->firstOnly = false;
 | 
			
		||||
		LinkTitles\Splitter::invalidate();
 | 
			
		||||
		$input = 'This is a text with <noautolinks><nowiki>link target</nowiki></noautolinks>';
 | 
			
		||||
		$source = LinkTitles\Source::createFromTitleAndText( $this->title, $input, $config );
 | 
			
		||||
		$linker = new LinkTitles\Linker( $config );
 | 
			
		||||
		$result = $linker->linkContent( $source );
 | 
			
		||||
		if ( !$result ) { $result = $input; }
 | 
			
		||||
		$this->assertSame( $input, $result );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @dataProvider provideLinkContentTemplatesData
 | 
			
		||||
	 */
 | 
			
		||||
@@ -294,7 +309,7 @@ class LinkTitlesLinkerTest extends LinkTitles\TestCase {
 | 
			
		||||
		$config = new LinkTitles\Config();
 | 
			
		||||
		$config->targetNamespaces = $namespaces;
 | 
			
		||||
 | 
			
		||||
	 	$ns = 4000;
 | 
			
		||||
		$ns = 4000;
 | 
			
		||||
		$nsText = 'customnamespace';
 | 
			
		||||
		$this->mergeMwGlobalArrayValue( 'wgExtraNamespaces', [ $ns => $nsText ] );
 | 
			
		||||
 | 
			
		||||
@@ -316,16 +331,16 @@ class LinkTitlesLinkerTest extends LinkTitles\TestCase {
 | 
			
		||||
 | 
			
		||||
	public function provideLinkContentNamespacesData() {
 | 
			
		||||
		return [
 | 
			
		||||
	 		[
 | 
			
		||||
	 			[], // namespaces
 | 
			
		||||
	 			'With targetNamespaces = [], page in custom namespace should not be linked',
 | 
			
		||||
	 			'With targetNamespaces = [], page in custom namespace should not be linked'
 | 
			
		||||
	 		],
 | 
			
		||||
	 		[
 | 
			
		||||
	 			[ 4000 ], // namespaces
 | 
			
		||||
	 			'With targetNamespaces = [ 4000 ], page in custom namespace should be linked',
 | 
			
		||||
	 			'With targetNamespaces = [ 4000 ], page [[customnamespace:In custom namespace|in custom namespace]] should be linked'
 | 
			
		||||
	 		],
 | 
			
		||||
			[
 | 
			
		||||
				[], // namespaces
 | 
			
		||||
				'With targetNamespaces = [], page in custom namespace should not be linked',
 | 
			
		||||
				'With targetNamespaces = [], page in custom namespace should not be linked'
 | 
			
		||||
			],
 | 
			
		||||
			[
 | 
			
		||||
				[ 4000 ], // namespaces
 | 
			
		||||
				'With targetNamespaces = [ 4000 ], page in custom namespace should be linked',
 | 
			
		||||
				'With targetNamespaces = [ 4000 ], page [[customnamespace:In custom namespace|in custom namespace]] should be linked'
 | 
			
		||||
			],
 | 
			
		||||
		];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,22 +22,22 @@
 | 
			
		||||
namespace LinkTitles;
 | 
			
		||||
 | 
			
		||||
abstract class TestCase extends \MediaWikiTestCase {
 | 
			
		||||
  protected function setUp() {
 | 
			
		||||
    parent::setUp();
 | 
			
		||||
  }
 | 
			
		||||
	protected function setUp() {
 | 
			
		||||
		parent::setUp();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  protected function tearDown() {
 | 
			
		||||
    parent::tearDown();
 | 
			
		||||
  }
 | 
			
		||||
	protected function tearDown() {
 | 
			
		||||
		parent::tearDown();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  public function addDBDataOnce() {
 | 
			
		||||
    parent::addDBDataOnce();
 | 
			
		||||
    $this->insertPage( 'link target', 'This page serves as a link target' );
 | 
			
		||||
    Targets::invalidate(); // force re-querying the pages table
 | 
			
		||||
  }
 | 
			
		||||
	public function addDBDataOnce() {
 | 
			
		||||
		parent::addDBDataOnce();
 | 
			
		||||
		$this->insertPage( 'link target', 'This page serves as a link target' );
 | 
			
		||||
		Targets::invalidate(); // force re-querying the pages table
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  protected function getPageText( \WikiPage $page ) {
 | 
			
		||||
    $content = $page->getContent();
 | 
			
		||||
    return $page->getContentHandler()->serializeContent( $content );
 | 
			
		||||
  }
 | 
			
		||||
	protected function getPageText( \WikiPage $page ) {
 | 
			
		||||
		$content = $page->getContent();
 | 
			
		||||
		return $page->getContentHandler()->serializeContent( $content );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user