155 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace FastRoute\RouteParser;
 | 
						|
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
class StdTest extends TestCase
 | 
						|
{
 | 
						|
    /** @dataProvider provideTestParse */
 | 
						|
    public function testParse($routeString, $expectedRouteDatas)
 | 
						|
    {
 | 
						|
        $parser = new Std();
 | 
						|
        $routeDatas = $parser->parse($routeString);
 | 
						|
        $this->assertSame($expectedRouteDatas, $routeDatas);
 | 
						|
    }
 | 
						|
 | 
						|
    /** @dataProvider provideTestParseError */
 | 
						|
    public function testParseError($routeString, $expectedExceptionMessage)
 | 
						|
    {
 | 
						|
        $parser = new Std();
 | 
						|
        $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage);
 | 
						|
        $parser->parse($routeString);
 | 
						|
    }
 | 
						|
 | 
						|
    public function provideTestParse()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [
 | 
						|
                '/test',
 | 
						|
                [
 | 
						|
                    ['/test'],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test/{param}',
 | 
						|
                [
 | 
						|
                    ['/test/', ['param', '[^/]+']],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/te{ param }st',
 | 
						|
                [
 | 
						|
                    ['/te', ['param', '[^/]+'], 'st']
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test/{param1}/test2/{param2}',
 | 
						|
                [
 | 
						|
                    ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test/{param:\d+}',
 | 
						|
                [
 | 
						|
                    ['/test/', ['param', '\d+']]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test/{ param : \d{1,9} }',
 | 
						|
                [
 | 
						|
                    ['/test/', ['param', '\d{1,9}']]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[opt]',
 | 
						|
                [
 | 
						|
                    ['/test'],
 | 
						|
                    ['/testopt'],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[/{param}]',
 | 
						|
                [
 | 
						|
                    ['/test'],
 | 
						|
                    ['/test/', ['param', '[^/]+']],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/{param}[opt]',
 | 
						|
                [
 | 
						|
                    ['/', ['param', '[^/]+']],
 | 
						|
                    ['/', ['param', '[^/]+'], 'opt']
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[/{name}[/{id:[0-9]+}]]',
 | 
						|
                [
 | 
						|
                    ['/test'],
 | 
						|
                    ['/test/', ['name', '[^/]+']],
 | 
						|
                    ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '',
 | 
						|
                [
 | 
						|
                    [''],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '[test]',
 | 
						|
                [
 | 
						|
                    [''],
 | 
						|
                    ['test'],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/{foo-bar}',
 | 
						|
                [
 | 
						|
                    ['/', ['foo-bar', '[^/]+']]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/{_foo:.*}',
 | 
						|
                [
 | 
						|
                    ['/', ['_foo', '.*']]
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public function provideTestParseError()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [
 | 
						|
                '/test[opt',
 | 
						|
                "Number of opening '[' and closing ']' does not match"
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[opt[opt2]',
 | 
						|
                "Number of opening '[' and closing ']' does not match"
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/testopt]',
 | 
						|
                "Number of opening '[' and closing ']' does not match"
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[]',
 | 
						|
                'Empty optional part'
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[[opt]]',
 | 
						|
                'Empty optional part'
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '[[test]]',
 | 
						|
                'Empty optional part'
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                '/test[/opt]/required',
 | 
						|
                'Optional segments can only occur at the end of a route'
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |