-
Notifications
You must be signed in to change notification settings - Fork 132
/
Copy pathActionGroupObjectHandler.php
104 lines (91 loc) · 2.96 KB
/
ActionGroupObjectHandler.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\FunctionalTestingFramework\Test\Handlers;
use Magento\FunctionalTestingFramework\ObjectManager\ObjectHandlerInterface;
use Magento\FunctionalTestingFramework\ObjectManagerFactory;
use Magento\FunctionalTestingFramework\Test\Objects\ActionGroupObject;
use Magento\FunctionalTestingFramework\Test\Objects\TestObject;
use Magento\FunctionalTestingFramework\Test\Parsers\ActionGroupDataParser;
use Magento\FunctionalTestingFramework\Test\Util\ActionGroupObjectExtractor;
/**
* Class ActionGroupObjectHandler
*/
class ActionGroupObjectHandler implements ObjectHandlerInterface
{
const BEFORE_AFTER_ERROR_MSG = "Merge Error - Steps cannot have both before and after attributes.\tTestStep='%s'";
const ACTION_GROUP_ROOT = 'config';
const ACTION_GROUP = 'actionGroup';
/**
* Single instance of class var
*
* @var ActionGroupObjectHandler
*/
private static $ACTION_GROUP_OBJECT_HANDLER;
/**
* Array of action groups indexed by name
*
* @var array
*/
private $actionGroups = [];
/**
* Singleton getter for instance of ActionGroupObjectHandler
*
* @return ActionGroupObjectHandler
*/
public static function getInstance()
{
if (!self::$ACTION_GROUP_OBJECT_HANDLER) {
self::$ACTION_GROUP_OBJECT_HANDLER = new ActionGroupObjectHandler();
self::$ACTION_GROUP_OBJECT_HANDLER->initActionGroups();
}
return self::$ACTION_GROUP_OBJECT_HANDLER;
}
/**
* ActionGroupObjectHandler constructor.
*/
private function __construct()
{
// private constructor
}
/**
* Function to return a single object by name
*
* @param string $actionGroupName
* @return ActionGroupObject
*/
public function getObject($actionGroupName)
{
return $this->getAllObjects()[$actionGroupName];
}
/**
* Function to return all objects for which the handler is responsible
*
* @return array
*/
public function getAllObjects()
{
return $this->actionGroups;
}
/**
* Method which populates field array with objects from parsed action_group.xml
*
* @return void
*/
private function initActionGroups()
{
$actionGroupParser = ObjectManagerFactory::getObjectManager()->create(ActionGroupDataParser::class);
$parsedActionGroups = $actionGroupParser->readActionGroupData();
$actionGroupObjectExtractor = new ActionGroupObjectExtractor();
foreach ($parsedActionGroups[ActionGroupObjectHandler::ACTION_GROUP_ROOT] as
$actionGroupName => $actionGroupData) {
if (!is_array($actionGroupData)) {
continue;
}
$this->actionGroups[$actionGroupName] =
$actionGroupObjectExtractor->extractActionGroup($actionGroupData);
}
}
}