/** * Check behavior of getStateParentsClassesNamesList() if the finder return all parent class of a state (including external classes). */ public function testGetStateParentsClassesNamesList() { $this->getClassLoaderMock()->expects($this->any())->method('loadClass')->willReturnCallback(function ($class) { $parts = explode('\\', $class); $state = array_pop($parts); include_once $this->statedClass1Path . '/States/' . $state . '.php'; return true; }); $this->initializeFinder('Class1', $this->statedClass1Path); $this->assertEquals(array('Teknoo\\Tests\\Support\\MockState'), $this->finder->getStateParentsClassesNamesList('State4b')); $this->assertEquals(array('Class1\\States\\State4b', 'Teknoo\\Tests\\Support\\MockState'), $this->finder->getStateParentsClassesNamesList('State5')); $this->assertEquals(array('Class1\\States\\State5', 'Class1\\States\\State4b', 'Teknoo\\Tests\\Support\\MockState'), $this->finder->getStateParentsClassesNamesList('State6')); }
/** * Return the list of available alias for a state. * * @param string $loadingStateName * @param FinderInterface $finderLoader * * @return string[] */ private function computeStateAlias(string $loadingStateName, FinderInterface $finderLoader) : array { $parentStateClassNameList = []; $fullStateClassName = $this->getFullStateClassNameList(); foreach ($finderLoader->getStateParentsClassesNamesList($loadingStateName) as $className) { if (isset($fullStateClassName[$className])) { $classNameParts = \explode('\\', $className); $parentStateClassNameList[] = \array_pop($classNameParts); } } return $parentStateClassNameList; }