[Checkins] SVN: zope.testbrowser/trunk/ More friendly error message from getControl() when index is out of bounds.

Marius Gedminas marius at pov.lt
Tue Feb 7 19:19:11 UTC 2012


Log message for revision 124328:
  More friendly error message from getControl() when index is out of bounds.

Changed:
  U   zope.testbrowser/trunk/CHANGES.txt
  U   zope.testbrowser/trunk/src/zope/testbrowser/README.txt
  U   zope.testbrowser/trunk/src/zope/testbrowser/browser.py

-=-
Modified: zope.testbrowser/trunk/CHANGES.txt
===================================================================
--- zope.testbrowser/trunk/CHANGES.txt	2012-02-07 19:09:30 UTC (rev 124327)
+++ zope.testbrowser/trunk/CHANGES.txt	2012-02-07 19:19:10 UTC (rev 124328)
@@ -12,6 +12,10 @@
   environment by setting it to ``None`` when ``Browser.handleErrors`` is
   ``True``.  This makes it easier to test error pages.
 
+- More friendly error message from getControl() et al when you specify
+  an index that is out of bounds.
+
+
 4.0.2 (2011-05-25)
 ------------------
 

Modified: zope.testbrowser/trunk/src/zope/testbrowser/README.txt
===================================================================
--- zope.testbrowser/trunk/src/zope/testbrowser/README.txt	2012-02-07 19:09:30 UTC (rev 124327)
+++ zope.testbrowser/trunk/src/zope/testbrowser/README.txt	2012-02-07 19:19:10 UTC (rev 124328)
@@ -516,6 +516,13 @@
     <ListControl name='ambiguous-subcontrol' type='select'>
     >>> browser.getControl('Sub-control Ambiguity', index=1).optionValue
     'ambiguous'
+    >>> browser.getControl('Sub-control Ambiguity', index=2)
+    Traceback (most recent call last):
+    ...
+    LookupError: label 'Sub-control Ambiguity'
+    Index 2 out of range, available choices are 0...1
+      0: <SelectControl(ambiguous-subcontrol=[*, ambiguous])>
+      1: <Item name='ambiguous' id=None contents='Sub-control Ambiguity Exemplified' value='ambiguous' label='Sub-control Ambiguity Exemplified'>
 
 Label searches are against stripped, whitespace-normalized, no-tag versions of
 the text. Text applied to searches is also stripped and whitespace normalized.

Modified: zope.testbrowser/trunk/src/zope/testbrowser/browser.py
===================================================================
--- zope.testbrowser/trunk/src/zope/testbrowser/browser.py	2012-02-07 19:09:30 UTC (rev 124327)
+++ zope.testbrowser/trunk/src/zope/testbrowser/browser.py	2012-02-07 19:19:10 UTC (rev 124328)
@@ -47,8 +47,12 @@
         else:
             try:
                 return intermediate[index]
-            except KeyError:
-                msg = '%s index %d' % (msg, index)
+            except IndexError:
+                msg = '%s\nIndex %d out of range, available choices are 0...%d' % (
+                            msg, index, len(intermediate) - 1)
+                if choice_repr:
+                    msg += ''.join(['\n  %d: %s' % (n, choice_repr(choice))
+                                    for n, choice in enumerate(intermediate)])
     raise LookupError(msg)
 
 def control_form_tuple_repr((ctrl, form)):



More information about the checkins mailing list