collect(); $this->assertStrictEquals(9, count($routes)); $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector([ 'Test\Michel\Controller\UserController' ]); $routes = $attributeRouteCollector->collect(); $this->assertStrictEquals(3, count($routes)); $this->assertStrictEquals('user_list', $routes[0]->getName()); $this->assertEquals(['GET', 'HEAD'], $routes[0]->getMethods()); $this->assertStrictEquals('user_show', $routes[1]->getName()); $this->assertEquals(['GET', 'HEAD'], $routes[1]->getMethods()); $this->assertStrictEquals('user_create', $routes[2]->getName()); $this->assertEquals(['POST'], $routes[2]->getMethods()); $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector([ 'Test\Michel\Controller\PingController' ]); $routes = $attributeRouteCollector->collect(); $this->assertStrictEquals(1, count($routes)); $this->assertStrictEquals('/api/ping', $routes[0]->getPath()); $this->assertEquals(['GET', 'HEAD'], $routes[0]->getMethods()); $this->assertEquals('json', $routes[0]->getFormat()); $this->testCache(); } private function testCache(): void { $controllers = [ 'Test\Michel\Controller\UserController', 'Test\Michel\Controller\ProductController', 'Test\Michel\Controller\ApiController', 'Test\Michel\Controller\PingController' ]; $cacheDir = dirname(__FILE__) . '/cache'; if (is_dir($cacheDir)) { foreach (glob($cacheDir . '/*') as $file) { unlink($file); } rmdir($cacheDir); } mkdir($cacheDir, 0777, true); $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector($controllers, $cacheDir); $attributeRouteCollector->generateCache(); $this->assertTrue(is_dir($cacheDir)); foreach ($controllers as $controller) { $cacheFile = $cacheDir . '/' . md5($controller) . '.php'; $this->assertTrue(file_exists($cacheFile)); } $routes = $attributeRouteCollector->collect(); $this->assertStrictEquals(9, count($routes)); foreach ($routes as $route) { $this->assertInstanceOf(Route::class, $route); } $attributeRouteCollector->clearCache(); rmdir($cacheDir); } }