wiki.techinc.nl/tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php
Timo Tijhof b4ad29cd83 resourceloader: Improve test cases for DerivativeResourceLoaderContext
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
2019-03-27 19:47:05 +00:00

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() );
}
}