* @since 1.24
*/
class DerivativeResourceLoaderContext extends ResourceLoaderContext {
+ const INHERIT_VALUE = -1;
/**
* @var ResourceLoaderContext
*/
private $context;
- protected $modules;
- protected $language;
- protected $direction;
- protected $skin;
- protected $user;
- protected $debug;
- protected $only;
- protected $version;
- protected $hash;
- protected $raw;
+
+ protected $modules = self::INHERIT_VALUE;
+ protected $language = self::INHERIT_VALUE;
+ protected $direction = self::INHERIT_VALUE;
+ protected $skin = self::INHERIT_VALUE;
+ protected $user = self::INHERIT_VALUE;
+ protected $debug = self::INHERIT_VALUE;
+ protected $only = self::INHERIT_VALUE;
+ protected $version = self::INHERIT_VALUE;
+ protected $raw = self::INHERIT_VALUE;
public function __construct( ResourceLoaderContext $context ) {
$this->context = $context;
}
public function getModules() {
- if ( !is_null( $this->modules ) ) {
- return $this->modules;
- } else {
+ if ( $this->modules === self::INHERIT_VALUE ) {
return $this->context->getModules();
}
+ return $this->modules;
}
/**
}
public function getLanguage() {
- if ( !is_null( $this->language ) ) {
- return $this->language;
- } else {
+ if ( $this->language === self::INHERIT_VALUE ) {
return $this->context->getLanguage();
}
+ return $this->language;
}
/**
*/
public function setLanguage( $language ) {
$this->language = $language;
- $this->direction = null; // Invalidate direction since it might be based on language
+ // Invalidate direction since it is based on language
+ $this->direction = self::INHERIT_VALUE;
$this->hash = null;
}
public function getDirection() {
- if ( !is_null( $this->direction ) ) {
- return $this->direction;
- } else {
+ if ( $this->direction === self::INHERIT_VALUE ) {
return $this->context->getDirection();
}
+ return $this->direction;
}
/**
}
public function getSkin() {
- if ( !is_null( $this->skin ) ) {
- return $this->skin;
- } else {
+ if ( $this->skin === self::INHERIT_VALUE ) {
return $this->context->getSkin();
}
+ return $this->skin;
}
/**
}
public function getUser() {
- if ( !is_null( $this->user ) ) {
- return $this->user;
- } else {
+ if ( $this->user === self::INHERIT_VALUE ) {
return $this->context->getUser();
}
+ return $this->user;
}
/**
}
public function getDebug() {
- if ( !is_null( $this->debug ) ) {
- return $this->debug;
- } else {
+ if ( $this->debug === self::INHERIT_VALUE ) {
return $this->context->getDebug();
}
+ return $this->debug;
}
/**
}
public function getOnly() {
- if ( !is_null( $this->only ) ) {
- return $this->only;
- } else {
+ if ( $this->only === self::INHERIT_VALUE ) {
return $this->context->getOnly();
}
+ return $this->only;
}
/**
- * @param string $only
+ * @param string|null $only
*/
public function setOnly( $only ) {
$this->only = $only;
}
public function getVersion() {
- if ( !is_null( $this->version ) ) {
- return $this->version;
- } else {
+ if ( $this->version === self::INHERIT_VALUE ) {
return $this->context->getVersion();
}
+ return $this->version;
}
/**
- * @param string $version
+ * @param string|null $version
*/
public function setVersion( $version ) {
$this->version = $version;
}
public function getRaw() {
- if ( !is_null( $this->raw ) ) {
- return $this->raw;
- } else {
+ if ( $this->raw === self::INHERIT_VALUE ) {
return $this->context->getRaw();
}
+ return $this->raw;
}
/**
$this->resourceLoader = $resourceLoader;
$this->request = $request;
- // Interpret request
// List of modules
$modules = $request->getVal( 'modules' );
$this->modules = $modules ? self::expandModuleNames( $modules ) : array();
+
+
// Various parameters
- $this->skin = $request->getVal( 'skin' );
$this->user = $request->getVal( 'user' );
$this->debug = $request->getFuzzyBool(
- 'debug', $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
+ 'debug',
+ $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
);
- $this->only = $request->getVal( 'only' );
- $this->version = $request->getVal( 'version' );
+ $this->only = $request->getVal( 'only', null );
+ $this->version = $request->getVal( 'version', null );
$this->raw = $request->getFuzzyBool( 'raw' );
+
// Image requests
$this->image = $request->getVal( 'image' );
$this->variant = $request->getVal( 'variant' );
$this->format = $request->getVal( 'format' );
+ $this->skin = $request->getVal( 'skin' );
$skinnames = Skin::getSkinNames();
// If no skin is specified, or we don't recognize the skin, use the default skin
if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
}
/**
- * @return string|null
+ * @return string
*/
public function getSkin() {
return $this->skin;
* @return bool
*/
public function shouldIncludeScripts() {
- return is_null( $this->getOnly() ) || $this->getOnly() === 'scripts';
+ return $this->getOnly() === null || $this->getOnly() === 'scripts';
}
/**
* @return bool
*/
public function shouldIncludeStyles() {
- return is_null( $this->getOnly() ) || $this->getOnly() === 'styles';
+ return $this->getOnly() === null || $this->getOnly() === 'styles';
}
/**
* @return bool
*/
public function shouldIncludeMessages() {
- return is_null( $this->getOnly() );
+ return $this->getOnly() === null;
}
/**
--- /dev/null
+<?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' );
+ }
+
+ 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|' );
+ }
+
+}