[Erp5-report] r44975 arnaud.fontaine - /erp5/trunk/utils/erp5.utils.test_browser/src/erp5/u...

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Apr 1 09:03:37 CEST 2011


Author: arnaud.fontaine
Date: Fri Apr  1 09:03:37 2011
New Revision: 44975

URL: http://svn.erp5.org?rev=44975&view=rev
Log:
Also add time*In{Second,Pystone} methods to Link by looking at the bases

Modified:
    erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py

Modified: erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py?rev=44975&r1=44974&r2=44975&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py [utf8] (original)
+++ erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py [utf8] Fri Apr  1 09:03:37 2011
@@ -105,6 +105,14 @@ def measurementMetaClass(prefix):
         if attribute_name.startswith(prefix) and callable(attribute):
           applyMeasure(attribute)
 
+      # And also create these methods by looking at the bases
+      for attribute_name in dir(bases[0]):
+        if attribute_name not in dictionary and \
+           attribute_name.startswith(prefix):
+          attribute = getattr(bases[0], attribute_name)
+          if callable(attribute):
+            applyMeasure(attribute)
+
       # lastRequestSeconds and lastRequestPystones properties are only
       # defined on classes inheriting from zope.testbrowser.browser.Browser,
       # so create these properties for all other classes too
@@ -261,7 +269,8 @@ class Browser(ExtendedTestBrowser):
     self._main_form = ContextMainForm(self, form)
     return self._main_form
 
-  def getLink(self, url=None, class_attribute=None, *args, **kwargs):
+  def getLink(self, text=None, url=None, id=None, index=0,
+              class_attribute=None):
     """
     Override original C{getLink} allowing to not consider the HTTP
     query string unless it is explicitly given.
@@ -293,7 +302,31 @@ class Browser(ExtendedTestBrowser):
     elif url and '?' not in url:
       url += '?'
 
-    return super(Browser, self).getLink(url=url, *args, **kwargs)
+    if id is not None:
+      def predicate(link):
+        return dict(link.attrs).get('id') == id
+      args = {'predicate': predicate}
+    else:
+      import re
+      from zope.testbrowser.browser import RegexType
+
+      if isinstance(text, RegexType):
+        text_regex = text
+      elif text is not None:
+        text_regex = re.compile(re.escape(text), re.DOTALL)
+      else:
+        text_regex = None
+
+      if isinstance(url, RegexType):
+        url_regex = url
+      elif url is not None:
+        url_regex = re.compile(re.escape(url), re.DOTALL)
+      else:
+        url_regex = None
+      args = {'text_regex': text_regex, 'url_regex': url_regex}
+
+    args['nr'] = index
+    return LinkWithTime(self.mech_browser.find_link(**args), self)
 
   def getImportExportLink(self):
     """
@@ -843,3 +876,13 @@ class ContextMainForm(MainForm):
       control = control.getControl(value=input_element.get('value'))
 
     return control
+
+
+from zope.testbrowser.browser import Link
+
+class LinkWithTime(Link):
+  """
+  Only define to add timeClick*InSecond() and timeClick*InPystone()
+  methods
+  """
+  __metaclass__ = measurementMetaClass(prefix='click')



More information about the Erp5-report mailing list