45 "parent test not defined. test will be skipped",
46 [
"parent" => $testObject->getParentName(),
"test" => $testObject->getName()]
49 $skippedTest = $this->
skipTest($testObject);
54 if ($parentTest->getParentName() !==
null) {
56 "Cannot extend a test that already extends another test. Test: " . $parentTest->getName(),
57 [
"parent" => $parentTest->getName(),
"actionGroup" => $testObject->getName()]
62 ->debug(
"extending test", [
"parent" => $parentTest->getName(),
"test" => $testObject->getName()]);
66 $referencedTestSteps = $parentTest->getUnresolvedSteps();
67 $newSteps = $this->processRemoveActions(array_merge($referencedTestSteps, $testObject->getUnresolvedSteps()));
69 $testHooks = $this->resolveExtendedHooks($testObject, $parentTest);
73 $testObject->getName(),
75 $testObject->getAnnotations(),
77 $testObject->getFilename(),
78 $testObject->getParentName()
94 if ($parentActionGroup ==
null) {
96 "Parent Action Group " .
97 $actionGroupObject->getParentName() .
98 " not defined for Test " .
99 $actionGroupObject->getName() .
106 if ($parentActionGroup->getParentName() !==
null) {
108 "Cannot extend an action group that already extends another action group. " .
109 $parentActionGroup->getName(),
110 [
"parent" => $parentActionGroup->getName(),
"actionGroup" => $actionGroupObject->getName()]
115 "extending action group:",
116 [
"parent" => $parentActionGroup->getName(),
"actionGroup" => $actionGroupObject->getName()]
121 $referencedActions = $parentActionGroup->getActions();
122 $newActions = $this->processRemoveActions(array_merge($referencedActions, $actionGroupObject->getActions()));
124 $extendedArguments = array_merge(
125 $actionGroupObject->getArguments(),
126 $parentActionGroup->getArguments()
131 $actionGroupObject->getName(),
134 $actionGroupObject->getParentName()
136 return $extendedActionGroup;
146 private function resolveExtendedHooks($testObject, $parentTestObject)
148 $testHooks = $testObject->getHooks();
149 $parentHooks = $parentTestObject->getHooks();
152 foreach ($testHooks as $key => $hook) {
153 if (array_key_exists($key, $parentHooks)) {
154 $testHookActions = array_merge(
155 $parentHooks[$key]->getUnresolvedActions(),
156 $testHooks[$key]->getUnresolvedActions()
158 $cleanedTestHookActions = $this->processRemoveActions($testHookActions);
161 $parentHooks[$key]->getType(),
162 $parentHooks[$key]->getParentName(),
163 $cleanedTestHookActions
165 $testHooks[$key] = $newTestHook;
167 $testHooks[$key] = $hook;
172 foreach ($parentHooks as $key => $hook) {
173 if (!array_key_exists($key, $testHooks)) {
174 $testHooks[$key] = $hook;
188 private function processRemoveActions($actions)
190 $cleanedActions = [];
193 foreach ($actions as $actionName => $actionData) {
194 if ($actionData->getType() !=
"remove") {
195 $cleanedActions[$actionName] = $actionData;
199 return $cleanedActions;
210 $annotations = $testObject->getAnnotations();
213 if (array_key_exists(
'skip', $annotations)) {
215 }
elseif (!array_key_exists(
'skip', $annotations)) {
216 $annotations[
'skip'] = [
'issueId' =>
"ParentTestDoesNotExist"];
220 $testObject->getName(),
224 $testObject->getFilename(),
225 $testObject->getParentName()
elseif(isset( $params[ 'redirect_parent']))
extendActionGroup($actionGroupObject)