use MediaWikiCoversValidator;
use PHPUnit4And6Compat;
+ const NAME = 'test.blobstore';
+
protected function setUp() {
parent::setUp();
// MediaWiki's test wrapper sets $wgMainWANCache to CACHE_NONE.
}
public function testBlobCreation() {
- $module = $this->makeModule( [ 'mainpage' ] );
- $rl = new ResourceLoader();
- $rl->register( $module->getName(), $module );
+ $rl = new EmptyResourceLoader();
+ $rl->register( self::NAME, [
+ 'factory' => function () {
+ return $this->makeModule( [ 'mainpage' ] );
+ }
+ ] );
$blobStore = $this->makeBlobStore( null, $rl );
- $blob = $blobStore->getBlob( $module, 'en' );
+ $blob = $blobStore->getBlob( $rl->getModule( self::NAME ), 'en' );
$this->assertEquals( '{"mainpage":"Main Page"}', $blob, 'Generated blob' );
}
+ public function testBlobCreation_empty() {
+ $module = $this->makeModule( [] );
+ $rl = new EmptyResourceLoader();
+
+ $blobStore = $this->makeBlobStore( null, $rl );
+ $blob = $blobStore->getBlob( $module, 'en' );
+
+ $this->assertEquals( '{}', $blob, 'Generated blob' );
+ }
+
public function testBlobCreation_unknownMessage() {
- $module = $this->makeModule( [ 'i-dont-exist' ] );
- $rl = new ResourceLoader();
- $rl->register( $module->getName(), $module );
+ $module = $this->makeModule( [ 'i-dont-exist', 'mainpage', 'i-dont-exist2' ] );
+ $rl = new EmptyResourceLoader();
$blobStore = $this->makeBlobStore( null, $rl );
- // Generating a blob should succeed without errors,
- // even if a message is unknown.
+ // Generating a blob should continue without errors,
+ // with keys of unknown messages excluded from the blob.
$blob = $blobStore->getBlob( $module, 'en' );
- $this->assertEquals( '{"i-dont-exist":"\u29fci-dont-exist\u29fd"}', $blob, 'Generated blob' );
+ $this->assertEquals( '{"mainpage":"Main Page"}', $blob, 'Generated blob' );
}
public function testMessageCachingAndPurging() {
- $module = $this->makeModule( [ 'example' ] );
- $rl = new ResourceLoader();
- $rl->register( $module->getName(), $module );
+ $rl = new EmptyResourceLoader();
+ // Register it so that MessageBlobStore::updateMessage can
+ // discover it from the registry as a module that uses this message.
+ $rl->register( self::NAME, [
+ 'factory' => function () {
+ return $this->makeModule( [ 'example' ] );
+ }
+ ] );
+ $module = $rl->getModule( self::NAME );
$blobStore = $this->makeBlobStore( [ 'fetchMessage' ], $rl );
// Advance this new WANObjectCache instance to a normal state,
public function testPurgeEverything() {
$module = $this->makeModule( [ 'example' ] );
- $rl = new ResourceLoader();
- $rl->register( $module->getName(), $module );
+ $rl = new EmptyResourceLoader();
$blobStore = $this->makeBlobStore( [ 'fetchMessage' ], $rl );
// Advance this new WANObjectCache instance to a normal state.
$blobStore->getBlob( $module, 'en' );
public function testValidateAgainstModuleRegistry() {
// Arrange version 1 of a module
$module = $this->makeModule( [ 'foo' ] );
- $rl = new ResourceLoader();
- $rl->register( $module->getName(), $module );
+ $rl = new EmptyResourceLoader();
$blobStore = $this->makeBlobStore( [ 'fetchMessage' ], $rl );
$blobStore->expects( $this->once() )
->method( 'fetchMessage' )
// must always match the set of message keys required by the module.
// We do not receive purges for this because no messages were changed.
$module = $this->makeModule( [ 'foo', 'bar' ] );
- $rl = new ResourceLoader();
- $rl->register( $module->getName(), $module );
+ $rl = new EmptyResourceLoader();
$blobStore = $this->makeBlobStore( [ 'fetchMessage' ], $rl );
$blobStore->expects( $this->exactly( 2 ) )
->method( 'fetchMessage' )
private function makeModule( array $messages ) {
$module = new ResourceLoaderTestModule( [ 'messages' => $messages ] );
- $module->setName( 'test.blobstore' );
+ $module->setName( self::NAME );
return $module;
}
}