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