Move trivially compatible tests to the unit tests suite
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / Rest / PathTemplateMatcher / PathMatcherTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Rest\PathTemplateMatcher;
4
5 use MediaWiki\Rest\PathTemplateMatcher\PathConflict;
6 use MediaWiki\Rest\PathTemplateMatcher\PathMatcher;
7
8 /**
9 * @covers \MediaWiki\Rest\PathTemplateMatcher\PathMatcher
10 * @covers \MediaWiki\Rest\PathTemplateMatcher\PathConflict
11 */
12 class PathMatcherTest extends \MediaWikiUnitTestCase {
13 private static $normalRoutes = [
14 '/a/b',
15 '/b/{x}',
16 '/c/{x}/d',
17 '/c/{x}/e',
18 '/c/{x}/{y}/d',
19 ];
20
21 public static function provideConflictingRoutes() {
22 return [
23 [ '/a/b', 0, '/a/b' ],
24 [ '/a/{x}', 0, '/a/b' ],
25 [ '/{x}/c', 1, '/b/{x}' ],
26 [ '/b/a', 1, '/b/{x}' ],
27 [ '/b/{x}', 1, '/b/{x}' ],
28 [ '/{x}/{y}/d', 2, '/c/{x}/d' ],
29 ];
30 }
31
32 public static function provideMatch() {
33 return [
34 [ '', false ],
35 [ '/a/b', [ 'params' => [], 'userData' => 0 ] ],
36 [ '/b', false ],
37 [ '/b/1', [ 'params' => [ 'x' => '1' ], 'userData' => 1 ] ],
38 [ '/c/1/d', [ 'params' => [ 'x' => '1' ], 'userData' => 2 ] ],
39 [ '/c/1/e', [ 'params' => [ 'x' => '1' ], 'userData' => 3 ] ],
40 [ '/c/000/e', [ 'params' => [ 'x' => '000' ], 'userData' => 3 ] ],
41 [ '/c/1/f', false ],
42 [ '/c//e', [ 'params' => [ 'x' => '' ], 'userData' => 3 ] ],
43 [ '/c///e', false ],
44 ];
45 }
46
47 public function createNormalRouter() {
48 $pm = new PathMatcher;
49 foreach ( self::$normalRoutes as $i => $route ) {
50 $pm->add( $route, $i );
51 }
52 return $pm;
53 }
54
55 /** @dataProvider provideConflictingRoutes */
56 public function testAddConflict( $attempt, $expectedUserData, $expectedTemplate ) {
57 $pm = $this->createNormalRouter();
58 $actualTemplate = null;
59 $actualUserData = null;
60 try {
61 $pm->add( $attempt, 'conflict' );
62 } catch ( PathConflict $pc ) {
63 $actualTemplate = $pc->existingTemplate;
64 $actualUserData = $pc->existingUserData;
65 }
66 $this->assertSame( $expectedUserData, $actualUserData );
67 $this->assertSame( $expectedTemplate, $actualTemplate );
68 }
69
70 /** @dataProvider provideMatch */
71 public function testMatch( $path, $expectedResult ) {
72 $pm = $this->createNormalRouter();
73 $result = $pm->match( $path );
74 $this->assertSame( $expectedResult, $result );
75 }
76 }