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