8 use AspectMock\Proxy\Verifier;
9 use AspectMock\Test as AspectMock;
17 use Monolog\Handler\TestHandler;
19 use PHPUnit\Framework\TestCase;
41 "mockStep" => [
"nodeName" =>
"mockNode",
"stepKey" =>
"mockStep"]
45 $mockSimpleTest = $testDataArrayBuilder
46 ->withName(
'simpleTest')
47 ->withAnnotations([
'title'=>[[
'value' =>
'simpleTest']]])
48 ->withTestActions($mockActions)
51 $mockExtendedTest = $testDataArrayBuilder
52 ->withName(
'extendedTest')
53 ->withAnnotations([
'title'=>[[
'value' =>
'extendedTest']]])
54 ->withTestReference(
"simpleTest")
57 $mockTestData = [
'tests' => array_merge($mockSimpleTest, $mockExtendedTest)];
58 $this->setMockTestOutput($mockTestData);
67 [
'parent' =>
'simpleTest',
'test' =>
'extendedTest']
71 $this->assertEquals($testObject->getParentName(),
"simpleTest");
72 $this->assertArrayHasKey(
"mockStep", $testObject->getOrderedActions());
82 "beforeHookAction" => [
"nodeName" =>
"mockNodeBefore",
"stepKey" =>
"mockStepBefore"]
85 "afterHookAction" => [
"nodeName" =>
"mockNodeAfter",
"stepKey" =>
"mockStepAfter"]
89 $mockSimpleTest = $testDataArrayBuilder
90 ->withName(
'simpleTest')
91 ->withAnnotations([
'title'=>[[
'value' =>
'simpleTest']]])
92 ->withBeforeHook($mockBeforeHooks)
93 ->withAfterHook($mockAfterHooks)
96 $mockExtendedTest = $testDataArrayBuilder
97 ->withName(
'extendedTest')
98 ->withAnnotations([
'title'=>[[
'value' =>
'extendedTest']]])
99 ->withTestReference(
"simpleTest")
102 $mockTestData = [
'tests' => array_merge($mockSimpleTest, $mockExtendedTest)];
103 $this->setMockTestOutput($mockTestData);
112 [
'parent' =>
'simpleTest',
'test' =>
'extendedTest']
116 $this->assertEquals($testObject->getParentName(),
"simpleTest");
117 $this->assertArrayHasKey(
"mockStepBefore", $testObject->getHooks()[
'before']->getActions());
118 $this->assertArrayHasKey(
"mockStepAfter", $testObject->getHooks()[
'after']->getActions());
128 $mockExtendedTest = $testDataArrayBuilder
129 ->withName(
'extendedTest')
130 ->withTestReference(
"simpleTest")
133 $mockTestData = [
'tests' => array_merge($mockExtendedTest)];
134 $this->setMockTestOutput($mockTestData);
142 "parent test not defined. test will be skipped",
143 [
'parent' =>
'simpleTest',
'test' =>
'extendedTest']
154 $mockParentTest = $testDataArrayBuilder
155 ->withName(
'anotherTest')
159 $mockSimpleTest = $testDataArrayBuilder
160 ->withName(
'simpleTest')
161 ->withAnnotations([
'title'=>[[
'value' =>
'simpleTest']]])
163 ->withTestReference(
"anotherTest")
166 $mockExtendedTest = $testDataArrayBuilder
167 ->withName(
'extendedTest')
168 ->withAnnotations([
'title'=>[[
'value' =>
'extendedTest']]])
169 ->withTestReference(
"simpleTest")
172 $mockTestData = [
'tests' => array_merge($mockParentTest, $mockSimpleTest, $mockExtendedTest)];
173 $this->setMockTestOutput($mockTestData);
175 $this->expectExceptionMessage(
"Cannot extend a test that already extends another test. Test: simpleTest");
183 "parent test not defined. test will be skipped",
184 [
'parent' =>
'simpleTest',
'test' =>
'extendedTest']
186 $this->expectOutputString(
"Extending Test: anotherTest => simpleTest" . PHP_EOL);
195 $mockSimpleActionGroup = [
196 "nodeName" =>
"actionGroup",
197 "name" =>
"mockSimpleActionGroup",
198 "filename" =>
"someFile",
200 "nodeName" =>
"comment",
201 "selector" =>
"selector",
202 "stepKey" =>
"commentHere" 205 "nodeName" =>
"comment",
206 "selector" =>
"parentSelector",
207 "stepKey" =>
"parentComment" 211 $mockExtendedActionGroup = [
212 "nodeName" =>
"actionGroup",
213 "name" =>
"mockExtendedActionGroup",
214 "filename" =>
"someFile",
215 "extends" =>
"mockSimpleActionGroup",
217 "nodeName" =>
"comment",
218 "selector" =>
"otherSelector",
219 "stepKey" =>
"commentHere" 223 $mockActionGroupData = [
225 'mockSimpleActionGroup' => $mockSimpleActionGroup,
226 'mockExtendedActionGroup' => $mockExtendedActionGroup
229 $this->setMockTestOutput(
null, $mockActionGroupData);
237 'extending action group:',
238 [
'parent' => $mockSimpleActionGroup[
'name'],
'actionGroup' => $mockExtendedActionGroup[
'name']]
242 $this->assertEquals(
"mockSimpleActionGroup", $actionGroupObject->getParentName());
243 $actions = $actionGroupObject->getActions();
244 $this->assertEquals(
"otherSelector", $actions[
"commentHere"]->getCustomActionAttributes()[
"selector"]);
245 $this->assertEquals(
"parentSelector", $actions[
"parentComment"]->getCustomActionAttributes()[
"selector"]);
254 $mockExtendedActionGroup = [
255 "nodeName" =>
"actionGroup",
256 "name" =>
"mockSimpleActionGroup",
257 "filename" =>
"someFile",
258 "extends" =>
"mockSimpleActionGroup",
260 "nodeName" =>
"comment",
261 "selector" =>
"otherSelector",
262 "stepKey" =>
"commentHere" 266 $mockActionGroupData = [
268 'mockExtendedActionGroup' => $mockExtendedActionGroup
271 $this->setMockTestOutput(
null, $mockActionGroupData);
273 $this->expectExceptionMessage(
274 "Parent Action Group mockSimpleActionGroup not defined for Test " . $mockExtendedActionGroup[
'extends']
287 $mockParentActionGroup = [
288 "nodeName" =>
"actionGroup",
289 "name" =>
"mockParentActionGroup",
290 "filename" =>
"someFile" 293 $mockSimpleActionGroup = [
294 "nodeName" =>
"actionGroup",
295 "name" =>
"mockSimpleActionGroup",
296 "filename" =>
"someFile",
297 "extends" =>
"mockParentActionGroup",
300 $mockExtendedActionGroup = [
301 "nodeName" =>
"actionGroup",
302 "name" =>
"mockSimpleActionGroup",
303 "filename" =>
"someFile",
304 "extends" =>
"mockSimpleActionGroup",
307 $mockActionGroupData = [
309 'mockParentActionGroup' => $mockParentActionGroup,
310 'mockSimpleActionGroup' => $mockSimpleActionGroup,
311 'mockExtendedActionGroup' => $mockExtendedActionGroup
314 $this->setMockTestOutput(
null, $mockActionGroupData);
316 $this->expectExceptionMessage(
317 "Cannot extend an action group that already extends another action group. " . $mockSimpleActionGroup[
'name']
323 }
catch (\Exception $e) {
327 "Cannot extend an action group that already extends another action group. " .
328 $mockSimpleActionGroup[
'name'],
329 [
'parent' => $mockSimpleActionGroup[
'name'],
'actionGroup' => $mockSimpleActionGroup[
'name']]
342 private function setMockTestOutput($testData =
null, $actionGroupData =
null)
345 $property = new \ReflectionProperty(TestObjectHandler::class,
'testObjectHandler');
346 $property->setAccessible(
true);
347 $property->setValue(
null);
350 $property = new \ReflectionProperty(ActionGroupObjectHandler::class,
'ACTION_GROUP_OBJECT_HANDLER');
351 $property->setAccessible(
true);
352 $property->setValue(
null);
354 $mockDataParser = AspectMock::double(TestDataParser::class, [
'readTestData' => $testData])->make();
355 $mockActionGroupParser = AspectMock::double(
356 ActionGroupDataParser::class,
357 [
'readActionGroupData' => $actionGroupData]
359 $instance = AspectMock::double(
360 ObjectManager::class,
361 [
'create' =>
function ($clazz) use (
363 $mockActionGroupParser
365 if ($clazz == TestDataParser::class) {
366 return $mockDataParser;
368 if ($clazz == ActionGroupDataParser::class) {
369 return $mockActionGroupParser;
374 AspectMock::double(ObjectManagerFactory::class, [
'getObjectManager' => $instance]);
testGenerateExtendedActionGroupNoParent()
testGenerateExtendedTest()
testExtendedTestNoParent()
testGenerateExtendedActionGroup()
testExtendingExtendedActionGroup()
testExtendingExtendedTest()
testGenerateExtendedWithHooks()
static tearDownAfterClass()