Revision: 3262
Author: janne.t.harkonen
Date: Tue May 11 05:53:44 2010
Log: Better handling of UK args with dryrun
http://code.google.com/p/robotframework/source/detail?r=3262
Modified:
/trunk/src/robot/running/arguments.py
/trunk/src/robot/running/keywords.py
/trunk/src/robot/running/userkeyword.py
=======================================
--- /trunk/src/robot/running/arguments.py Tue May 11 00:22:37 2010
+++ /trunk/src/robot/running/arguments.py Tue May 11 05:53:44 2010
@@ -216,7 +216,7 @@
return args, {}
-class UserKeywordArguments(_KeywordArguments):
+class UserKeywordArguments(object):
def __init__(self, argnames, defaults, varargs, minargs, maxargs,
name):
self.names = list(argnames) # Python 2.5 does not support indexing
tuples
@@ -226,6 +226,17 @@
self._arg_limit_checker = _ArgLimitChecker(minargs, maxargs,
name, 'Keyword')
+ def resolve_arguments_for_dry_run(self, arguments):
+ self._arg_limit_checker.check_arg_limits_for_dry_run(arguments)
+ required_number_of_args = self.minargs + len(self.defaults)
+ needed_args = required_number_of_args - len(arguments)
+ if needed_args > 0:
+ return self._fill_missing_args(arguments, needed_args)
+ return arguments
+
+ def _fill_missing_args(self, arguments, needed):
+ return arguments + needed * [None]
+
def resolve(self, arguments, variables):
positional, varargs, named = self._resolve_arg_usage(arguments,
variables)
self._arg_limit_checker.check_arg_limits(positional+varargs, named)
=======================================
--- /trunk/src/robot/running/keywords.py Tue May 11 05:53:32 2010
+++ /trunk/src/robot/running/keywords.py Tue May 11 05:53:44 2010
@@ -247,9 +247,9 @@
raise error
def _run(self, context):
- items = self._replace_vars_from_items(context.get_current_vars())
errors = []
- for i in self._iteration_steps(items, context):
+ items, iteration_steps =
self._get_items_and_iteration_steps(context)
+ for i in iteration_steps:
values = items[i:i+len(self.vars)]
err = self._run_one_round(context, self.vars, values)
if err:
@@ -259,10 +259,11 @@
if errors:
raise ExecutionFailures(errors)
- def _iteration_steps(self, items, context):
+ def _get_items_and_iteration_steps(self, context):
if context.dry_run:
- return [0]
- return range(0, len(items), len(self.vars))
+ return self.vars, [0]
+ items = self._replace_vars_from_items(context.get_current_vars())
+ return items, range(0, len(items), len(self.vars))
def _run_one_round(self, context, variables, values):
foritem = ForItemKeyword(variables, values)
=======================================
--- /trunk/src/robot/running/userkeyword.py Mon May 10 00:49:58 2010
+++ /trunk/src/robot/running/userkeyword.py Tue May 11 05:53:44 2010
@@ -144,20 +144,21 @@
return self._variable_resolving_run(context, variables, arguments)
def _dry_run(self, context, variables, arguments):
- self.arguments.check_arg_limits_for_dry_run(arguments)
- return self._execute(context, variables)
+ args = self.arguments.resolve_arguments_for_dry_run(arguments)
+ self._execute(context, variables, args)
+ return None
def _variable_resolving_run(self, context, variables, arguments):
argument_values = self.arguments.resolve(arguments, variables)
+ self._execute(context, variables, argument_values)
+ return self._get_return_value(variables)
+
+ def _execute(self, context, variables, argument_values):
self.arguments.set_variables(argument_values, variables,
context.output)
- return self._execute(context, variables)
-
- def _execute(self, context, variables):
self._verify_keyword_is_valid()
self.timeout.start()
self.keywords.run(context)
- return self._get_return_value(variables)
def _verify_keyword_is_valid(self):
if self._errors: