From 1e301b15501c1482c1355183e024bf2b8e991bb9 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Sat, 28 Jun 2014 13:40:22 -0700 Subject: [PATCH] Add tests for OutputPage::makeResourceLoaderLink() Change-Id: I22dc7fd1003f07ab0be61bb4645b45a9db9f2548 --- tests/phpunit/ResourceLoaderTestCase.php | 10 +++ tests/phpunit/includes/OutputPageTest.php | 84 +++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/tests/phpunit/ResourceLoaderTestCase.php b/tests/phpunit/ResourceLoaderTestCase.php index daf4bd9c77..f316f56317 100644 --- a/tests/phpunit/ResourceLoaderTestCase.php +++ b/tests/phpunit/ResourceLoaderTestCase.php @@ -43,6 +43,8 @@ class ResourceLoaderTestModule extends ResourceLoaderModule { protected $dependencies = array(); protected $group = null; protected $source = 'local'; + protected $script = ''; + protected $styles = ''; protected $skipFunction = null; protected $targets = array( 'test' ); @@ -52,6 +54,14 @@ class ResourceLoaderTestModule extends ResourceLoaderModule { } } + public function getScript( ResourceLoaderContext $context ) { + return $this->script; + } + + public function getStyles( ResourceLoaderContext $context ) { + return array( '' => $this->styles ); + } + public function getDependencies() { return $this->dependencies; } diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php index 385cee5c32..542b3d6630 100644 --- a/tests/phpunit/includes/OutputPageTest.php +++ b/tests/phpunit/includes/OutputPageTest.php @@ -135,4 +135,88 @@ class OutputPageTest extends MediaWikiTestCase { 'message' => 'On request with handheld querystring and media is screen, returns null' ) ); } + + public static function provideMakeResourceLoaderLink() { + return array( + // Load module script only + array( + array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ), + ' +' + ), + // Load module styles only + // This also tests the order the modules are put into the url + array( + array( array( 'test.baz', 'test.foo', 'test.bar' ), ResourceLoaderModule::TYPE_STYLES ), + ' +' + ), + // Load private module (combined) + array( + array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ), + ' +' + ), + // Load module script with with ESI + array( + array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS, true ), + ' +' + ), + // Load module styles with with ESI + array( + array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ), + ' +', + ), + ); + } + + + /** + * @dataProvider provideMakeResourceLoaderLink + * @covers OutputPage::makeResourceLoaderLink + */ + public function testMakeResourceLoaderLink( $args, $expectedHtml) { + $this->setMwGlobals( array( + 'wgResourceLoaderUseESI' => true, + 'wgLoadScript' => 'http://127.0.0.1:8080/w/load.php', + // Affects whether CDATA is inserted + 'wgWellFormedXml' => false, + // Cache key is based on database name, and affects output; + // this test should not touch the database anyways. + 'wgDBname' => 'wiki', + 'wgDBprefix' => '', + ) ); + $class = new ReflectionClass( 'OutputPage' ); + $method = $class->getMethod( 'makeResourceLoaderLink' ); + $method->setAccessible( true ); + $ctx = new RequestContext(); + $out = new OutputPage( $ctx ); + $rl = $out->getResourceLoader(); + $rl->register( array( + 'test.foo' => new ResourceLoaderTestModule(array( + 'script' => 'mw.test.foo( { a: true } );', + 'styles' => '.mw-test-foo { content: "style"; }', + )), + 'test.bar' => new ResourceLoaderTestModule(array( + 'script' => 'mw.test.bar( { a: true } );', + 'styles' => '.mw-test-bar { content: "style"; }', + )), + 'test.baz' => new ResourceLoaderTestModule(array( + 'script' => 'mw.test.baz( { a: true } );', + 'styles' => '.mw-test-baz { content: "style"; }', + )), + 'test.quux' => new ResourceLoaderTestModule(array( + 'script' => 'mw.test.baz( { token: 123 } );', + 'styles' => '/* pref-animate=off */ .mw-icon { transition: none; }', + 'group' => 'private', + )), + ) ); + $links = $method->invokeArgs( $out, $args ); + $this->assertEquals( $expectedHtml, $links['html'] ); + } } -- 2.20.1