Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
TestObjectHandler.php
Go to the documentation of this file.
1 <?php
7 
18 
23 {
24  const XML_ROOT = 'tests';
25 
31  private static $testObjectHandler;
32 
38  private $tests = [];
39 
45  private $extendUtil;
46 
53  public static function getInstance()
54  {
55  if (!self::$testObjectHandler) {
56  self::$testObjectHandler = new TestObjectHandler();
57  self::$testObjectHandler->initTestData();
58  }
59 
60  return self::$testObjectHandler;
61  }
62 
66  private function __construct()
67  {
68  $this->extendUtil = new ObjectExtensionUtil();
69  }
70 
78  public function getObject($testName)
79  {
80  if (!array_key_exists($testName, $this->tests)) {
81  throw new TestReferenceException("Test ${testName} not defined in xml.");
82  }
83  $testObject = $this->tests[$testName];
84 
85  return $this->extendTest($testObject);
86  }
87 
93  public function getAllObjects()
94  {
95  foreach ($this->tests as $testName => $test) {
96  $this->tests[$testName] = $this->extendTest($test);
97  }
98  return $this->tests;
99  }
100 
107  public function getTestsByGroup($groupName)
108  {
109  $relevantTests = [];
110  foreach ($this->tests as $test) {
112  if (in_array($groupName, $test->getAnnotationByName('group'))) {
113  $relevantTests[$test->getName()] = $test;
114  continue;
115  }
116  }
117 
118  return $relevantTests;
119  }
120 
128  private function initTestData()
129  {
130  $testDataParser = ObjectManagerFactory::getObjectManager()->create(TestDataParser::class);
131  $parsedTestArray = $testDataParser->readTestData();
132 
133  $testObjectExtractor = new TestObjectExtractor();
134 
135  if (!$parsedTestArray) {
136  trigger_error("Could not parse any test in xml.", E_USER_NOTICE);
137  return;
138  }
139 
140  $exceptionCollector = new ExceptionCollector();
141  foreach ($parsedTestArray[TestObjectHandler::XML_ROOT] as $testName => $testData) {
142  if (!is_array($testData)) {
143  continue;
144  }
145  try {
146  $this->tests[$testName] = $testObjectExtractor->extractTestData($testData);
147  } catch (XmlException $exception) {
148  $exceptionCollector->addError(self::class, $exception->getMessage());
149  }
150  }
151  $exceptionCollector->throwException();
152 
153  $testObjectExtractor->getAnnotationExtractor()->validateStoryTitleUniqueness();
154  $testObjectExtractor->getAnnotationExtractor()->validateTestCaseIdTitleUniqueness();
155  }
156 
163  private function extendTest($testObject)
164  {
165  if ($testObject->getParentName() !== null) {
166  return $this->extendUtil->extendTest($testObject);
167  }
168  return $testObject;
169  }
170 }