mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
synced 2024-12-04 19:38:16 +00:00
696c35f496
Two problems: 1. Manipulating globals directly affects all following tests. They are not independent from each other. This problem can be seen in CiteTest. 2. Some test cases in testValidateRef don't test what you think. For example, the test for a conflicting "extends" + "follow" was not failing because of the conflict but because "extends" was disabled and disallowed. Change-Id: Iaa4e1f3f3222155d59984e577cba3f0b8dec40c3
103 lines
2.9 KiB
PHP
103 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Cite\Tests\Integration;
|
|
|
|
use Cite\AnchorFormatter;
|
|
use Cite\ReferenceMessageLocalizer;
|
|
use MediaWiki\Parser\Sanitizer;
|
|
use Message;
|
|
use Wikimedia\TestingAccessWrapper;
|
|
|
|
/**
|
|
* @coversDefaultClass \Cite\AnchorFormatter
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
*/
|
|
class AnchorFormatterTest extends \MediaWikiIntegrationTestCase {
|
|
|
|
protected function setUp(): void {
|
|
parent::setUp();
|
|
$this->overrideConfigValue( 'FragmentMode', [ 'html5' ] );
|
|
}
|
|
|
|
/**
|
|
* @covers ::refKey
|
|
* @covers ::backLink
|
|
*/
|
|
public function testRefKey() {
|
|
$mockMessageLocalizer = $this->createMock( ReferenceMessageLocalizer::class );
|
|
$mockMessageLocalizer->method( 'msg' )->willReturnCallback(
|
|
function ( ...$args ) {
|
|
$msg = $this->createMock( Message::class );
|
|
$msg->method( 'plain' )->willReturn( '(' . implode( '|', $args ) . ')' );
|
|
return $msg;
|
|
}
|
|
);
|
|
$formatter = new AnchorFormatter( $mockMessageLocalizer );
|
|
|
|
$this->assertSame(
|
|
'(cite_reference_link_prefix)key',
|
|
$formatter->backLink( 'key', null ) );
|
|
$this->assertSame(
|
|
'(cite_reference_link_prefix)key_2',
|
|
$formatter->backLink( 'key', '2' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers ::getReferencesKey
|
|
* @covers ::jumpLink
|
|
*/
|
|
public function testGetReferencesKey() {
|
|
$mockMessageLocalizer = $this->createMock( ReferenceMessageLocalizer::class );
|
|
$mockMessageLocalizer->method( 'msg' )->willReturnCallback(
|
|
function ( ...$args ) {
|
|
$msg = $this->createMock( Message::class );
|
|
$msg->method( 'plain' )->willReturn( '(' . implode( '|', $args ) . ')' );
|
|
return $msg;
|
|
}
|
|
);
|
|
$formatter = new AnchorFormatter( $mockMessageLocalizer );
|
|
|
|
$this->assertSame(
|
|
'(cite_references_link_prefix)key',
|
|
$formatter->jumpLink( 'key' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers ::normalizeKey
|
|
* @covers ::__construct
|
|
* @dataProvider provideKeyNormalizations
|
|
*/
|
|
public function testNormalizeKey( $key, $expected ) {
|
|
/** @var AnchorFormatter $formatter */
|
|
$formatter = TestingAccessWrapper::newFromObject( new AnchorFormatter(
|
|
$this->createMock( ReferenceMessageLocalizer::class ) ) );
|
|
$normalized = $formatter->normalizeKey( $key );
|
|
$encoded = Sanitizer::safeEncodeAttribute( Sanitizer::escapeIdForLink( $normalized ) );
|
|
$this->assertSame( $expected, $encoded );
|
|
}
|
|
|
|
public static function provideKeyNormalizations() {
|
|
return [
|
|
[ 'a b', 'a_b' ],
|
|
[ 'a __ b', 'a_b' ],
|
|
[ ':', ':' ],
|
|
[ "\t\n", '_' ],
|
|
[ "'", ''' ],
|
|
[ "''", '''' ],
|
|
[ '"%&/<>?[]{|}', '"%&/<>?[]{|}' ],
|
|
[ 'ISBN', 'ISBN' ],
|
|
|
|
[ 'nature%20phylo', 'nature%2520phylo' ],
|
|
[ 'Mininova%2E26%2E11%2E2009', 'Mininova%252E26%252E11%252E2009' ],
|
|
[ '%c8%98tiri_2019', '%25c8%2598tiri_2019' ],
|
|
[ 'play%21', 'play%2521' ],
|
|
[ 'Terry+O%26rsquo%3BN…</ref', 'Terry+O%2526rsquo%253BN…</ref' ],
|
|
[ '9 pm', '9&nbsp;pm' ],
|
|
[ 'n%25%32%30n', 'n%2525%2532%2530n' ],
|
|
[ 'a_ %20a', 'a_%2520a' ],
|
|
];
|
|
}
|
|
|
|
}
|