This makes it easier for subclasses to use ResourceLoaderWikiModule. Currently many subclasses of this simply need to override the getPages() method. UserModule and SiteModule keep their getPages override due to the set of pages being dependent on context. Change-Id: I388531398671afacfec36c6c5746d72267b5bdac
149 lines
3.9 KiB
PHP
149 lines
3.9 KiB
PHP
<?php
|
|
|
|
class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
|
|
|
|
/**
|
|
* @covers ResourceLoaderWikiModule::__construct
|
|
* @dataProvider provideConstructor
|
|
*/
|
|
public function testConstructor( $params ) {
|
|
$module = new ResourceLoaderWikiModule( $params );
|
|
$this->assertInstanceOf( 'ResourceLoaderWikiModule', $module );
|
|
}
|
|
|
|
public static function provideConstructor() {
|
|
return array(
|
|
// Nothing
|
|
array( null ),
|
|
array( array() ),
|
|
// Unrecognized settings
|
|
array( array( 'foo' => 'baz' ) ),
|
|
// Real settings
|
|
array( array( 'scripts' => array( 'MediaWiki:Common.js' ) ) ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideGetPages
|
|
* @covers ResourceLoaderWikiModule::getPages
|
|
*/
|
|
public function testGetPages( $params, Config $config, $expected ) {
|
|
$module = new ResourceLoaderWikiModule( $params );
|
|
$module->setConfig( $config );
|
|
|
|
// Use getDefinitionSummary because getPages is protected
|
|
$summary = $module->getDefinitionSummary( ResourceLoaderContext::newDummyContext() );
|
|
$this->assertEquals(
|
|
$expected,
|
|
$summary['pages']
|
|
);
|
|
}
|
|
|
|
public static function provideGetPages() {
|
|
$settings = array(
|
|
'UseSiteJs' => true,
|
|
'UseSiteCss' => true,
|
|
);
|
|
|
|
$params = array(
|
|
'styles' => array( 'MediaWiki:Common.css' ),
|
|
'scripts' => array( 'MediaWiki:Common.js' ),
|
|
);
|
|
|
|
return array(
|
|
array( array(), new HashConfig( $settings ), array() ),
|
|
array( $params, new HashConfig( $settings ), array(
|
|
'MediaWiki:Common.js' => array( 'type' => 'script' ),
|
|
'MediaWiki:Common.css' => array( 'type' => 'style' )
|
|
) ),
|
|
array( $params, new HashConfig( array( 'UseSiteCss' => false ) + $settings ), array(
|
|
'MediaWiki:Common.js' => array( 'type' => 'script' ),
|
|
) ),
|
|
array( $params, new HashConfig( array( 'UseSiteJs' => false ) + $settings ), array(
|
|
'MediaWiki:Common.css' => array( 'type' => 'style' ),
|
|
) ),
|
|
array( $params, new HashConfig( array( 'UseSiteJs' => false, 'UseSiteCss' => false ) ), array() ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers ResourceLoaderWikiModule::getGroup
|
|
* @dataProvider provideGetGroup
|
|
*/
|
|
public function testGetGroup( $params, $expected ) {
|
|
$module = new ResourceLoaderWikiModule( $params );
|
|
$this->assertEquals( $expected, $module->getGroup() );
|
|
}
|
|
|
|
public static function provideGetGroup() {
|
|
return array(
|
|
// No group specified
|
|
array( array(), null ),
|
|
// A random group
|
|
array( array( 'group' => 'foobar' ), 'foobar' ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers ResourceLoaderWikiModule::isKnownEmpty
|
|
* @dataProvider provideIsKnownEmpty
|
|
*/
|
|
public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
|
|
$module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
|
|
->setMethods( array( 'getTitleInfo', 'getGroup' ) )
|
|
->getMock();
|
|
$module->expects( $this->any() )
|
|
->method( 'getTitleInfo' )
|
|
->will( $this->returnValue( $titleInfo ) );
|
|
$module->expects( $this->any() )
|
|
->method( 'getGroup' )
|
|
->will( $this->returnValue( $group ) );
|
|
$context = $this->getMockBuilder( 'ResourceLoaderContext' )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->assertEquals( $expected, $module->isKnownEmpty( $context ) );
|
|
}
|
|
|
|
public static function provideIsKnownEmpty() {
|
|
return array(
|
|
// No valid pages
|
|
array( array(), 'test1', true ),
|
|
// 'site' module with a non-empty page
|
|
array(
|
|
array(
|
|
'MediaWiki:Common.js' => array(
|
|
'timestamp' => 123456789,
|
|
'length' => 1234
|
|
)
|
|
), 'site', false,
|
|
),
|
|
// 'site' module with an empty page
|
|
array(
|
|
array(
|
|
'MediaWiki:Monobook.js' => array(
|
|
'timestamp' => 987654321,
|
|
'length' => 0,
|
|
),
|
|
), 'site', false,
|
|
),
|
|
// 'user' module with a non-empty page
|
|
array(
|
|
array(
|
|
'User:FooBar/common.js' => array(
|
|
'timestamp' => 246813579,
|
|
'length' => 25,
|
|
),
|
|
), 'user', false,
|
|
),
|
|
// 'user' module with an empty page
|
|
array(
|
|
array(
|
|
'User:FooBar/monobook.js' => array(
|
|
'timestamp' => 1357924680,
|
|
'length' => 0,
|
|
),
|
|
), 'user', true,
|
|
),
|
|
);
|
|
}
|
|
}
|