1
0
mirror of https://github.com/dannyvankooten/AltoRouter.git synced 2025-08-07 17:07:00 +02:00

add @covers on every test, remove array long syntax

This commit is contained in:
Félix Dorn
2019-07-03 21:43:47 +02:00
parent 2360f527b0
commit cd918de64b

View File

@@ -2,42 +2,49 @@
require 'AltoRouter.php'; require 'AltoRouter.php';
class AltoRouterDebug extends AltoRouter{ class AltoRouterDebug extends AltoRouter
public function getNamedRoutes(){ {
public function getNamedRoutes()
{
return $this->namedRoutes; return $this->namedRoutes;
} }
public function getBasePath(){ public function getBasePath()
{
return $this->basePath; return $this->basePath;
} }
} }
class SimpleTraversable implements Iterator{ class SimpleTraversable implements Iterator
{
protected $_position = 0; protected $_position = 0;
protected $_data = array( protected $_data = [
array('GET', '/foo', 'foo_action', null), ['GET', '/foo', 'foo_action', null],
array('POST', '/bar', 'bar_action', 'second_route') ['POST', '/bar', 'bar_action', 'second_route']
); ];
public function current(){ public function current()
{
return $this->_data[$this->_position]; return $this->_data[$this->_position];
} }
public function key(){ public function key()
{
return $this->_position; return $this->_position;
} }
public function next(){ public function next()
{
++$this->_position; ++$this->_position;
} }
public function rewind(){ public function rewind()
{
$this->_position = 0; $this->_position = 0;
} }
public function valid(){ public function valid()
{
return isset($this->_data[$this->_position]); return isset($this->_data[$this->_position]);
} }
} }
class AltoRouterTest extends PHPUnit\Framework\TestCase class AltoRouterTest extends PHPUnit\Framework\TestCase
@@ -71,12 +78,13 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
{ {
$method = 'POST'; $method = 'POST';
$route = '/[:controller]/[:action]'; $route = '/[:controller]/[:action]';
$target = function(){}; $target = static function () {
};
$this->assertInternalType('array', $this->router->getRoutes()); $this->assertInternalType('array', $this->router->getRoutes());
// $this->assertIsArray($this->router->getRoutes()); // for phpunit 7.x // $this->assertIsArray($this->router->getRoutes()); // for phpunit 7.x
$this->router->map($method, $route, $target); $this->router->map($method, $route, $target);
$this->assertEquals(array(array($method, $route, $target, null)), $this->router->getRoutes()); $this->assertEquals([[$method, $route, $target, null]], $this->router->getRoutes());
} }
/** /**
@@ -86,17 +94,18 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
{ {
$method = 'POST'; $method = 'POST';
$route = '/[:controller]/[:action]'; $route = '/[:controller]/[:action]';
$target = function(){}; $target = static function () {
};
$this->router->addRoutes(array( $this->router->addRoutes([
array($method, $route, $target), [$method, $route, $target],
array($method, $route, $target, 'second_route') [$method, $route, $target, 'second_route']
)); ]);
$routes = $this->router->getRoutes(); $routes = $this->router->getRoutes();
$this->assertEquals(array($method, $route, $target, null), $routes[0]); $this->assertEquals([$method, $route, $target, null], $routes[0]);
$this->assertEquals(array($method, $route, $target, 'second_route'), $routes[1]); $this->assertEquals([$method, $route, $target, 'second_route'], $routes[1]);
} }
/** /**
@@ -147,13 +156,14 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
{ {
$method = 'POST'; $method = 'POST';
$route = '/[:controller]/[:action]'; $route = '/[:controller]/[:action]';
$target = function(){}; $target = static function () {
};
$this->router->map($method, $route, $target); $this->router->map($method, $route, $target);
$routes = $this->router->getRoutes(); $routes = $this->router->getRoutes();
$this->assertEquals(array($method, $route, $target, null), $routes[0]); $this->assertEquals([$method, $route, $target, null], $routes[0]);
} }
/** /**
@@ -163,21 +173,22 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
{ {
$method = 'POST'; $method = 'POST';
$route = '/[:controller]/[:action]'; $route = '/[:controller]/[:action]';
$target = function(){}; $target = static function () {
};
$name = 'myroute'; $name = 'myroute';
$this->router->map($method, $route, $target, $name); $this->router->map($method, $route, $target, $name);
$routes = $this->router->getRoutes(); $routes = $this->router->getRoutes();
$this->assertEquals(array($method, $route, $target, $name), $routes[0]); $this->assertEquals([$method, $route, $target, $name], $routes[0]);
$named_routes = $this->router->getNamedRoutes(); $named_routes = $this->router->getNamedRoutes();
$this->assertEquals($route, $named_routes[$name]); $this->assertEquals($route, $named_routes[$name]);
try{ try {
$this->router->map($method, $route, $target, $name); $this->router->map($method, $route, $target, $name);
$this->fail('Should not be able to add existing named route'); $this->fail('Should not be able to add existing named route');
}catch(Exception $e){ } catch (Exception $e) {
$this->assertEquals("Can not redeclare route '{$name}'", $e->getMessage()); $this->assertEquals("Can not redeclare route '{$name}'", $e->getMessage());
} }
} }
@@ -188,75 +199,96 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
*/ */
public function testGenerate() public function testGenerate()
{ {
$params = array( $params =[
'controller' => 'test', 'controller' => 'test',
'action' => 'someaction' 'action' => 'someaction'
];
$this->router->map('GET', '/[:controller]/[:action]', static function () {
}, 'foo_route');
$this->assertEquals(
'/test/someaction',
$this->router->generate('foo_route', $params)
); );
$this->router->map('GET', '/[:controller]/[:action]', function(){}, 'foo_route'); $params = [
$this->assertEquals('/test/someaction',
$this->router->generate('foo_route', $params));
$params = array(
'controller' => 'test', 'controller' => 'test',
'action' => 'someaction', 'action' => 'someaction',
'type' => 'json' 'type' => 'json'
];
$this->assertEquals(
'/test/someaction',
$this->router->generate('foo_route', $params)
); );
$this->assertEquals('/test/someaction',
$this->router->generate('foo_route', $params));
} }
/**
* @covers AltoRouter::generate
*/
public function testGenerateWithOptionalUrlParts() public function testGenerateWithOptionalUrlParts()
{ {
$this->router->map('GET', '/[:controller]/[:action].[:type]?', function(){}, 'bar_route'); $this->router->map('GET', '/[:controller]/[:action].[:type]?', static function () {
}, 'bar_route');
$params = array( $params = [
'controller' => 'test', 'controller' => 'test',
'action' => 'someaction' 'action' => 'someaction'
];
$this->assertEquals(
'/test/someaction',
$this->router->generate('bar_route', $params)
); );
$this->assertEquals('/test/someaction', $params = [
$this->router->generate('bar_route', $params));
$params = array(
'controller' => 'test', 'controller' => 'test',
'action' => 'someaction', 'action' => 'someaction',
'type' => 'json' 'type' => 'json'
); ];
$this->assertEquals('/test/someaction.json', $this->assertEquals(
$this->router->generate('bar_route', $params)); '/test/someaction.json',
$this->router->generate('bar_route', $params)
);
} }
/** /**
* GitHub #98 * GitHub #98
* @covers AltoRouter::generate
*/ */
public function testGenerateWithOptionalPartOnBareUrl() public function testGenerateWithOptionalPartOnBareUrl()
{ {
$this->router->map('GET', '/[i:page]?', function(){}, 'bare_route'); $this->router->map('GET', '/[i:page]?', static function () {
}, 'bare_route');
$params = array( $params = [
'page' => 1 'page' => 1
];
$this->assertEquals(
'/1',
$this->router->generate('bare_route', $params)
); );
$this->assertEquals('/1', $params = [];
$this->router->generate('bare_route', $params));
$params = array(); $this->assertEquals(
'/',
$this->assertEquals('/', $this->router->generate('bare_route', $params)
$this->router->generate('bare_route', $params)); );
} }
/**
* @covers AltoRouter::generate
*/
public function testGenerateWithNonexistingRoute() public function testGenerateWithNonexistingRoute()
{ {
try{ try {
$this->router->generate('nonexisting_route'); $this->router->generate('nonexisting_route');
$this->fail('Should trigger an exception on nonexisting named route'); $this->fail('Should trigger an exception on nonexisting named route');
}catch(Exception $e){ } catch (Exception $e) {
$this->assertEquals("Route 'nonexisting_route' does not exist.", $e->getMessage()); $this->assertEquals("Route 'nonexisting_route' does not exist.", $e->getMessage());
} }
} }
@@ -269,64 +301,73 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
{ {
$this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route'); $this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'foo_action', 'target' => 'foo_action',
'params' => array( 'params' => [
'controller' => 'test', 'controller' => 'test',
'action' => 'do' 'action' => 'do'
), ],
'name' => 'foo_route' 'name' => 'foo_route'
), $this->router->match('/foo/test/do', 'GET')); ], $this->router->match('/foo/test/do', 'GET'));
$this->assertFalse($this->router->match('/foo/test/do', 'POST')); $this->assertFalse($this->router->match('/foo/test/do', 'POST'));
$this->assertEquals(array( $this->assertEquals([
'target' => 'foo_action', 'target' => 'foo_action',
'params' => array( 'params' => [
'controller' => 'test', 'controller' => 'test',
'action' => 'do' 'action' => 'do'
), ],
'name' => 'foo_route' 'name' => 'foo_route'
), $this->router->match('/foo/test/do?param=value', 'GET')); ], $this->router->match('/foo/test/do?param=value', 'GET'));
} }
public function testMatchWithNonRegex() { /**
$this->router->map('GET','/about-us', 'PagesController#about', 'about_us'); * @covers AltoRouter::match
*/
public function testMatchWithNonRegex()
{
$this->router->map('GET', '/about-us', 'PagesController#about', 'about_us');
$this->assertEquals(array( $this->assertEquals([
'target' => 'PagesController#about', 'target' => 'PagesController#about',
'params' => array(), 'params' => [],
'name' => 'about_us' 'name' => 'about_us'
), $this->router->match('/about-us', 'GET')); ], $this->router->match('/about-us', 'GET'));
$this->assertFalse($this->router->match('/about-us', 'POST')); $this->assertFalse($this->router->match('/about-us', 'POST'));
$this->assertFalse($this->router->match('/about', 'GET')); $this->assertFalse($this->router->match('/about', 'GET'));
$this->assertFalse($this->router->match('/about-us-again', 'GET')); $this->assertFalse($this->router->match('/about-us-again', 'GET'));
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithFixedParamValues() public function testMatchWithFixedParamValues()
{ {
$this->router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); $this->router->map('POST', '/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do');
$this->assertEquals(array( $this->assertEquals([
'target' => 'usersController#doAction', 'target' => 'usersController#doAction',
'params' => array( 'params' => [
'id' => 1, 'id' => 1,
'action' => 'delete' 'action' => 'delete'
), ],
'name' => 'users_do' 'name' => 'users_do'
), $this->router->match('/users/1/delete', 'POST')); ], $this->router->match('/users/1/delete', 'POST'));
$this->assertFalse($this->router->match('/users/1/delete', 'GET')); $this->assertFalse($this->router->match('/users/1/delete', 'GET'));
$this->assertFalse($this->router->match('/users/abc/delete', 'POST')); $this->assertFalse($this->router->match('/users/abc/delete', 'POST'));
$this->assertFalse($this->router->match('/users/1/create', 'GET')); $this->assertFalse($this->router->match('/users/1/create', 'GET'));
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithPlainRoute() public function testMatchWithPlainRoute()
{ {
$router = $this->getMockBuilder('AltoRouterDebug') $router = $this->getMockBuilder('AltoRouterDebug')
->setMethods(array('compileRoute')) ->setMethods(['compileRoute'])
->getMock(); ->getMock();
// this should prove that compileRoute is not called when the route doesn't // this should prove that compileRoute is not called when the route doesn't
@@ -337,19 +378,21 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
$router->map('GET', '/contact', 'website#contact', 'contact'); $router->map('GET', '/contact', 'website#contact', 'contact');
// exact match, so no regex compilation necessary // exact match, so no regex compilation necessary
$this->assertEquals(array( $this->assertEquals([
'target' => 'website#contact', 'target' => 'website#contact',
'params' => array(), 'params' => [],
'name' => 'contact' 'name' => 'contact'
), $router->match('/contact', 'GET')); ], $router->match('/contact', 'GET'));
$router->map('GET', '/page/[:id]', 'pages#show', 'page'); $router->map('GET', '/page/[:id]', 'pages#show', 'page');
// no prefix match, so no regex compilation necessary // no prefix match, so no regex compilation necessary
$this->assertFalse($router->match('/page1', 'GET')); $this->assertFalse($router->match('/page1', 'GET'));
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithServerVars() public function testMatchWithServerVars()
{ {
$this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route'); $this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route');
@@ -357,88 +400,98 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
$_SERVER['REQUEST_URI'] = '/foo/test/do'; $_SERVER['REQUEST_URI'] = '/foo/test/do';
$_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['REQUEST_METHOD'] = 'GET';
$this->assertEquals(array( $this->assertEquals([
'target' => 'foo_action', 'target' => 'foo_action',
'params' => array( 'params' => [
'controller' => 'test', 'controller' => 'test',
'action' => 'do' 'action' => 'do'
), ],
'name' => 'foo_route' 'name' => 'foo_route'
), $this->router->match()); ], $this->router->match());
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithOptionalUrlParts() public function testMatchWithOptionalUrlParts()
{ {
$this->router->map('GET', '/bar/[:controller]/[:action].[:type]?', 'bar_action', 'bar_route'); $this->router->map('GET', '/bar/[:controller]/[:action].[:type]?', 'bar_action', 'bar_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'bar_action', 'target' => 'bar_action',
'params' => array( 'params' => [
'controller' => 'test', 'controller' => 'test',
'action' => 'do', 'action' => 'do',
'type' => 'json' 'type' => 'json'
), ],
'name' => 'bar_route' 'name' => 'bar_route'
), $this->router->match('/bar/test/do.json', 'GET')); ], $this->router->match('/bar/test/do.json', 'GET'));
$this->assertEquals(array( $this->assertEquals([
'target' => 'bar_action', 'target' => 'bar_action',
'params' => array( 'params' => [
'controller' => 'test', 'controller' => 'test',
'action' => 'do' 'action' => 'do'
), ],
'name' => 'bar_route' 'name' => 'bar_route'
), $this->router->match('/bar/test/do', 'GET')); ], $this->router->match('/bar/test/do', 'GET'));
} }
/** /**
* GitHub #98 * GitHub #98
* @covers AltoRouter::match
*/ */
public function testMatchWithOptionalPartOnBareUrl(){ public function testMatchWithOptionalPartOnBareUrl()
{
$this->router->map('GET', '/[i:page]?', 'bare_action', 'bare_route'); $this->router->map('GET', '/[i:page]?', 'bare_action', 'bare_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'bare_action', 'target' => 'bare_action',
'params' => array( 'params' => [
'page' => 1 'page' => 1
), ],
'name' => 'bare_route' 'name' => 'bare_route'
), $this->router->match('/1', 'GET')); ], $this->router->match('/1', 'GET'));
$this->assertEquals(array( $this->assertEquals([
'target' => 'bare_action', 'target' => 'bare_action',
'params' => array(), 'params' => [],
'name' => 'bare_route' 'name' => 'bare_route'
), $this->router->match('/', 'GET')); ], $this->router->match('/', 'GET'));
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithWildcard() public function testMatchWithWildcard()
{ {
$this->router->map('GET', '/a', 'foo_action', 'foo_route'); $this->router->map('GET', '/a', 'foo_action', 'foo_route');
$this->router->map('GET', '*', 'bar_action', 'bar_route'); $this->router->map('GET', '*', 'bar_action', 'bar_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'bar_action', 'target' => 'bar_action',
'params' => array(), 'params' => [],
'name' => 'bar_route' 'name' => 'bar_route'
), $this->router->match('/everything', 'GET')); ], $this->router->match('/everything', 'GET'));
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithCustomRegexp() public function testMatchWithCustomRegexp()
{ {
$this->router->map('GET', '@^/[a-z]*$', 'bar_action', 'bar_route'); $this->router->map('GET', '@^/[a-z]*$', 'bar_action', 'bar_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'bar_action', 'target' => 'bar_action',
'params' => array(), 'params' => [],
'name' => 'bar_route' 'name' => 'bar_route'
), $this->router->match('/everything', 'GET')); ], $this->router->match('/everything', 'GET'));
$this->assertFalse($this->router->match('/some-other-thing', 'GET')); $this->assertFalse($this->router->match('/some-other-thing', 'GET'));
} }
/**
* @covers AltoRouter::match
*/
public function testMatchWithUnicodeRegex() public function testMatchWithUnicodeRegex()
{ {
$pattern = '/(?<path>[^'; $pattern = '/(?<path>[^';
@@ -455,13 +508,13 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
$this->router->map('GET', '@' . $pattern, 'unicode_action', 'unicode_route'); $this->router->map('GET', '@' . $pattern, 'unicode_action', 'unicode_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'unicode_action', 'target' => 'unicode_action',
'name' => 'unicode_route', 'name' => 'unicode_route',
'params' => array( 'params' => [
'path' => '大家好' 'path' => '大家好'
) ]
), $this->router->match('/大家好', 'GET')); ], $this->router->match('/大家好', 'GET'));
$this->assertFalse($this->router->match('/﷽‎', 'GET')); $this->assertFalse($this->router->match('/﷽‎', 'GET'));
} }
@@ -471,29 +524,30 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
*/ */
public function testMatchWithCustomNamedRegex() public function testMatchWithCustomNamedRegex()
{ {
$this->router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); $this->router->addMatchTypes(['cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?']);
$this->router->map('GET', '/bar/[cId:customId]', 'bar_action', 'bar_route'); $this->router->map('GET', '/bar/[cId:customId]', 'bar_action', 'bar_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'bar_action', 'target' => 'bar_action',
'params' => array( 'params' => [
'customId' => 'AB1', 'customId' => 'AB1',
), ],
'name' => 'bar_route' 'name' => 'bar_route'
), $this->router->match('/bar/AB1', 'GET')); ], $this->router->match('/bar/AB1', 'GET'));
$this->assertEquals(array( $this->assertEquals([
'target' => 'bar_action', 'target' => 'bar_action',
'params' => array( 'params' => [
'customId' => 'AB1_0123456789', 'customId' => 'AB1_0123456789',
), ],
'name' => 'bar_route' 'name' => 'bar_route'
), $this->router->match('/bar/AB1_0123456789', 'GET')); ], $this->router->match('/bar/AB1_0123456789', 'GET'));
$this->assertFalse($this->router->match('/some-other-thing', 'GET')); $this->assertFalse($this->router->match('/some-other-thing', 'GET'));
} }
/**
* @covers AltoRouter::addMatchTypes
*/
public function testMatchWithCustomNamedUnicodeRegex() public function testMatchWithCustomNamedUnicodeRegex()
{ {
$pattern = '[^'; $pattern = '[^';
@@ -504,16 +558,16 @@ class AltoRouterTest extends PHPUnit\Framework\TestCase
$pattern .= '\x{0750}-\x{077F}'; $pattern .= '\x{0750}-\x{077F}';
$pattern .= ']+'; $pattern .= ']+';
$this->router->addMatchTypes(array('nonArabic' => $pattern)); $this->router->addMatchTypes(['nonArabic' => $pattern]);
$this->router->map('GET', '/bar/[nonArabic:string]', 'non_arabic_action', 'non_arabic_route'); $this->router->map('GET', '/bar/[nonArabic:string]', 'non_arabic_action', 'non_arabic_route');
$this->assertEquals(array( $this->assertEquals([
'target' => 'non_arabic_action', 'target' => 'non_arabic_action',
'name' => 'non_arabic_route', 'name' => 'non_arabic_route',
'params' => array( 'params' => [
'string' => 'some-path' 'string' => 'some-path'
) ]
), $this->router->match('/bar/some-path', 'GET')); ], $this->router->match('/bar/some-path', 'GET'));
$this->assertFalse($this->router->match('/﷽‎', 'GET')); $this->assertFalse($this->router->match('/﷽‎', 'GET'));
} }