PHPUnit tests that are not based on MediaWikiIntegrationTestCase must not access the global service container. This patch fixes two instances: * GlobalIdGeneratorTest was tsting the getTimestampFromUUIDv1 via the legacy static method in UIDGenerator. Changed to test the GlobalIdGenerator method directly. Tests for the deprecated static methods should be separate, if needed at all. * DerivativeResourceLoaderContextTest does not reside under the "unit" directory for strict unit tests, but was not based on MediaWikiIntegrationTestCase, even though ResourceLoader logic heavily relies on the global service container instance. Fixed by deriving the test class from MediaWikiIntegrationTestCase. Change-Id: I40b8364edc5bd88d60e62b0cd0fa51c6ae9d2298
153 lines
5.1 KiB
PHP
153 lines
5.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group ResourceLoader
|
|
* @covers DerivativeResourceLoaderContext
|
|
*/
|
|
class DerivativeResourceLoaderContextTest extends MediaWikiIntegrationTestCase {
|
|
|
|
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( ResourceLoaderTestCase::getMinimalConfig() ),
|
|
$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' );
|
|
$this->assertSame( $derived->getDirection(), 'ltr', '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 testChangeUserObj() {
|
|
$user = $this->createMock( User::class );
|
|
$parent = $this->createMock( ResourceLoaderContext::class );
|
|
$parent
|
|
->expects( $this->once() )
|
|
->method( 'getUserObj' )
|
|
->willReturn( $user );
|
|
|
|
$derived = new DerivativeResourceLoaderContext( $parent );
|
|
$this->assertSame( $derived->getUserObj(), $user, 'inherit from parent' );
|
|
|
|
$derived->setUser( null );
|
|
$this->assertNotSame( $derived->getUserObj(), $user, 'different' );
|
|
}
|
|
|
|
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() );
|
|
}
|
|
}
|