mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Gadgets
synced 2024-12-11 23:16:06 +00:00
e858bda308
GadgetRepo is an abstract class based off of the implementation in the RL2 branch. It is a singleton that provides basic methods to construct and interact with Gadget objects. The MediaWikiGadgetsDefinition class is an implementation of GadgetsRepo that parses the "MediaWiki:Gadgets-definition" page for gadget definitions. Tests were left in place to demonstrate that no functional changes have been made aside from relocation of code. Some tests should be moved to separate files in the future. Bug: T106176 Change-Id: I3e802889f6f495783f4dbac65c2a8cefa824a778
81 lines
2.8 KiB
PHP
81 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* @group Gadgets
|
|
*/
|
|
|
|
class GadgetsTest extends MediaWikiTestCase {
|
|
/**
|
|
* @param string $line
|
|
* @return Gadget
|
|
*/
|
|
private function create( $line ) {
|
|
$repo = new MediaWikiGadgetsDefinitionRepo();
|
|
$g = $repo->newFromDefinition( $line, 'misc' );
|
|
$this->assertInstanceOf( 'Gadget', $g );
|
|
|
|
return $g;
|
|
}
|
|
|
|
public function testInvalidLines() {
|
|
$repo = new MediaWikiGadgetsDefinitionRepo();
|
|
$this->assertFalse( $repo->newFromDefinition( '', 'misc' ) );
|
|
$this->assertFalse( $repo->newFromDefinition( '<foo|bar>', 'misc' ) );
|
|
}
|
|
|
|
public function testSimpleCases() {
|
|
$g = $this->create( '* foo bar| foo.css|foo.js|foo.bar' );
|
|
$this->assertEquals( 'foo_bar', $g->getName() );
|
|
$this->assertEquals( 'ext.gadget.foo_bar', $g->getModuleName() );
|
|
$this->assertEquals( array( 'Gadget-foo.js' ), $g->getScripts() );
|
|
$this->assertEquals( array( 'Gadget-foo.css' ), $g->getStyles() );
|
|
$this->assertEquals( array( 'Gadget-foo.js', 'Gadget-foo.css' ),
|
|
$g->getScriptsAndStyles() );
|
|
$this->assertEquals( array( 'Gadget-foo.js' ), $g->getLegacyScripts() );
|
|
$this->assertFalse( $g->supportsResourceLoader() );
|
|
$this->assertTrue( $g->hasModule() );
|
|
}
|
|
|
|
public function testRLtag() {
|
|
$g = $this->create( '*foo [ResourceLoader]|foo.js|foo.css' );
|
|
$this->assertEquals( 'foo', $g->getName() );
|
|
$this->assertTrue( $g->supportsResourceLoader() );
|
|
$this->assertEquals( 0, count( $g->getLegacyScripts() ) );
|
|
}
|
|
|
|
public function testDependencies() {
|
|
$g = $this->create( '* foo[ResourceLoader|dependencies=jquery.ui]|bar.js' );
|
|
$this->assertEquals( array( 'Gadget-bar.js' ), $g->getScripts() );
|
|
$this->assertTrue( $g->supportsResourceLoader() );
|
|
$this->assertEquals( array( 'jquery.ui' ), $g->getDependencies() );
|
|
}
|
|
|
|
public function testPreferences() {
|
|
$prefs = array();
|
|
$repo = TestingAccessWrapper::newFromObject( new MediaWikiGadgetsDefinitionRepo() );
|
|
// Force usage of a MediaWikiGadgetsDefinitionRepo
|
|
GadgetRepo::setSingleton( $repo );
|
|
|
|
$gadgets = $repo->fetchStructuredList( '* foo | foo.js
|
|
==keep-section1==
|
|
* bar| bar.js
|
|
==remove-section==
|
|
* baz [rights=embezzle] |baz.js
|
|
==keep-section2==
|
|
* quux [rights=read] | quux.js' );
|
|
$this->assertGreaterThanOrEqual( 2, count( $gadgets ), "Gadget list parsed" );
|
|
|
|
$repo->definitionCache = $gadgets;
|
|
$this->assertTrue( GadgetHooks::getPreferences( new User, $prefs ), 'GetPrefences hook should return true' );
|
|
|
|
$options = $prefs['gadgets']['options'];
|
|
$this->assertFalse( isset( $options['<gadget-section-remove-section>'] ), 'Must not show empty sections' );
|
|
$this->assertTrue( isset( $options['<gadget-section-keep-section1>'] ) );
|
|
$this->assertTrue( isset( $options['<gadget-section-keep-section2>'] ) );
|
|
}
|
|
|
|
public function tearDown() {
|
|
GadgetRepo::setSingleton();
|
|
parent::tearDown();
|
|
}
|
|
}
|