(bug 42915) make MovePage aware of whether redirects are supported.
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiGeneratorTest.php
1 <?php
2 class ApiGeneratorTest extends MediaWikiTestCase {
3
4 /**
5 * Helper to easily get an ApiQuery object instance
6 */
7 function getApiQuery() {
8 // Initialize an ApiQuery object to play with
9 $main = new ApiMain( new FauxRequest() );
10 return new ApiQuery( $main, 'foo', 'bar' );
11 }
12
13 /**
14 * Test whether all registered query modules which are subclasses of
15 * ApiQueryGeneratorBase are listed as being a generator. Registration is
16 * done:
17 * - for core: add it to ApiQuery::$mQueryGenerators
18 * - for extension: by adding to $wgAPIGeneratorModules
19 *
20 * @dataProvider provideApiquerygeneratorbaseChilds
21 */
22 public function testApiquerygeneatorbaseModulesListedAsGenerators(
23 $moduleName, $moduleClass
24 ) {
25 $generators = $this->getApiQuery()->getGenerators();
26 $this->assertArrayHasKey( $moduleName, $generators,
27 "API module '$moduleName' of class '$moduleClass' (an ApiQueryGeneratorBase subclass) must be listed in ApiQuery::\$mQueryGenerators or added to \$wgAPIGeneratorModules."
28 );
29 }
30
31 /**
32 * Returns API modules which are subclassing ApiQueryGeneratorBase.
33 * Case format is:
34 * (moduleName, moduleClass)
35 */
36 public function provideApiquerygeneratorbaseChilds() {
37 $cases = array();
38 $modules = $this->getApiQuery()->getModules();
39 foreach( $modules as $moduleName => $moduleClass ) {
40 if( !is_subclass_of( $moduleClass, 'ApiQueryGeneratorBase' ) ) {
41 continue;
42 }
43 $cases[] = array( $moduleName, $moduleClass );
44 }
45 return $cases;
46 }
47
48 /**
49 * @dataProvider provideListedApiqueryGenerators
50 */
51 public function testGeneratorsAreApiquerygeneratorbaseSubclasses(
52 $generatorName, $generatorClass
53 ) {
54 $modules = $this->getApiQuery()->getModules();
55 $this->assertArrayHasKey( $generatorName, $modules,
56 "Class '$generatorClass' of generator '$generatorName' must be a subclass of 'ApiQueryGeneratorBase'. Listed either in ApiQuery::\$mQueryGenerators or in \$wgAPIGeneratorModules."
57 );
58
59 }
60
61 /**
62 * Return ApiQuery generators, either listed in ApiQuery or registered
63 * via wgAPIGeneratorModules.
64 * Case format is:
65 * (moduleName, $moduleClass).
66 */
67 public function provideListedApiqueryGenerators() {
68 $cases = array();
69 $generators = $this->getApiQuery()->getGenerators();
70 foreach( $generators as $generatorName => $generatorClass ) {
71 $cases[] = array( $generatorName, $generatorClass );
72 }
73 return $cases;
74 }
75
76 }