mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
synced 2024-11-28 08:50:07 +00:00
9d706047f3
Bug: T171581 Change-Id: I42b2d8859f2958357024cbba089715c10712f370
102 lines
3 KiB
PHP
102 lines
3 KiB
PHP
<?php
|
|
|
|
use Wikimedia\TestingAccessWrapper;
|
|
|
|
/**
|
|
* @coversDefaultClass \Cite
|
|
*/
|
|
class CiteTest extends MediaWikiTestCase {
|
|
|
|
protected function setUp() : void {
|
|
parent::setUp();
|
|
|
|
$this->setMwGlobals( [
|
|
'wgCiteBookReferencing' => true,
|
|
'wgFragmentMode' => [ 'html5' ],
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* @covers ::refArg
|
|
* @dataProvider provideRefAttributes
|
|
*/
|
|
public function testRefArg( array $attributes, array $expected ) {
|
|
/** @var Cite $cite */
|
|
$cite = TestingAccessWrapper::newFromObject( new Cite() );
|
|
$this->assertSame( $expected, $cite->refArg( $attributes ) );
|
|
}
|
|
|
|
public function provideRefAttributes() {
|
|
return [
|
|
[ [], [ null, null, false, null, null ] ],
|
|
|
|
// One attribute only
|
|
[ [ 'dir' => 'invalid' ], [ null, null, false, '', null ] ],
|
|
[ [ 'dir' => 'rtl' ], [ null, null, false, ' class="mw-cite-dir-rtl"', null ] ],
|
|
[ [ 'follow' => 'f' ], [ null, null, 'f', null, null ] ],
|
|
[ [ 'group' => 'g' ], [ null, 'g', null, null, null ] ],
|
|
[ [ 'invalid' => 'i' ], [ false, false, false, false, false ] ],
|
|
[ [ 'name' => 'n' ], [ 'n', null, null, null, null ] ],
|
|
[ [ 'name' => null ], [ false, false, false, false, false ] ],
|
|
[ [ 'extends' => 'e' ], [ null, null, null, null, 'e' ] ],
|
|
|
|
// Pairs
|
|
[ [ 'follow' => 'f', 'name' => 'n' ], [ false, false, false, false, false ] ],
|
|
[ [ 'follow' => null, 'name' => null ], [ false, false, false, false, false ] ],
|
|
[ [ 'follow' => 'f', 'extends' => 'e' ], [ false, false, false, false, false ] ],
|
|
[ [ 'group' => 'g', 'name' => 'n' ], [ 'n', 'g', null, null, null ] ],
|
|
|
|
// Combinations of 3 or more attributes
|
|
[
|
|
[ 'group' => 'g', 'name' => 'n', 'extends' => 'e', 'dir' => 'rtl' ],
|
|
[ 'n', 'g', null, ' class="mw-cite-dir-rtl"', 'e' ]
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @covers ::normalizeKey
|
|
* @dataProvider provideKeyNormalizations
|
|
*/
|
|
public function testNormalizeKey( $key, $expected ) {
|
|
/** @var Cite $cite */
|
|
$cite = TestingAccessWrapper::newFromObject( new Cite() );
|
|
$this->assertSame( $expected, $cite->normalizeKey( $key ) );
|
|
}
|
|
|
|
public function provideKeyNormalizations() {
|
|
return [
|
|
[ 'a b', 'a_b' ],
|
|
[ 'a __ b', 'a_b' ],
|
|
[ ':', ':' ],
|
|
[ "\t\n", '	 ' ],
|
|
[ "'", ''' ],
|
|
[ "''", '''' ],
|
|
[ '"%&/<>?[]{|}', '"%&/<>?[]{|}' ],
|
|
[ 'ISBN', 'ISBN' ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @covers ::ref
|
|
*/
|
|
public function testRef_pageProperty() {
|
|
$mockOutput = $this->createMock( ParserOutput::class );
|
|
$mockPPframe = $this->createMock( PPFrame::class );
|
|
$mockParser = $this->createMock( Parser::class );
|
|
$mockParser->method( 'getOutput' )
|
|
->willReturn( $mockOutput );
|
|
$mockParser->method( 'getStripState' )
|
|
->willReturn( $this->createMock( StripState::class ) );
|
|
|
|
$mockOutput->expects( $this->once() )
|
|
->method( 'setProperty' )
|
|
->with( Cite::BOOK_REF_PROPERTY, true );
|
|
|
|
$cite = new Cite();
|
|
$cite->ref( 'contentA', [ 'name' => 'a' ], $mockParser, $mockPPframe );
|
|
$cite->ref( 'contentB', [ Cite::BOOK_REF_ATTRIBUTE => 'a' ], $mockParser, $mockPPframe );
|
|
}
|
|
|
|
}
|