mediawiki-extensions-Cite/tests/phpunit/integration/AnchorFormatterTest.php
thiemowmde 696c35f496 Change all tests to use overrideConfigValue
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
2023-12-11 12:17:15 +01:00

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", '_' ],
[ "'", '&#039;' ],
[ "''", '&#039;&#039;' ],
[ '"%&/<>?[]{|}', '&quot;%&amp;/&lt;&gt;?&#91;&#93;&#123;&#124;&#125;' ],
[ 'ISBN', '&#73;SBN' ],
[ '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…&lt;/ref' ],
[ '9&nbsp;pm', '9&amp;nbsp;pm' ],
[ 'n%25%32%30n', 'n%2525%2532%2530n' ],
[ 'a_ %20a', 'a_%2520a' ],
];
}
}