These were deprecated in 1.34, but let's put in some hard deprecation warnings for 1.35 since this class is certainly going to be refactored in the future to allow both the legacy parser and Parsoid to extend Parser as a base class. Access via the ParserFactory will be fine, but cut down on the number of different ways Parsers can be constructed and initialized. Code search: https://codesearch.wmflabs.org/deployed/?q=new%20Parser%5C%28&i=nope&files=&repos= https://codesearch.wmflabs.org/deployed/?q=getMockBuilder%5C%28%20Parser%3A%3A&i=nope&files=&repos= https://codesearch.wmflabs.org/deployed/?q=new%20Parser%3B&i=nope&files=&repos= Bug: T236811 Depends-On: Ib3be450c55e1793b027d9b4dae692ba5891b0328 Depends-On: I9d16513f8bd449a43b0a0afbd73651a5c0afa588 Depends-On: I74efda708470efeb82f8f80346ec1ee7e9fd8f2b Depends-On: I777475d0ab0144e53240173f501d6c8da35d33fb Change-Id: If36283ec0b78b188b61f658639105d1ed7653e0a
101 lines
2.9 KiB
PHP
101 lines
2.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @covers Parser::__construct
|
|
*/
|
|
class ParserTest extends MediaWikiTestCase {
|
|
public function provideConstructorArguments() {
|
|
// Create a mock Config object that will satisfy ServiceOptions::__construct
|
|
$mockConfig = $this->createMock( 'Config' );
|
|
$mockConfig->method( 'has' )->willReturn( true );
|
|
$mockConfig->method( 'get' )->willReturn( 'I like otters.' );
|
|
|
|
$newArgs = [
|
|
$this->createMock( 'MediaWiki\Config\ServiceOptions' ),
|
|
$this->createMock( 'MagicWordFactory' ),
|
|
$this->createMock( 'Language' ),
|
|
$this->createMock( 'ParserFactory' ),
|
|
'a snail can sleep for three years',
|
|
$this->createMock( 'MediaWiki\Special\SpecialPageFactory' ),
|
|
$this->createMock( 'MediaWiki\Linker\LinkRendererFactory' ),
|
|
$this->createMock( 'NamespaceInfo' )
|
|
];
|
|
|
|
$oldArgs = [
|
|
[],
|
|
$this->createMock( 'MagicWordFactory' ),
|
|
$this->createMock( 'Language' ),
|
|
$this->createMock( 'ParserFactory' ),
|
|
'a snail can sleep for three years',
|
|
$this->createMock( 'MediaWiki\Special\SpecialPageFactory' )
|
|
];
|
|
|
|
yield 'current_args_without_namespace_info' => [
|
|
$newArgs,
|
|
];
|
|
|
|
yield 'backward_compatible_args_minimal' => [
|
|
array_merge( $oldArgs ),
|
|
];
|
|
|
|
yield 'backward_compatible_args_with_config' => [
|
|
array_merge( $oldArgs, [ $mockConfig ] ),
|
|
];
|
|
|
|
yield 'backward_compatible_args_with_link_renderer' => [
|
|
array_merge( $oldArgs, [
|
|
$mockConfig,
|
|
$this->createMock( 'MediaWiki\Linker\LinkRendererFactory' )
|
|
] ),
|
|
];
|
|
|
|
yield 'backward_compatible_args_with_ns_info' => [
|
|
array_merge( $oldArgs, [
|
|
$mockConfig,
|
|
$this->createMock( 'MediaWiki\Linker\LinkRendererFactory' ),
|
|
$this->createMock( 'NamespaceInfo' )
|
|
] ),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideConstructorArguments
|
|
* @covers Parser::__construct
|
|
*/
|
|
public function testBackwardsCompatibleConstructorArguments( $args ) {
|
|
$this->hideDeprecated( 'Parser::__construct' );
|
|
$this->hideDeprecated( 'old calling convention for Parser::__construct' );
|
|
$parser = new Parser( ...$args );
|
|
|
|
$refObject = new ReflectionObject( $parser );
|
|
|
|
// If testing backwards compatibility, test service options separately
|
|
if ( is_array( $args[0] ) ) {
|
|
$svcOptionsProp = $refObject->getProperty( 'svcOptions' );
|
|
$svcOptionsProp->setAccessible( true );
|
|
$this->assertInstanceOf(
|
|
MediaWiki\Config\ServiceOptions::class,
|
|
$svcOptionsProp->getValue( $parser )
|
|
);
|
|
unset( $args[0] );
|
|
|
|
// If a Config is passed, the fact that we were able to create a ServiceOptions
|
|
// instance without error from it proves that this argument works.
|
|
if ( isset( $args[6] ) ) {
|
|
unset( $args[6] );
|
|
}
|
|
}
|
|
|
|
foreach ( $refObject->getProperties() as $prop ) {
|
|
$prop->setAccessible( true );
|
|
foreach ( $args as $idx => $mockTest ) {
|
|
if ( $prop->getValue( $parser ) === $mockTest ) {
|
|
unset( $args[$idx] );
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->assertSame( [], $args, 'Not all arguments to the Parser constructor were ' .
|
|
'found on the Parser object' );
|
|
}
|
|
}
|