[Checkins] SVN: z3c.form/trunk/ Refactored OutputChecker to its own module to allow using

Godefroid Chapelle gotcha at bubblenet.be
Fri Jul 31 19:08:59 EDT 2009


Log message for revision 102412:
  Refactored OutputChecker to its own module to allow using
  ``z3c.form.testing`` without needing to depend on ``lxml``
  for instance when testing ``plone.z3cform``
  

Changed:
  U   z3c.form/trunk/CHANGES.txt
  U   z3c.form/trunk/src/z3c/form/browser/tests.py
  A   z3c.form/trunk/src/z3c/form/outputchecker.py
  U   z3c.form/trunk/src/z3c/form/testing.py
  U   z3c.form/trunk/src/z3c/form/tests/test_doc.py

-=-
Modified: z3c.form/trunk/CHANGES.txt
===================================================================
--- z3c.form/trunk/CHANGES.txt	2009-07-31 22:49:24 UTC (rev 102411)
+++ z3c.form/trunk/CHANGES.txt	2009-07-31 23:08:58 UTC (rev 102412)
@@ -5,7 +5,8 @@
 Version 2.2.0 (unreleased)
 --------------------------
 
-- ...
+- Refactored OutputChecker to its own module to allow using 
+  ``z3c.form.testing`` without needing to depend on ``lxml``
 
 
 Version 2.1.0 (2009-07-22)

Modified: z3c.form/trunk/src/z3c/form/browser/tests.py
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/tests.py	2009-07-31 22:49:24 UTC (rev 102411)
+++ z3c.form/trunk/src/z3c/form/browser/tests.py	2009-07-31 23:08:58 UTC (rev 102412)
@@ -23,15 +23,17 @@
 from zope.testing.doctestunit import DocFileSuite
 
 from z3c.form import testing
+from z3c.form import outputchecker
 from z3c.form.ptcompat import AVAILABLE, Z3CPT_AVAILABLE
 
+
 def test_suite():
-    checker = testing.OutputChecker(doctest)
+    checker = outputchecker.OutputChecker(doctest)
 
     if AVAILABLE and Z3CPT_AVAILABLE:
         setups = (testing.setUpZPT, testing.setUpZ3CPT)
     else:
-        setups = (testing.setUpZPT,)
+        setups = (testing.setUpZPT, )
 
     tests = ((
         DocFileSuite('README.txt',

Added: z3c.form/trunk/src/z3c/form/outputchecker.py
===================================================================
--- z3c.form/trunk/src/z3c/form/outputchecker.py	                        (rev 0)
+++ z3c.form/trunk/src/z3c/form/outputchecker.py	2009-07-31 23:08:58 UTC (rev 102412)
@@ -0,0 +1,61 @@
+import doctest as pythondoctest
+
+import lxml.etree
+import lxml.doctestcompare
+
+import re
+
+
+class OutputChecker(lxml.doctestcompare.LHTMLOutputChecker):
+    """Doctest output checker which is better equippied to identify
+    HTML markup than the checker from the ``lxml.doctestcompare``
+    module. It also uses the text comparison function from the
+    built-in ``doctest`` module to allow the use of ellipsis."""
+
+    _repr_re = re.compile(
+        r'^<([A-Z]|[^>]+ (at|object) |[a-z]+ \'[A-Za-z0-9_.]+\'>)')
+
+    def __init__(self, doctest=pythondoctest):
+        self.doctest = doctest
+
+        # make sure these optionflags are registered
+        doctest.register_optionflag('PARSE_HTML')
+        doctest.register_optionflag('PARSE_XML')
+        doctest.register_optionflag('NOPARSE_MARKUP')
+
+    def _looks_like_markup(self, s):
+        s = s.replace('<BLANKLINE>', '\n').strip()
+        return (s.startswith('<')
+                and not self._repr_re.search(s))
+
+    def text_compare(self, want, got, strip):
+        if want is None:
+            want = ""
+        if got is None:
+            got = ""
+        checker = self.doctest.OutputChecker()
+        return checker.check_output(
+            want, got, self.doctest.ELLIPSIS|self.doctest.NORMALIZE_WHITESPACE)
+
+    def get_parser(self, want, got, optionflags):
+        NOPARSE_MARKUP = self.doctest.OPTIONFLAGS_BY_NAME.get(
+            "NOPARSE_MARKUP", 0)
+        PARSE_HTML = self.doctest.OPTIONFLAGS_BY_NAME.get(
+            "PARSE_HTML", 0)
+        PARSE_XML = self.doctest.OPTIONFLAGS_BY_NAME.get(
+            "PARSE_XML", 0)
+
+        parser = None
+        if NOPARSE_MARKUP & optionflags:
+            return None
+        if PARSE_HTML & optionflags:
+            parser = lxml.doctestcompare.html_fromstring
+        elif PARSE_XML & optionflags:
+            parser = lxml.etree.XML
+        elif (want.strip().lower().startswith('<html')
+              and got.strip().startswith('<html')):
+            parser = lxml.doctestcompare.html_fromstring
+        elif (self._looks_like_markup(want)
+              and self._looks_like_markup(got)):
+            parser = self.get_default_parser()
+        return parser

Modified: z3c.form/trunk/src/z3c/form/testing.py
===================================================================
--- z3c.form/trunk/src/z3c/form/testing.py	2009-07-31 22:49:24 UTC (rev 102411)
+++ z3c.form/trunk/src/z3c/form/testing.py	2009-07-31 23:08:58 UTC (rev 102412)
@@ -357,64 +357,6 @@
 
 
 ##########################
-import doctest as pythondoctest
-
-import lxml.etree
-import lxml.doctestcompare
-
-import re
-
-class OutputChecker(lxml.doctestcompare.LHTMLOutputChecker):
-    """Doctest output checker which is better equippied to identify
-    HTML markup than the checker from the ``lxml.doctestcompare``
-    module. It also uses the text comparison function from the
-    built-in ``doctest`` module to allow the use of ellipsis."""
-
-    _repr_re = re.compile(r'^<([A-Z]|[^>]+ (at|object) |[a-z]+ \'[A-Za-z0-9_.]+\'>)')
-
-    def __init__(self, doctest=pythondoctest):
-        self.doctest = doctest
-
-        # make sure these optionflags are registered
-        doctest.register_optionflag('PARSE_HTML')
-        doctest.register_optionflag('PARSE_XML')
-        doctest.register_optionflag('NOPARSE_MARKUP')
-
-    def _looks_like_markup(self, s):
-        s = s.replace('<BLANKLINE>', '\n').strip()
-        return (s.startswith('<')
-                and not self._repr_re.search(s))
-
-    def text_compare(self, want, got, strip):
-        if want is None: want = ""
-        if got is None: got = ""
-        checker = self.doctest.OutputChecker()
-        return checker.check_output(
-            want, got, self.doctest.ELLIPSIS|self.doctest.NORMALIZE_WHITESPACE)
-
-    def get_parser(self, want, got, optionflags):
-        NOPARSE_MARKUP = self.doctest.OPTIONFLAGS_BY_NAME.get(
-            "NOPARSE_MARKUP", 0)
-        PARSE_HTML = self.doctest.OPTIONFLAGS_BY_NAME.get(
-            "PARSE_HTML", 0)
-        PARSE_XML = self.doctest.OPTIONFLAGS_BY_NAME.get(
-            "PARSE_XML", 0)
-
-        parser = None
-        if NOPARSE_MARKUP & optionflags:
-            return None
-        if PARSE_HTML & optionflags:
-            parser = lxml.doctestcompare.html_fromstring
-        elif PARSE_XML & optionflags:
-            parser = lxml.etree.XML
-        elif (want.strip().lower().startswith('<html')
-              and got.strip().startswith('<html')):
-            parser = lxml.doctestcompare.html_fromstring
-        elif (self._looks_like_markup(want)
-              and self._looks_like_markup(got)):
-            parser = self.get_default_parser()
-        return parser
-
 def render(view, xpath='.'):
     method = getattr(view, 'render', None)
     if method is None:

Modified: z3c.form/trunk/src/z3c/form/tests/test_doc.py
===================================================================
--- z3c.form/trunk/src/z3c/form/tests/test_doc.py	2009-07-31 22:49:24 UTC (rev 102411)
+++ z3c.form/trunk/src/z3c/form/tests/test_doc.py	2009-07-31 23:08:58 UTC (rev 102412)
@@ -24,15 +24,17 @@
 from zope.app.testing import placelesssetup
 
 from z3c.form import testing
+from z3c.form import outputchecker
 from z3c.form.ptcompat import AVAILABLE, Z3CPT_AVAILABLE
 
+
 def test_suite():
-    checker = testing.OutputChecker(doctest)
+    checker = outputchecker.OutputChecker(doctest)
 
     if AVAILABLE and Z3CPT_AVAILABLE:
         setups = (testing.setUpZPT, testing.setUpZ3CPT)
     else:
-        setups = (testing.setUpZPT,)
+        setups = (testing.setUpZPT, )
 
     tests = ((
         doctest.DocFileSuite(



More information about the Checkins mailing list