public function __construct(Nette\Loaders\RobotLoader $robotLoader) { $classes = $robotLoader->getIndexedClasses(); foreach ($classes as $class => $file) { if (class_exists($class)) { $reflection = new \Nette\Reflection\ClassType($class); if ($reflection->implementsInterface('Tatami\\Modules\\IModule')) { if (!($reflection->isAbstract() or $reflection->isInterface())) { $this->modules[] = $this->parseModuleName($reflection->getShortName()); } } if ($reflection->isSubclassOf('Tatami\\Presenters\\BackendPresenter')) { $moduleName = $this->parseModuleName($reflection->getNamespaceName()); $presenterName = $this->parsePresenterName($reflection->getShortName()); $this->presenters[$moduleName][] = $presenterName; $methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC); foreach ($methods as $method) { if (Strings::match($method->name, '/action/') or Strings::match($method->name, '/render/')) { $this->actions[$presenterName][] = $this->parseActionName($method->name); } } } unset($reflection); } } }
/** * Find test suits to run * * @param string $folder Where to look * @return string[] */ protected function findSuits($folder) { $suits = []; $robot = new \Nette\Loaders\RobotLoader(); $robot->setCacheStorage(new \Nette\Caching\Storages\DevNullStorage()); $robot->addDirectory($folder); $robot->acceptFiles = "*.phpt"; $robot->rebuild(); $robot->register(); $classes = $robot->getIndexedClasses(); foreach ($classes as $class => $file) { $rc = new \Nette\Reflection\ClassType($class); if (!$rc->isAbstract() and $rc->isSubclassOf(TestCase::class)) { $suits[] = [$rc->getName(), $file]; } } return $suits; }
/** * @param \Venne\Module\IModule $module * @return array * @throws \Exception */ protected function getAllClasses() { // find files $robotLoader = new \Nette\Loaders\RobotLoader(); $robotLoader->setCacheStorage(new \Nette\Caching\Storages\MemoryStorage()); foreach ($this->context->parameters['modules'] as $name => $item) { if ($item[ModuleManager::MODULE_STATUS] === ModuleManager::STATUS_INSTALLED) { $path = $this->context->expand($item[ModuleManager::MODULE_PATH]) . '/' . ucfirst($name) . 'Module'; if (file_exists($path)) { $robotLoader->addDirectory($path); } } } $robotLoader->register(); $entities = $robotLoader->getIndexedClasses(); // classes $classes = array(); foreach ($entities as $class => $item) { if (\Nette\Reflection\ClassType::from('\\' . $class)->hasAnnotation('ORM\\Entity')) { $classes[] = $class; } } $robotLoader->unregister(); return $classes; }