/** * Search in $scopeModule for test cases that uses page class in $pageModule * Only check classes in TestCase and Constraint * * @param $scopeModule * @param $pageModule * @return array */ protected function getTestClassesByCrossModulePageReference($scopeModule, $pageModule) { $affectedTestCases = []; $testCases = $this->getTestClassesByType(self::CLASS_TYPE_TESTCASE, $scopeModule); $constraints = $this->getTestClassesByType(self::CLASS_TYPE_CONSTRAINT, $scopeModule); $pattern = str_replace('_', '\\', $pageModule) . '\\Test\\Page'; /** @var $testCaseClass \ReflectionClass */ foreach ($testCases as $testCaseClassName => $testCaseClass) { $testClassFileName = $testCaseClass->getFileName(); if ($this->matchFileContentIgnoreCase($testClassFileName, $pattern)) { $affectedTestCases[$testCaseClassName] = $testCaseClassName; } } /** @var $constraintClass \ReflectionClass */ foreach ($constraints as $constraintClassName => $constraintClass) { $constraintClassFileName = $constraintClass->getFileName(); if ($this->matchFileContentIgnoreCase($constraintClassFileName, $pattern)) { $constraintName = lcfirst($constraintClass->getShortName()); $testCases = $this->constraintChecker->getTestCasesByConstraintReference($constraintName); foreach ($testCases as $testCase) { $moduleName = $this->mapClassNameToModule($testCase); if ($moduleName == $scopeModule) { $affectedTestCases[$testCase] = $testCase; } } } } return $affectedTestCases; }