getDirection() isn't a simple getter value like the others. It actually is tightly coupled with getLanguage() and lazy-initialised. When calling setLanguage(), we shouldn't reset direction back to the parent class but make sure getDirection() will recompute it based on the local value. Added regression test (which fails without this patch). The parent getDirection() looks for $this->request, but the subclass doesn't assign that member in the constructor. getRequest() forwards it accordingly, so make sure getRequest() is also used internally. Change-Id: Ifec703647368c3bb58748288ed754aaaf3730e19
78 lines
2.4 KiB
PHP
78 lines
2.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group ResourceLoader
|
|
*/
|
|
class DerivativeResourceLoaderContextTest extends PHPUnit_Framework_TestCase {
|
|
|
|
protected static function getResourceLoaderContext() {
|
|
$resourceLoader = new ResourceLoader();
|
|
$request = new FauxRequest( array(
|
|
'lang' => 'zh',
|
|
'modules' => 'test.context',
|
|
'only' => 'scripts',
|
|
'skin' => 'fallback',
|
|
'target' => 'test',
|
|
) );
|
|
return new ResourceLoaderContext( $resourceLoader, $request );
|
|
}
|
|
|
|
public function testGet() {
|
|
$context = self::getResourceLoaderContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
|
|
$this->assertEquals( $derived->getLanguage(), 'zh' );
|
|
$this->assertEquals( $derived->getModules(), array( 'test.context' ) );
|
|
$this->assertEquals( $derived->getOnly(), 'scripts' );
|
|
$this->assertEquals( $derived->getSkin(), 'fallback' );
|
|
$this->assertEquals( $derived->getHash(), 'zh|ltr|fallback||||||scripts|' );
|
|
}
|
|
|
|
public function testSetLanguage() {
|
|
$context = self::getResourceLoaderContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
|
|
$derived->setLanguage( 'nl' );
|
|
$this->assertEquals( $derived->getLanguage(), 'nl' );
|
|
|
|
$derived->setLanguage( 'he' );
|
|
$this->assertEquals( $derived->getDirection(), 'rtl' );
|
|
}
|
|
|
|
public function testSetModules() {
|
|
$context = self::getResourceLoaderContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
|
|
$derived->setModules( array( 'test.override' ) );
|
|
$this->assertEquals( $derived->getModules(), array( 'test.override' ) );
|
|
}
|
|
|
|
public function testSetOnly() {
|
|
$context = self::getResourceLoaderContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
|
|
$derived->setOnly( 'styles' );
|
|
$this->assertEquals( $derived->getOnly(), 'styles' );
|
|
|
|
$derived->setOnly( null );
|
|
$this->assertEquals( $derived->getOnly(), null );
|
|
}
|
|
|
|
public function testSetSkin() {
|
|
$context = self::getResourceLoaderContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
|
|
$derived->setSkin( 'override' );
|
|
$this->assertEquals( $derived->getSkin(), 'override' );
|
|
}
|
|
|
|
public function testGetHash() {
|
|
$context = self::getResourceLoaderContext();
|
|
$derived = new DerivativeResourceLoaderContext( $context );
|
|
|
|
$derived->setLanguage( 'nl' );
|
|
// Assert that subclass is able to clear parent class "hash" member
|
|
$this->assertEquals( $derived->getHash(), 'nl|ltr|fallback||||||scripts|' );
|
|
}
|
|
|
|
}
|