Router.php
<?php
namespace Liaison\Test\Addon;
class Router extends \Tlf\Tester {
public function testPatternAndParamatersToUrl(){
$router = new \Lia\Addon\Router();
$pattern = '/blog/{category}/';
$params = ['category'=>'some-category'];
$target = '/blog/some-category/';
$decoded = $router->decode_pattern($pattern);
$filled = $router->decoded_pattern_to_url($decoded, $params);
$this->compare(
$target,
$filled
);
}
public function testExtractUrlParamaters(){
$router = new \Lia\Addon\Router();
$url = '/blog/some-category/';
$pattern = '/blog/{category}/';
$decoded = $router->decode_pattern($pattern);
$extracted = $router->extract_url_paramaters($decoded, $url);
$this->compare(
['category'=>'some-category'],
$extracted
);
}
public function testDecodePatternWithOptionalParamaters(){
$router = new \Lia\Addon\Router();
$pattern = '/blog/{?category}/';
$decoded = $router->decode_pattern($pattern);
$actual_decoded = $router->separate_optional_from_decoded_pattern($decoded);
// $all = array_map(function($a){unset($a['extraParsedPattern']);unset($a['optionalParams']); return $a;},$all);
// var_export($actual_decoded);
// exit;
$target = [
[
'pattern' => '/blog/{?category}/',
'parsedPattern' => '/blog/?/',
'params' => ['category'],
'methods' => ['GET' => 'GET'],
],
[
'pattern' => '/blog/{?category}/',
'parsedPattern' => '/blog/',
'params' => [],
'methods' => ['GET' => 'GET'],
],
];
$this->compare($target, $actual_decoded);
}
/**
* Example of `$router->url_to_regex()`
*/
public function testUrlToRegex(){
$router = new \Lia\Addon\Router();
$url = '/one/two/';
$test = $router->url_to_regex($url);
$target = '^\/(?:one|\?)\/(?:two|\?)\/$';
$this->compare($target ,$test);
}
/**
* Example of `$router->decode_pattern()`
*/
public function testDecodePattern(){
$router = new \Lia\Addon\Router();
$actual_parsed = $router->decode_pattern("/blog/{slug}/{id}/");
$target_parsed = [
"pattern" => "/blog/{slug}/{id}/",
"parsedPattern" => "/blog/?/?/",
"params" => [
0 => "slug",
1 => "id",
],
"methods" => [
"GET" => "GET",
],
];
$this->compare($target_parsed, $actual_parsed);
}
/**
* Example of `$router->decoded_pattern_to_url()`. @see(testParsePatternExample) to see what the `$decoded` array looks like
*
*/
public function testDecodedPatternToUrl(){
$router = new \Lia\Addon\Router();
$decoded = $router->decode_pattern("/blog/{slug}/{id}/");
$fill = ['slug'=>'cats', 'id'=>33];
$filled = $router->decoded_pattern_to_url($decoded, $fill);
$this->compare('/blog/cats/33/', $filled);
}
public function testRemoveRoute(){
$router = new \Lia\Addon\Router();
$router->addRoute('/keep-one/', function(){});
$router->addRoute('/keep-two/', function(){});
$router->addRoute('/keep/{dynamic}/', function(){});
$router->addRoute('/keep/static/', function(){});
$router->addRoute('@POST./keep-post/', function(){});
$router->addRoute('@GET./keep-get1/', function(){});
$router->addRoute('@POST.@GET./keep-getpost/', function(){});
$router->addRoute('/remove-one/', function(){});
$router->addRoute('/remove-two/', function(){});
$router->addRoute('/remove/{dynamic}/', function(){});
$router->addRoute('/remove/static/', function(){});
$router->addRoute('@POST./remove-post/', function(){});
$router->addRoute('@GET./remove-get/', function(){});
$router->addRoute('@POST.@GET./remove-getpost/', function(){});
$router->removeRoute('/remove-one/');
$router->removeRoute('/remove-two/');
$router->removeRoute('/remove/{dynamic}/');
$router->removeRoute('/remove/static/');
$router->removeRoute('@POST./remove-post/');
$router->removeRoute('@GET./remove-get/');
$router->removeRoute('@POST.@GET./remove-getpost/');
$get = array_keys($router->routeMap['GET']);
$post = array_keys($router->routeMap['POST']);
$get_target = [
'/keep-one/',
'/keep-two/',
'/keep/?/',
'/keep/static/',
'/keep-get1/',
'/keep-getpost/',
];
$post_target = [
'/keep-post/',
'/keep-getpost/',
];
$this->compare_arrays($get_target, $get);
$this->compare_arrays($post_target, $post);
}
public function testRemoveReplaceRoute(){
$lia = new \Lia();
$package = new \Lia\Package($lia, 'adsfasddf');
$router = new \Lia\Addon\Router($package);
// @export_start(Router.RemoveReplaceRoute)
$router = \Lia\Addon\Router::from($lia);
// added by another package, perhaps
$router->addRoute('/bears/', __DIR__.'/bad-route-target.php');
// remove the bad route
$router->removeRoute('/bears/');
// add your own route
$router->addRoute('/bears/', __DIR__.'/my-better-version.php');
// @export_end(Router.RemoveReplaceRoute)
$this->compare(
__DIR__.'/my-better-version.php',
$router->routeMap['GET']['/bears/'][0]['target']
);
$this->is_false(isset($router->routeMap['GET']['/bears/'][1]));
}
}