Skip to content

Commit

Permalink
Expand @{list} used as embedded arg if kw accepts varargs.
Browse files Browse the repository at this point in the history
Fixes #4364.
  • Loading branch information
pekkaklarck committed Aug 13, 2022
1 parent 35b4881 commit 2b7c1e8
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,13 @@ Embedded argument count must match accepted arguments
Optional Non-Embedded Args Are Okay
Check Test Case ${TESTNAME}

Star Args With Embedded Args Are Okay
Varargs With Embedded Args Are Okay
Check Test Case ${TESTNAME}

List variable is expanded when keyword accepts varargs
Check Test Case ${TESTNAME}

Scalar variable containing list is not expanded when keyword accepts varargs
Check Test Case ${TESTNAME}

Same name with different regexp works
Expand Down
16 changes: 12 additions & 4 deletions atest/testdata/keywords/embedded_arguments_library_keywords.robot
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ ${INDENT} ${SPACE * 4}
${foo} foo
${bar} bar
${zap} zap
@{list} first ${2} third

*** Test Cases ***
Embedded Arguments In Library Keyword Name
Expand Down Expand Up @@ -146,10 +147,17 @@ Embedded argument count must match accepted arguments
Optional Non-Embedded Args Are Okay
Optional Non-Embedded Args Are Okay

Star Args With Embedded Args Are Okay
@{ret} = Star Args With Embedded Args are Okay
@{args} = Create List Embedded Okay
Should Be Equal ${ret} ${args}
Varargs With Embedded Args Are Okay
@{ret} = Varargs With Embedded Args are Okay
Should Be Equal ${ret} ${{['Embedded', 'Okay']}}

List variable is expanded when keyword accepts varargs
@{ret} = Varargs With @{list} Args are Okay
Should Be Equal ${ret} ${{['first', 2, 'third', 'Okay']}}

Scalar variable containing list is not expanded when keyword accepts varargs
@{ret} = Varargs With ${list} Args are Okay
Should Be Equal ${ret} ${{[['first', 2, 'third'], 'Okay']}}

Same name with different regexp works
It is a car
Expand Down
4 changes: 2 additions & 2 deletions atest/testdata/keywords/resources/embedded_args_in_lk_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ def optional_args_are_okay(nonembedded=1, okay=2, indeed=3):
pass


@keyword(name="Star Args With ${embedded} Args Are ${okay}")
def star_args_are_okay(*args):
@keyword(name="Varargs With ${embedded} Args Are ${okay}")
def varargs_are_okay(*args):
return args


Expand Down
3 changes: 1 addition & 2 deletions src/robot/running/arguments/argumentresolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ def __init__(self, argspec, resolve_named=True,

def resolve(self, arguments, variables=None):
positional, named = self._named_resolver.resolve(arguments, variables)
positional, named = self._variable_replacer.replace(positional, named,
variables)
positional, named = self._variable_replacer.replace(positional, named, variables)
positional, named = self._dict_to_kwargs.handle(positional, named)
self._argument_validator.validate(positional, named,
dryrun=variables is None)
Expand Down
7 changes: 5 additions & 2 deletions src/robot/running/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,13 @@ def create_runner(self, name):
return EmbeddedArgumentsRunner(self, name)

def resolve_arguments(self, args, variables=None):
argspec = self._orig_handler.arguments
if variables:
args = [variables.replace_scalar(a) for a in args]
if argspec.var_positional:
args = variables.replace_list(args)
else:
args = [variables.replace_scalar(a) for a in args]
self.embedded.validate(args)
argspec = self._orig_handler.arguments
return argspec.convert(args, named={}, converters=self.library.converters,
dry_run=not variables)

Expand Down

0 comments on commit 2b7c1e8

Please sign in to comment.