Fix test for xml.etree when using a non-ascii path. And use check_warnings instead of catch_warnings.

This commit is contained in:
Florent Xicluna 2010-03-31 21:21:54 +00:00
parent f7f2d6f51e
commit 26cc99da2a
1 changed files with 26 additions and 16 deletions

View File

@ -12,6 +12,7 @@
# except if the test is specific to the Python implementation. # except if the test is specific to the Python implementation.
import sys import sys
import cgi
from test import test_support from test import test_support
from test.test_support import findfile from test.test_support import findfile
@ -1292,7 +1293,7 @@ XINCLUDE["default.xml"] = """\
<p>Example.</p> <p>Example.</p>
<xi:include href="{}"/> <xi:include href="{}"/>
</document> </document>
""".format(SIMPLE_XMLFILE) """.format(cgi.escape(SIMPLE_XMLFILE, True))
def xinclude_loader(href, parse="xml", encoding=None): def xinclude_loader(href, parse="xml", encoding=None):
try: try:
@ -1793,6 +1794,24 @@ def check_issue6565():
class CleanContext(object): class CleanContext(object):
"""Provide default namespace mapping and path cache.""" """Provide default namespace mapping and path cache."""
checkwarnings = None
def __init__(self, quiet=False):
deprecations = (
# Search behaviour is broken if search path starts with "/".
("This search is broken in 1.3 and earlier, and will be fixed "
"in a future version. If you rely on the current behaviour, "
"change it to '.+'", FutureWarning),
# Element.getchildren() and Element.getiterator() are deprecated.
("This method will be removed in future versions. "
"Use .+ instead.", DeprecationWarning),
("This method will be removed in future versions. "
"Use .+ instead.", PendingDeprecationWarning),
# XMLParser.doctype() is deprecated.
("This method of XMLParser is deprecated. Define doctype.. "
"method on the TreeBuilder target.", DeprecationWarning))
self.checkwarnings = test_support.check_warnings(*deprecations,
quiet=quiet)
def __enter__(self): def __enter__(self):
from xml.etree import ElementTree from xml.etree import ElementTree
@ -1802,35 +1821,26 @@ class CleanContext(object):
ElementTree._namespace_map = self._nsmap.copy() ElementTree._namespace_map = self._nsmap.copy()
# Copy the path cache (should be empty) # Copy the path cache (should be empty)
ElementTree.ElementPath._cache = self._path_cache.copy() ElementTree.ElementPath._cache = self._path_cache.copy()
self.checkwarnings.__enter__()
def __exit__(self, *args): def __exit__(self, *args):
from xml.etree import ElementTree from xml.etree import ElementTree
# Restore mapping and path cache # Restore mapping and path cache
ElementTree._namespace_map = self._nsmap ElementTree._namespace_map = self._nsmap
ElementTree.ElementPath._cache = self._path_cache ElementTree.ElementPath._cache = self._path_cache
self.checkwarnings.__exit__(*args)
def test_main(module_name='xml.etree.ElementTree'): def test_main(module_name='xml.etree.ElementTree'):
import warnings
from test import test_xml_etree from test import test_xml_etree
def ignore(message, category=DeprecationWarning):
warnings.filterwarnings("ignore", message, category) use_py_module = (module_name == 'xml.etree.ElementTree')
# The same doctests are used for both the Python and the C implementations # The same doctests are used for both the Python and the C implementations
assert test_xml_etree.ET.__name__ == module_name assert test_xml_etree.ET.__name__ == module_name
with warnings.catch_warnings(), CleanContext(): # XXX the C module should give the same warnings as the Python module
# Search behaviour is broken if search path starts with "/". with CleanContext(quiet=not use_py_module):
ignore("This search is broken in 1.3 and earlier, and will be fixed "
"in a future version. If you rely on the current behaviour, "
"change it to '.+'", FutureWarning)
# Element.getchildren() and Element.getiterator() are deprecated.
ignore("This method will be removed in future versions. "
"Use .+ instead.")
# XMLParser.doctype() is deprecated.
ignore("This method of XMLParser is deprecated. "
"Define doctype.. method on the TreeBuilder target.")
test_support.run_doctest(test_xml_etree, verbosity=True) test_support.run_doctest(test_xml_etree, verbosity=True)
# The module should not be changed by the tests # The module should not be changed by the tests