OSDN Git Service

call setBasePath only once
[php-libraries/Router.git] / tests / RouterTest.php
1 <?php
2
3 use PHPRouter\RouteCollection;
4 use PHPRouter\Router;
5 use PHPRouter\Route;
6
7 class someController
8 {
9     public function users_create() {}
10     public function indexAction() {}
11     public function user() {}
12 }
13
14 class RouterTest extends PHPUnit_Framework_TestCase
15 {
16     private function getRouter()
17     {
18         $collection = new RouteCollection();
19         $collection->attach(new Route('/users/', array(
20             '_controller' => 'someController::users_create',
21             'methods' => 'GET'
22         )));
23         $collection->attach(new Route('/user/:id', array(
24             '_controller' => 'someController::user',
25             'methods' => 'GET'
26         )));
27         $collection->attach(new Route('/', array(
28             '_controller' => 'someController::indexAction',
29             'methods' => 'GET'
30         )));
31         return new Router($collection);
32     }
33
34     public function matcherProvider1()
35     {
36         $router = $this->getRouter();
37         return array(
38             array($router, '', true),
39             array($router, '/', true),
40             array($router, '/aaa', false),
41             array($router, '/users', true),
42             array($router, '/user/1', true),
43             array($router, '/user/%E3%81%82', true),
44         );
45     }
46
47     public function matcherProvider2()
48     {
49         $router = $this->getRouter();
50         $router->setBasePath('/api');
51         return array(
52             array($router, '', false),
53             array($router, '/', false),
54             array($router, '/aaa', false),
55             array($router, '/users', false),
56             array($router, '/user/1', false),
57             array($router, '/user/%E3%81%82', false),
58
59             array($router, '/api', true),
60             array($router, '/api/aaa', false),
61             array($router, '/api/users', true),
62             array($router, '/api/user/1', true),
63             array($router, '/api/user/%E3%81%82', true),
64         );
65     }
66
67     public function matcherProvider()
68     {
69         return array_merge($this->matcherProvider1(), $this->matcherProvider2());
70     }
71
72     /**
73      * @dataProvider matcherProvider
74      */
75     public function testMatch($router, $path, $expected)
76     {
77         $this->assertEquals($expected, !!$router->match($path));
78     }
79 }