Revision: 3242
Author: janne.t.harkonen
Date: Mon May 10 00:49:58 2010
Log: check argument limits for dry run
http://code.google.com/p/robotframework/source/detail?r=3242
Modified:
/trunk/src/robot/running/arguments.py
/trunk/src/robot/running/handlers.py
/trunk/src/robot/running/userkeyword.py
=======================================
--- /trunk/src/robot/running/arguments.py Tue Apr 20 06:46:51 2010
+++ /trunk/src/robot/running/arguments.py Mon May 10 00:49:58 2010
@@ -16,6 +16,7 @@
from types import MethodType, FunctionType
from robot.errors import DataError, FrameworkError
+from robot.variables import is_list_var
from robot import utils
if utils.is_jython:
@@ -40,6 +41,9 @@
def check_arg_limits(self, args, namedargs={}):
self._arg_limit_checker.check_arg_limits(args, namedargs)
+ def check_arg_limits_for_dry_run(self, args):
+ self._arg_limit_checker.check_arg_limits_for_dry_run(args)
+
def _tracelog_args(self, logger, posargs, namedargs={}):
if self._logger_not_available_during_library_init(logger):
return
@@ -212,7 +216,7 @@
return args, {}
-class UserKeywordArguments(object):
+class UserKeywordArguments(_KeywordArguments):
def __init__(self, argnames, defaults, varargs, minargs, maxargs,
name):
self.names = list(argnames) # Python 2.5 does not support indexing
tuples
@@ -405,10 +409,17 @@
self._type = type_
def check_arg_limits(self, args, namedargs={}):
- arg_count = len(args) + len(namedargs)
+ self._check_arg_limits(len(args) + len(namedargs))
+
+ def check_arg_limits_for_dry_run(self, args):
+ arg_count = len(args)
+ if args and is_list_var(args[-1]):
+ arg_count = self.minargs
+ self._check_arg_limits(arg_count)
+
+ def _check_arg_limits(self, arg_count):
if not self.minargs <= arg_count <= self.maxargs:
self._raise_inv_args(arg_count)
- return args
def check_missing_args(self, args, arg_count):
for a in args:
=======================================
--- /trunk/src/robot/running/handlers.py Fri May 7 14:05:39 2010
+++ /trunk/src/robot/running/handlers.py Mon May 10 00:49:58 2010
@@ -90,7 +90,14 @@
def run(self, context, args):
if context.dry_run:
- return None
+ return self._dry_run(args)
+ return self._run(context, args)
+
+ def _dry_run(self, args):
+ self.arguments.check_arg_limits_for_dry_run(args)
+ return None
+
+ def _run(self, context, args):
output = context.output
positional, named = self.arguments.resolve(args,
context.get_current_vars(),
output)
=======================================
--- /trunk/src/robot/running/userkeyword.py Fri May 7 05:25:59 2010
+++ /trunk/src/robot/running/userkeyword.py Mon May 10 00:49:58 2010
@@ -139,9 +139,21 @@
def _run(self, context, arguments):
variables = context.get_current_vars()
+ if context.dry_run:
+ return self._dry_run(context, variables, arguments)
+ 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)
+
+ def _variable_resolving_run(self, context, variables, arguments):
argument_values = self.arguments.resolve(arguments, variables)
- output = context.output
- self.arguments.set_variables(argument_values, variables, output)
+ 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)