20
20
class ActionObject
21
21
{
22
22
const DATA_ENABLED_ATTRIBUTES = ["userInput " , "parameterArray " ];
23
- const SELECTOR_ENABLED_ATTRIBUTES = ['selector ' , 'dependentSelector ' ];
23
+ const SELECTOR_ENABLED_ATTRIBUTES = ['selector ' , 'dependentSelector ' , " selector1 " , " selector2 " ];
24
24
const MERGE_ACTION_ORDER_AFTER = 'after ' ;
25
25
const ACTION_ATTRIBUTE_URL = 'url ' ;
26
26
const ACTION_ATTRIBUTE_SELECTOR = 'selector ' ;
27
27
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.\[\]() \',$ ]+}}/ ' ;
30
29
31
30
/**
32
31
* The unique identifier for the action
@@ -298,15 +297,7 @@ private function stripAndReturnParameters($reference)
298
297
*/
299
298
private function findAndReplaceReferences ($ objectHandler , $ inputString )
300
299
{
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 );
310
301
if (empty ($ matches [0 ])) {
311
302
return $ inputString ;
312
303
}
@@ -332,7 +323,7 @@ private function findAndReplaceReferences($objectHandler, $inputString)
332
323
throw new TestReferenceException ("Could not resolve entity reference " . $ inputString );
333
324
}
334
325
$ parameterized = $ obj ->getElement ($ objField )->isParameterized ();
335
- $ replacement = $ obj ->getElement ($ objField )->getLocator ();
326
+ $ replacement = $ obj ->getElement ($ objField )->getSelector ();
336
327
$ this ->timeout = $ obj ->getElement ($ objField )->getTimeout ();
337
328
break ;
338
329
case (get_class ($ obj ) == EntityDataObject::class):
@@ -383,24 +374,38 @@ private function matchParameterReferences($reference, $parameters)
383
374
{
384
375
preg_match_all ('/{{[\w.]+}}/ ' , $ reference , $ varMatches );
385
376
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
+ }
386
384
throw new TestReferenceException (
387
385
"Parameter Resolution Failed: Not enough parameters given for reference " .
388
- $ reference . ". Parameters Given: " . implode ( " , " , $ parameters )
386
+ $ reference . ". Parameters Given: " . $ parametersGiven
389
387
);
390
388
} elseif (count ($ varMatches [0 ]) < count ($ parameters )) {
391
389
throw new TestReferenceException (
392
390
"Parameter Resolution Failed: Too many parameters given for reference " .
393
- $ reference . ". Parameters Given: " . implode (", " , $ parameters )
391
+ $ reference . ". Parameters Given: " . implode (", " , $ parameters )
394
392
);
395
393
}
396
394
397
395
//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
398
398
$ resolvedParameters = [];
399
399
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
+ }
404
409
}
405
410
406
411
$ resolveIndex = 0 ;
0 commit comments