2020class ActionObject
2121{
2222 const DATA_ENABLED_ATTRIBUTES = ["userInput " , "parameterArray " ];
23- const SELECTOR_ENABLED_ATTRIBUTES = ['selector ' , 'dependentSelector ' ];
23+ const SELECTOR_ENABLED_ATTRIBUTES = ['selector ' , 'dependentSelector ' , " selector1 " , " selector2 " ];
2424 const MERGE_ACTION_ORDER_AFTER = 'after ' ;
2525 const ACTION_ATTRIBUTE_URL = 'url ' ;
2626 const ACTION_ATTRIBUTE_SELECTOR = 'selector ' ;
2727 const ACTION_ATTRIBUTE_VARIABLE_REGEX_PARAMETER = '/\(.+\)/ ' ;
28- const ACTION_ATTRIBUTE_VARIABLE_REGEX_PATTERN = '/{{[\w.\[\]]+}}/ ' ;
29- const ACTION_ATTRIBUTE_VARIABLE_REGEX_NESTED = '/{{[\w.\[\]() \',${} ]+}}/ ' ;
28+ const ACTION_ATTRIBUTE_VARIABLE_REGEX_PATTERN = '/{{[\w.\[\]() \',$ ]+}}/ ' ;
3029
3130 /**
3231 * The unique identifier for the action
@@ -298,15 +297,7 @@ private function stripAndReturnParameters($reference)
298297 */
299298 private function findAndReplaceReferences ($ objectHandler , $ inputString )
300299 {
301- //Determine if there are Parethesis and parameters. If not, use strict regex. If so, use nested regex.
302- preg_match_all (ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_PARAMETER , $ inputString , $ variableMatches );
303- if (empty ($ variableMatches [0 ])) {
304- $ regex = ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_PATTERN ;
305- } else {
306- $ regex = ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_NESTED ;
307- }
308- preg_match_all ($ regex , $ inputString , $ matches );
309-
300+ preg_match_all (ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_PATTERN , $ inputString , $ matches );
310301 if (empty ($ matches [0 ])) {
311302 return $ inputString ;
312303 }
@@ -332,7 +323,7 @@ private function findAndReplaceReferences($objectHandler, $inputString)
332323 throw new TestReferenceException ("Could not resolve entity reference " . $ inputString );
333324 }
334325 $ parameterized = $ obj ->getElement ($ objField )->isParameterized ();
335- $ replacement = $ obj ->getElement ($ objField )->getLocator ();
326+ $ replacement = $ obj ->getElement ($ objField )->getSelector ();
336327 $ this ->timeout = $ obj ->getElement ($ objField )->getTimeout ();
337328 break ;
338329 case (get_class ($ obj ) == EntityDataObject::class):
@@ -383,24 +374,38 @@ private function matchParameterReferences($reference, $parameters)
383374 {
384375 preg_match_all ('/{{[\w.]+}}/ ' , $ reference , $ varMatches );
385376 if (count ($ varMatches [0 ]) > count ($ parameters )) {
377+ if (is_array ($ parameters )) {
378+ $ parametersGiven = implode (", " , $ parameters );
379+ } elseif ($ parameters == null ) {
380+ $ parametersGiven = "NONE " ;
381+ } else {
382+ $ parametersGiven = $ parameters ;
383+ }
386384 throw new TestReferenceException (
387385 "Parameter Resolution Failed: Not enough parameters given for reference " .
388- $ reference . ". Parameters Given: " . implode ( " , " , $ parameters )
386+ $ reference . ". Parameters Given: " . $ parametersGiven
389387 );
390388 } elseif (count ($ varMatches [0 ]) < count ($ parameters )) {
391389 throw new TestReferenceException (
392390 "Parameter Resolution Failed: Too many parameters given for reference " .
393- $ reference . ". Parameters Given: " . implode (", " , $ parameters )
391+ $ reference . ". Parameters Given: " . implode (", " , $ parameters )
394392 );
395393 }
396394
397395 //Attempt to Resolve {{data}} references to actual output.
396+ //If regex matched it means that it's either a 'StringLiteral' or $key.data$/$$key.data$$ reference.
397+ //Else assume it's a normal {{data.key}} reference and recurse through findAndReplace
398398 $ resolvedParameters = [];
399399 foreach ($ parameters as $ parameter ) {
400- $ resolvedParameters [] = $ this ->findAndReplaceReferences (
401- DataObjectHandler::getInstance (),
402- $ parameter
403- );
400+ preg_match_all ("/[$'][\w.$]+[$']/ " , $ parameter , $ match );
401+ if (!empty ($ match [0 ])) {
402+ $ resolvedParameters [] = ltrim (rtrim ($ parameter , "' " ), "' " );
403+ } else {
404+ $ resolvedParameters [] = $ this ->findAndReplaceReferences (
405+ DataObjectHandler::getInstance (),
406+ '{{ ' . $ parameter . '}} '
407+ );
408+ }
404409 }
405410
406411 $ resolveIndex = 0 ;
0 commit comments