Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / phpunit / includes / utils / ClassCollectorTest.php
1 <?php
2
3 /**
4 * @covers ClassCollector
5 */
6 class ClassCollectorTest extends PHPUnit\Framework\TestCase {
7
8 use MediaWikiCoversValidator;
9
10 public static function provideCases() {
11 return [
12 [
13 "class Foo {}",
14 [ 'Foo' ],
15 ],
16 [
17 "namespace Example;\nclass Foo {}\nclass Bar {}",
18 [ 'Example\Foo', 'Example\Bar' ],
19 ],
20 [
21 "class_alias( 'Foo', 'Bar' );",
22 [ 'Bar' ],
23 ],
24 [
25 "namespace Example;\nclass Foo {}\nclass_alias( 'Example\Foo', 'Foo' );",
26 [ 'Example\Foo', 'Foo' ],
27 ],
28 [
29 "namespace Example;\nclass Foo {}\nclass_alias( 'Example\Foo', 'Bar' );",
30 [ 'Example\Foo', 'Bar' ],
31 ],
32 [
33 // Support a multiline 'class' statement
34 "namespace Example;\nclass Foo extends\n\tFooBase {\n\t"
35 . "public function x() {}\n}\nclass_alias( 'Example\Foo', 'Bar' );",
36 [ 'Example\Foo', 'Bar' ],
37 ],
38 [
39 "class_alias( Foo::class, 'Bar' );",
40 [ 'Bar' ],
41 ],
42 [
43 // Support nested class_alias() calls
44 "if ( false ) {\n\tclass_alias( Foo::class, 'Bar' );\n}",
45 [ 'Bar' ],
46 ],
47 [
48 // Namespaced class is not currently supported. Must use namespace declaration
49 // earlier in the file.
50 "class_alias( Example\Foo::class, 'Bar' );",
51 [],
52 ],
53 [
54 "namespace Example;\nclass Foo {}\nclass_alias( Foo::class, 'Bar' );",
55 [ 'Example\Foo', 'Bar' ],
56 ],
57 [
58 "new class() extends Foo {}",
59 []
60 ]
61 ];
62 }
63
64 /**
65 * @dataProvider provideCases
66 */
67 public function testGetClasses( $code, array $classes, $message = null ) {
68 $cc = new ClassCollector();
69 $this->assertEquals( $classes, $cc->getClasses( "<?php\n$code" ), $message );
70 }
71 }