[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