resourceloader: Create unit tests for ResourceLoaderContext
* Fix up one last use of global config vars in this class. Other places in this class already used $rl->getConfig(). This way we don't inherit all of MediaWikiTestCase. * Add unit tests covering all of ResourceLoaderContext except expandModuleNames and getImageObj (tested in better places already with the right @covers). * Increase coverage for expandModuleNames(), add missing case of when modules are not in alphabetical order. Change-Id: Id19b084d37a6c3a77b36e03509adffb6b156fee1
This commit is contained in:
parent
bb8608c98a
commit
c4e5cc2957
4 changed files with 163 additions and 4 deletions
|
|
@ -175,8 +175,7 @@ class ResourceLoaderContext {
|
|||
// Stricter version of RequestContext::sanitizeLangCode()
|
||||
if ( !Language::isValidBuiltInCode( $lang ) ) {
|
||||
wfDebug( "Invalid user language code\n" );
|
||||
global $wgLanguageCode;
|
||||
$lang = $wgLanguageCode;
|
||||
$lang = $this->getResourceLoader()->getConfig()->get( 'LanguageCode' );
|
||||
}
|
||||
$this->language = $lang;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* See also:
|
||||
* - ResourceLoaderTest::testExpandModuleNames
|
||||
* - ResourceLoaderImageModuleTest::testContext
|
||||
*
|
||||
* @group Cache
|
||||
* @covers ResourceLoaderContext
|
||||
*/
|
||||
class ResourceLoaderContextTest extends PHPUnit_Framework_TestCase {
|
||||
protected static function getResourceLoader() {
|
||||
return new EmptyResourceLoader( new HashConfig( [
|
||||
'ResourceLoaderDebug' => false,
|
||||
'DefaultSkin' => 'fallback',
|
||||
'LanguageCode' => 'nl',
|
||||
] ) );
|
||||
}
|
||||
|
||||
public function testEmpty() {
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [] ) );
|
||||
|
||||
// Request parameters
|
||||
$this->assertEquals( [], $ctx->getModules() );
|
||||
$this->assertEquals( 'nl', $ctx->getLanguage() );
|
||||
$this->assertEquals( false, $ctx->getDebug() );
|
||||
$this->assertEquals( null, $ctx->getOnly() );
|
||||
$this->assertEquals( 'fallback', $ctx->getSkin() );
|
||||
$this->assertEquals( null, $ctx->getUser() );
|
||||
|
||||
// Misc
|
||||
$this->assertEquals( 'ltr', $ctx->getDirection() );
|
||||
$this->assertEquals( 'nl|fallback||||||||', $ctx->getHash() );
|
||||
$this->assertInstanceOf( User::class, $ctx->getUserObj() );
|
||||
}
|
||||
|
||||
public function testDummy() {
|
||||
$this->assertInstanceOf(
|
||||
ResourceLoaderContext::class,
|
||||
ResourceLoaderContext::newDummyContext()
|
||||
);
|
||||
}
|
||||
|
||||
public function testAccessors() {
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [] ) );
|
||||
$this->assertInstanceOf( WebRequest::class, $ctx->getRequest() );
|
||||
$this->assertInstanceOf( \Psr\Log\LoggerInterface::class, $ctx->getLogger() );
|
||||
}
|
||||
|
||||
public function testTypicalRequest() {
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [
|
||||
'debug' => 'false',
|
||||
'lang' => 'zh',
|
||||
'modules' => 'foo|foo.quux,baz,bar|baz.quux',
|
||||
'only' => 'styles',
|
||||
'skin' => 'fallback',
|
||||
] ) );
|
||||
|
||||
// Request parameters
|
||||
$this->assertEquals(
|
||||
$ctx->getModules(),
|
||||
[ 'foo', 'foo.quux', 'foo.baz', 'foo.bar', 'baz.quux' ]
|
||||
);
|
||||
$this->assertEquals( false, $ctx->getDebug() );
|
||||
$this->assertEquals( 'zh', $ctx->getLanguage() );
|
||||
$this->assertEquals( 'styles', $ctx->getOnly() );
|
||||
$this->assertEquals( 'fallback', $ctx->getSkin() );
|
||||
$this->assertEquals( null, $ctx->getUser() );
|
||||
|
||||
// Misc
|
||||
$this->assertEquals( 'ltr', $ctx->getDirection() );
|
||||
$this->assertEquals( 'zh|fallback|||styles|||||', $ctx->getHash() );
|
||||
}
|
||||
|
||||
public function testShouldInclude() {
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [] ) );
|
||||
$this->assertTrue( $ctx->shouldIncludeScripts(), 'Scripts in combined' );
|
||||
$this->assertTrue( $ctx->shouldIncludeStyles(), 'Styles in combined' );
|
||||
$this->assertTrue( $ctx->shouldIncludeMessages(), 'Messages in combined' );
|
||||
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [
|
||||
'only' => 'styles'
|
||||
] ) );
|
||||
$this->assertFalse( $ctx->shouldIncludeScripts(), 'Scripts not in styles-only' );
|
||||
$this->assertTrue( $ctx->shouldIncludeStyles(), 'Styles in styles-only' );
|
||||
$this->assertFalse( $ctx->shouldIncludeMessages(), 'Messages not in styles-only' );
|
||||
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [
|
||||
'only' => 'scripts'
|
||||
] ) );
|
||||
$this->assertTrue( $ctx->shouldIncludeScripts(), 'Scripts in scripts-only' );
|
||||
$this->assertFalse( $ctx->shouldIncludeStyles(), 'Styles not in scripts-only' );
|
||||
$this->assertFalse( $ctx->shouldIncludeMessages(), 'Messages not in scripts-only' );
|
||||
}
|
||||
|
||||
public function testGetUser() {
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [] ) );
|
||||
$this->assertSame( null, $ctx->getUser() );
|
||||
$this->assertTrue( $ctx->getUserObj()->isAnon() );
|
||||
|
||||
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [
|
||||
'user' => 'Example'
|
||||
] ) );
|
||||
$this->assertSame( 'Example', $ctx->getUser() );
|
||||
$this->assertEquals( 'Example', $ctx->getUserObj()->getName() );
|
||||
}
|
||||
}
|
||||
|
|
@ -154,6 +154,49 @@ class ResourceLoaderImageModuleTest extends ResourceLoaderTestCase {
|
|||
$styles = $module->getStyles( $this->getResourceLoaderContext() );
|
||||
$this->assertEquals( $expected, $styles['all'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ResourceLoaderContext::getImageObj
|
||||
*/
|
||||
public function testContext() {
|
||||
$context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest() );
|
||||
$this->assertFalse( $context->getImageObj(), 'Missing image parameter' );
|
||||
|
||||
$context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest( [
|
||||
'image' => 'example',
|
||||
] ) );
|
||||
$this->assertFalse( $context->getImageObj(), 'Missing module parameter' );
|
||||
|
||||
$context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest( [
|
||||
'modules' => 'unknown',
|
||||
'image' => 'example',
|
||||
] ) );
|
||||
$this->assertFalse( $context->getImageObj(), 'Not an image module' );
|
||||
|
||||
$rl = new EmptyResourceLoader();
|
||||
$rl->register( 'test', [
|
||||
'class' => ResourceLoaderImageModule::class,
|
||||
'prefix' => 'test',
|
||||
'images' => [ 'example' => 'example.png' ],
|
||||
] );
|
||||
$context = new ResourceLoaderContext( $rl, new FauxRequest( [
|
||||
'modules' => 'test',
|
||||
'image' => 'unknown',
|
||||
] ) );
|
||||
$this->assertFalse( $context->getImageObj(), 'Unknown image' );
|
||||
|
||||
$rl = new EmptyResourceLoader();
|
||||
$rl->register( 'test', [
|
||||
'class' => ResourceLoaderImageModule::class,
|
||||
'prefix' => 'test',
|
||||
'images' => [ 'example' => 'example.png' ],
|
||||
] );
|
||||
$context = new ResourceLoaderContext( $rl, new FauxRequest( [
|
||||
'modules' => 'test',
|
||||
'image' => 'example',
|
||||
] ) );
|
||||
$this->assertInstanceOf( ResourceLoaderImage::class, $context->getImageObj() );
|
||||
}
|
||||
}
|
||||
|
||||
class ResourceLoaderImageModuleTestable extends ResourceLoaderImageModule {
|
||||
|
|
|
|||
|
|
@ -163,6 +163,12 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
|
|||
[ 'single.module', 'foobar', 'foobaz' ],
|
||||
'single.module|foobar,foobaz',
|
||||
],
|
||||
[
|
||||
'Ordering',
|
||||
[ 'foo', 'foo.baz', 'baz.quux', 'foo.bar' ],
|
||||
'foo|foo.baz,bar|baz.quux',
|
||||
[ 'foo', 'foo.baz', 'foo.bar', 'baz.quux' ],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
|
|
@ -178,8 +184,12 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
|
|||
* @dataProvider providePackedModules
|
||||
* @covers ResourceLoaderContext::expandModuleNames
|
||||
*/
|
||||
public function testexpandModuleNames( $desc, $modules, $packed ) {
|
||||
$this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc );
|
||||
public function testExpandModuleNames( $desc, $modules, $packed, $unpacked = null ) {
|
||||
$this->assertEquals(
|
||||
$unpacked ?: $modules,
|
||||
ResourceLoaderContext::expandModuleNames( $packed ),
|
||||
$desc
|
||||
);
|
||||
}
|
||||
|
||||
public static function provideAddSource() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue