Make the methods more descriptive of the stories and use cases they cover, and less method-oriented given they don't only just test a getter or setter anyway (and doing so is arguably not useful). Also fold the "testGetInherited" case into the specific ones, add additional assertions for inheritence that was previously not tested (specifically, for getVersion and getRaw). Change-Id: I01c72112e517e66cea5ecf9e2ab53b9039fb99bb
134 lines
4.5 KiB
PHP
134 lines
4.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group ResourceLoader
|
|
* @covers DerivativeResourceLoaderContext
|
|
*/
|
|
class DerivativeResourceLoaderContextTest extends PHPUnit\Framework\TestCase {
|
|
|
|
use MediaWikiCoversValidator;
|
|
|
|
protected static function makeContext() {
|
|
$request = new FauxRequest( [
|
|
'lang' => 'qqx',
|
|
'modules' => 'test.default',
|
|
'only' => 'scripts',
|
|
'skin' => 'fallback',
|
|
'target' => 'test',
|
|
] );
|
|
return new ResourceLoaderContext( new ResourceLoader(), $request );
|
|
}
|
|
|
|
public function testChangeModules() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getModules(), [ 'test.default' ], 'inherit from parent' );
|
|
|
|
$derived->setModules( [ 'test.override' ] );
|
|
$this->assertSame( $derived->getModules(), [ 'test.override' ] );
|
|
}
|
|
|
|
public function testChangeLanguageAndDirection() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getLanguage(), 'qqx', 'inherit from parent' );
|
|
|
|
$derived->setLanguage( 'nl' );
|
|
$this->assertSame( $derived->getLanguage(), 'nl' );
|
|
$this->assertSame( $derived->getDirection(), 'ltr' );
|
|
|
|
// Changing the language must clear cache of computed direction
|
|
$derived->setLanguage( 'he' );
|
|
$this->assertSame( $derived->getDirection(), 'rtl' );
|
|
$this->assertSame( $derived->getLanguage(), 'he' );
|
|
|
|
// Overriding the direction explicitly is allowed
|
|
$derived->setDirection( 'ltr' );
|
|
$this->assertSame( $derived->getDirection(), 'ltr' );
|
|
$this->assertSame( $derived->getLanguage(), 'he' );
|
|
}
|
|
|
|
public function testChangeSkin() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getSkin(), 'fallback', 'inherit from parent' );
|
|
|
|
$derived->setSkin( 'myskin' );
|
|
$this->assertSame( $derived->getSkin(), 'myskin' );
|
|
}
|
|
|
|
public function testChangeUser() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getUser(), null, 'inherit from parent' );
|
|
|
|
$derived->setUser( 'MyUser' );
|
|
$this->assertSame( $derived->getUser(), 'MyUser' );
|
|
}
|
|
|
|
public function testChangeDebug() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getDebug(), false, 'inherit from parent' );
|
|
|
|
$derived->setDebug( true );
|
|
$this->assertSame( $derived->getDebug(), true );
|
|
}
|
|
|
|
public function testChangeOnly() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getOnly(), 'scripts', 'inherit from parent' );
|
|
|
|
$derived->setOnly( 'styles' );
|
|
$this->assertSame( $derived->getOnly(), 'styles' );
|
|
|
|
$derived->setOnly( null );
|
|
$this->assertSame( $derived->getOnly(), null );
|
|
}
|
|
|
|
public function testChangeVersion() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getVersion(), null );
|
|
|
|
$derived->setVersion( 'hw1' );
|
|
$this->assertSame( $derived->getVersion(), 'hw1' );
|
|
}
|
|
|
|
public function testChangeRaw() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getRaw(), false, 'inherit from parent' );
|
|
|
|
$derived->setRaw( true );
|
|
$this->assertSame( $derived->getRaw(), true );
|
|
}
|
|
|
|
public function testChangeHash() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertSame( $derived->getHash(), 'qqx|fallback|||scripts|||||', 'inherit' );
|
|
|
|
$derived->setLanguage( 'nl' );
|
|
$derived->setUser( 'Example' );
|
|
// Assert that subclass is able to clear parent class "hash" member
|
|
$this->assertSame( $derived->getHash(), 'nl|fallback||Example|scripts|||||' );
|
|
}
|
|
|
|
public function testChangeContentOverrides() {
|
|
$derived = new DerivativeResourceLoaderContext( self::makeContext() );
|
|
$this->assertNull( $derived->getContentOverrideCallback(), 'default' );
|
|
|
|
$override = function ( Title $t ) {
|
|
return null;
|
|
};
|
|
$derived->setContentOverrideCallback( $override );
|
|
$this->assertSame( $override, $derived->getContentOverrideCallback(), 'changed' );
|
|
|
|
$derived2 = new DerivativeResourceLoaderContext( $derived );
|
|
$this->assertSame(
|
|
$override,
|
|
$derived2->getContentOverrideCallback(),
|
|
'change via a second derivative layer'
|
|
);
|
|
}
|
|
|
|
public function testImmutableAccessors() {
|
|
$context = self::makeContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
$this->assertSame( $derived->getRequest(), $context->getRequest() );
|
|
$this->assertSame( $derived->getResourceLoader(), $context->getResourceLoader() );
|
|
}
|
|
}
|