Revision: 2289
Author: janne.t.harkonen
Date: Mon Oct 12 17:11:14 2009
Log: Implementation for optional Given/When/Then/And
http://code.google.com/p/robotframework/source/detail?r=2289

Modified:
 /trunk/src/robot/running/handlers.py
 /trunk/src/robot/running/namespace.py
 /trunk/src/robot/running/userkeyword.py

=======================================
--- /trunk/src/robot/running/handlers.py        Sun Apr 19 13:26:54 2009
+++ /trunk/src/robot/running/handlers.py        Mon Oct 12 17:11:14 2009
@@ -17,7 +17,7 @@
 from types import MethodType, FunctionType

 from robot import utils
-from robot.errors import DataError, FrameworkError
+from robot.errors import FrameworkError
 from robot.common import BaseHandler
 from runkwregister import RUN_KW_REGISTER

=======================================
--- /trunk/src/robot/running/namespace.py       Mon Aug 10 05:33:52 2009
+++ /trunk/src/robot/running/namespace.py       Mon Oct 12 17:11:14 2009
@@ -12,8 +12,7 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.

-
-import os.path
+import copy

 from robot import utils
 from robot.errors import FrameworkError, DataError
@@ -154,11 +153,7 @@

     def get_handler(self, name):
         try:
-            handler = None
-            if '.' in name:
-                handler = self._get_explicit_handler(name)
-            if handler is None:
-                handler = self._get_implicit_handler(name)
+            handler = self._get_handler(name)
             if handler is None:
                 raise DataError("No keyword with name '%s' found." % name)
         except:
@@ -170,6 +165,26 @@
             pass
         return handler

+    def _get_handler(self, name):
+        handler = None
+        if '.' in name:
+            handler = self._get_explicit_handler(name)
+        if not handler:
+            handler = self._get_implicit_handler(name)
+        if not handler:
+            handler = self._get_bdd_style_handler(name)
+        return handler
+
+    def _get_bdd_style_handler(self, name):
+        for prefix in ['given ', 'when ', 'then ', 'and ']:
+            if name.lower().startswith(prefix):
+                handler = self._get_handler(name[len(prefix):])
+                if handler:
+                    handler = copy.copy(handler)
+                    handler.name = name
+                return handler
+        return None
+
     def _get_implicit_handler(self, name):
for method in [ self._get_handler_from_test_case_file_user_keywords,
                         self._get_handler_from_resource_file_user_keywords,
=======================================
--- /trunk/src/robot/running/userkeyword.py     Mon Aug 10 06:05:35 2009
+++ /trunk/src/robot/running/userkeyword.py     Mon Oct 12 17:11:14 2009
@@ -100,15 +100,13 @@


 class UserHandler(BaseHandler):
-
     type = 'user'
+    longname = property(lambda self: not self._libname and self.name
+                        or '%s.%s' % (self._libname, self.name))

     def __init__(self, handlerdata, libname):
         self.name = utils.printable_name(handlerdata.name)
-        if libname is None:
-            self.longname = self.name
-        else:
-            self.longname = '%s.%s' % (libname, self.name)
+        self._libname = libname
         self._set_variable_dependent_metadata(handlerdata.metadata)
self.keywords = [ KeywordFactory(kw) for kw in handlerdata.keywords ]
         self.args = handlerdata.args
@@ -117,7 +115,7 @@
         self.minargs = handlerdata.minargs
         self.maxargs = handlerdata.maxargs
         self.return_value = handlerdata.return_value
-
+
     def _set_variable_dependent_metadata(self, metadata):
         self._doc = metadata.get('Documentation', '')
         self.doc = utils.unescape(self._doc)
@@ -215,14 +213,13 @@


 class EmbeddedArgs(UserHandler):
-
+
     def __init__(self, name, template):
         match = template.name_regexp.match(name)
         if not match:
             raise TypeError('Does not match given name')
         self.embedded_args = zip(template.embedded_args, match.groups())
         self.name = name
-        self.longname = template.longname[:-len(template.name)] + self.name
         self.origname = template.name
         self._copy_attrs_from_template(template)

@@ -232,6 +229,7 @@
         return UserHandler.run(self, output, namespace, args)

     def _copy_attrs_from_template(self, template):
+        self._libname = template._libname
         self.keywords = template.keywords
         self.args = template.args
         self.defaults = template.defaults

Reply via email to