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)

Reply via email to