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