mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-06-17 00:37:52 +00:00
Merge branch 'v4-development' into v4-disable-multi-routing
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
require_once 'Dummy/DummyMiddleware.php';
|
||||
require_once 'Dummy/DummyController.php';
|
||||
require_once 'Dummy/Handler/ExceptionHandler.php';
|
||||
require_once 'Dummy/Managers/TestBootManager.php';
|
||||
require_once 'Dummy/Managers/FindUrlBootManager.php';
|
||||
|
||||
class BootManagerTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
|
||||
public function testBootManagerRoutes()
|
||||
{
|
||||
$result = false;
|
||||
|
||||
TestRouter::get('/', function () use (&$result) {
|
||||
$result = true;
|
||||
});
|
||||
TestRouter::get('/about', 'DummyController@method2');
|
||||
TestRouter::get('/contact', 'DummyController@method3');
|
||||
|
||||
// Add boot-manager
|
||||
TestRouter::addBootManager(new TestBootManager([
|
||||
'/con' => '/about',
|
||||
'/contact' => '/',
|
||||
]));
|
||||
|
||||
TestRouter::debug('/contact');
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testFindUrlFromBootManager()
|
||||
{
|
||||
TestRouter::get('/', 'DummyController@method1');
|
||||
TestRouter::get('/about', 'DummyController@method2')->name('about');
|
||||
TestRouter::get('/contact', 'DummyController@method3')->name('contact');
|
||||
|
||||
$result = false;
|
||||
|
||||
// Add boot-manager
|
||||
TestRouter::addBootManager(new FindUrlBootManager($result));
|
||||
|
||||
TestRouter::debug('/');
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
require_once 'Dummy/DummyMiddleware.php';
|
||||
require_once 'Dummy/DummyController.php';
|
||||
require_once 'Dummy/ClassLoader/CustomClassLoader.php';
|
||||
|
||||
class ClassLoaderTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
|
||||
public function testCustomClassLoader()
|
||||
{
|
||||
$result = false;
|
||||
|
||||
TestRouter::setCustomClassLoader(new CustomClassLoader());
|
||||
|
||||
TestRouter::get('/', 'NonExistingClass@method3');
|
||||
TestRouter::get('/test-closure', function($status) use(&$result) {
|
||||
$result = $status;
|
||||
});
|
||||
|
||||
$classLoaderClass = TestRouter::debugOutput('/', 'get', false);
|
||||
TestRouter::debugOutput('/test-closure');
|
||||
|
||||
$this->assertEquals('method3', $classLoaderClass);
|
||||
$this->assertTrue($result);
|
||||
|
||||
TestRouter::router()->reset();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once 'Dummy/DummyMiddleware.php';
|
||||
|
||||
class DependencyInjectionTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testDependencyInjectionDevelopment()
|
||||
{
|
||||
$builder = new \DI\ContainerBuilder();
|
||||
$container = $builder
|
||||
->useAutowiring(true)
|
||||
->ignorePhpDocErrors(true)
|
||||
->build();
|
||||
|
||||
TestRouter::enableDependencyInjection($container);
|
||||
|
||||
$className = null;
|
||||
|
||||
TestRouter::get('/', function (DummyMiddleware $url) use (&$className) {
|
||||
$className = \get_class($url);
|
||||
});
|
||||
|
||||
TestRouter::debug('/');
|
||||
|
||||
$this->assertEquals(DummyMiddleware::class, $className);
|
||||
}
|
||||
|
||||
public function testDependencyInjectionProduction()
|
||||
{
|
||||
$cacheDir = dirname(__DIR__, 2) . '/tmp';
|
||||
|
||||
$builder = new \DI\ContainerBuilder();
|
||||
$builder
|
||||
->enableCompilation($cacheDir)
|
||||
->writeProxiesToFile(true, $cacheDir . '/proxies')
|
||||
->ignorePhpDocErrors(true)
|
||||
->useAutowiring(true);
|
||||
|
||||
$container = $builder->build();
|
||||
|
||||
TestRouter::enableDependencyInjection($container);
|
||||
|
||||
$className = null;
|
||||
|
||||
TestRouter::get('/', function (DummyMiddleware $url) use (&$className) {
|
||||
$className = \get_class($url);
|
||||
});
|
||||
|
||||
TestRouter::debug('/');
|
||||
|
||||
$this->assertEquals(DummyMiddleware::class, $className);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
class CustomClassLoader implements \Pecee\SimpleRouter\ClassLoader\IClassLoader
|
||||
{
|
||||
public function loadClass(string $class)
|
||||
{
|
||||
return new DummyController();
|
||||
}
|
||||
|
||||
public function loadClosure(callable $closure, array $parameters)
|
||||
{
|
||||
return \call_user_func_array($closure, ['result' => true]);
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,11 @@ class DummyController
|
||||
public function method2()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function method3()
|
||||
{
|
||||
return 'method3';
|
||||
}
|
||||
|
||||
public function param($params = null)
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
class FindUrlBootManager implements \Pecee\SimpleRouter\IRouterBootManager
|
||||
{
|
||||
protected $result;
|
||||
|
||||
public function __construct(&$result)
|
||||
{
|
||||
$this->result = &$result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when router loads it's routes
|
||||
*
|
||||
* @param \Pecee\SimpleRouter\Router $router
|
||||
* @param \Pecee\Http\Request $request
|
||||
*/
|
||||
public function boot(\Pecee\SimpleRouter\Router $router, \Pecee\Http\Request $request): void
|
||||
{
|
||||
$contact = $router->findRoute('contact');
|
||||
|
||||
if($contact !== null) {
|
||||
$this->result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,11 @@
|
||||
class TestBootManager implements \Pecee\SimpleRouter\IRouterBootManager
|
||||
{
|
||||
|
||||
protected $routes;
|
||||
protected $aliasUrl;
|
||||
protected $rewrite;
|
||||
|
||||
public function __construct(array $routes, string $aliasUrl)
|
||||
public function __construct(array $rewrite)
|
||||
{
|
||||
$this->routes = $routes;
|
||||
$this->aliasUrl = $aliasUrl;
|
||||
$this->rewrite = $rewrite;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -20,11 +18,11 @@ class TestBootManager implements \Pecee\SimpleRouter\IRouterBootManager
|
||||
*/
|
||||
public function boot(\Pecee\SimpleRouter\Router $router, \Pecee\Http\Request $request): void
|
||||
{
|
||||
foreach ($this->routes as $url) {
|
||||
foreach ($this->rewrite as $url => $rewrite) {
|
||||
// If the current url matches the rewrite url, we use our custom route
|
||||
|
||||
if ($request->getUrl()->contains($url) === true) {
|
||||
$request->setRewriteUrl($this->aliasUrl);
|
||||
$request->setRewriteUrl($rewrite);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,8 +50,8 @@ class EventHandlerTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
// Add boot-manager
|
||||
TestRouter::addBootManager(new TestBootManager([
|
||||
'/test',
|
||||
], '/'));
|
||||
'/test' => '/',
|
||||
]));
|
||||
|
||||
// Start router
|
||||
TestRouter::debug('/non-existing');
|
||||
@@ -61,7 +61,6 @@ class EventHandlerTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
public function testAllEvent()
|
||||
{
|
||||
|
||||
$status = false;
|
||||
|
||||
$eventHandler = new EventHandler();
|
||||
|
||||
@@ -218,7 +218,57 @@ class RouterUrlTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
TestRouter::debug('/');
|
||||
|
||||
$this->assertCount(2, $result);
|
||||
$this->assertCount(2, $result);
|
||||
}
|
||||
|
||||
public function testDefaultNamespace()
|
||||
{
|
||||
TestRouter::setDefaultNamespace('\\Default\\Namespace');
|
||||
|
||||
TestRouter::get('/', 'DummyController@method1', ['as' => 'home']);
|
||||
|
||||
TestRouter::group([
|
||||
'namespace' => 'Appended\Namespace',
|
||||
'prefix' => '/horses',
|
||||
], function () {
|
||||
|
||||
TestRouter::get('/', 'DummyController@method1');
|
||||
|
||||
TestRouter::group([
|
||||
'namespace' => '\\New\\Namespace',
|
||||
'prefix' => '/race',
|
||||
], function () {
|
||||
|
||||
TestRouter::get('/', 'DummyController@method1');
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// Test appended namespace
|
||||
|
||||
$class = null;
|
||||
|
||||
try {
|
||||
TestRouter::debugNoReset('/horses/');
|
||||
} catch (\Pecee\SimpleRouter\Exceptions\ClassNotFoundHttpException $e) {
|
||||
$class = $e->getClass();
|
||||
}
|
||||
|
||||
$this->assertEquals('\\Default\\Namespace\\Appended\Namespace\\DummyController', $class);
|
||||
|
||||
// Test overwritten namespace
|
||||
|
||||
$class = null;
|
||||
|
||||
try {
|
||||
TestRouter::debugNoReset('/horses/race');
|
||||
} catch (\Pecee\SimpleRouter\Exceptions\ClassNotFoundHttpException $e) {
|
||||
$class = $e->getClass();
|
||||
}
|
||||
|
||||
$this->assertEquals('\\New\\Namespace\\DummyController', $class);
|
||||
|
||||
TestRouter::router()->reset();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user