wiki.techinc.nl/tests/phpunit/includes/resourceloader/ResourceLoaderContextTest.php
Timo Tijhof fa05976f5f resourceloader: Remove needless MW-specific fallback
This is never used by the mw.loader client code. For any
manually crafted requests or fringe usage where the load.php
might be used to fetch some raw JS code that doesn't vary by
language or skin, proceed with qqx/fallback.

In the future load.php might deny these requests and then we
could make this a constructor parameter to ResourceLoaderContext.

Bug: T32956
Change-Id: I4e4ee758cd22278cea9592d4745b4f7fc00e0add
2019-04-15 17:46:41 +00:00

118 lines
4.1 KiB
PHP

<?php
/**
* See also:
* - ResourceLoaderImageModuleTest::testContext
*
* @group ResourceLoader
* @covers ResourceLoaderContext
*/
class ResourceLoaderContextTest extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
protected static function getResourceLoader() {
return new EmptyResourceLoader( new HashConfig( [
'ResourceLoaderDebug' => false,
'LoadScript' => '/w/load.php',
] ) );
}
public function testEmpty() {
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [] ) );
// Request parameters
$this->assertEquals( [], $ctx->getModules() );
$this->assertEquals( 'qqx', $ctx->getLanguage() );
$this->assertEquals( false, $ctx->getDebug() );
$this->assertEquals( null, $ctx->getOnly() );
$this->assertEquals( 'fallback', $ctx->getSkin() );
$this->assertEquals( null, $ctx->getUser() );
$this->assertNull( $ctx->getContentOverrideCallback() );
// Misc
$this->assertEquals( 'ltr', $ctx->getDirection() );
$this->assertEquals( 'qqx|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() );
}
public function testMsg() {
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [
'lang' => 'en'
] ) );
$msg = $ctx->msg( 'mainpage' );
$this->assertInstanceOf( Message::class, $msg );
$this->assertSame( 'Main Page', $msg->useDatabase( false )->plain() );
}
}