Issue #2175: Added tests for xml.sax.saxutils.prepare_input_source().
Made test XML files non-ASCII.
This commit is contained in:
parent
2379d541dd
commit
aa9563c1b8
|
@ -49,8 +49,14 @@ class MinidomTest(unittest.TestCase):
|
|||
t = node.wholeText
|
||||
self.confirm(t == s, "looking for %r, found %r" % (s, t))
|
||||
|
||||
def testParseFromFile(self):
|
||||
with open(tstfile) as file:
|
||||
def testParseFromBinaryFile(self):
|
||||
with open(tstfile, 'rb') as file:
|
||||
dom = parse(file)
|
||||
dom.unlink()
|
||||
self.confirm(isinstance(dom, Document))
|
||||
|
||||
def testParseFromTextFile(self):
|
||||
with open(tstfile, 'r', encoding='iso-8859-1') as file:
|
||||
dom = parse(file)
|
||||
dom.unlink()
|
||||
self.confirm(isinstance(dom, Document))
|
||||
|
|
|
@ -10,7 +10,7 @@ except SAXReaderNotAvailable:
|
|||
# don't try to test this module if we cannot create a parser
|
||||
raise unittest.SkipTest("no XML parsers available")
|
||||
from xml.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \
|
||||
XMLFilterBase
|
||||
XMLFilterBase, prepare_input_source
|
||||
from xml.sax.expatreader import create_parser
|
||||
from xml.sax.handler import feature_namespaces
|
||||
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
|
||||
|
@ -172,6 +172,60 @@ class SaxutilsTest(unittest.TestCase):
|
|||
p = make_parser(['xml.parsers.no_such_parser'])
|
||||
|
||||
|
||||
class PrepareInputSourceTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.file = support.TESTFN
|
||||
with open(self.file, "w") as tmp:
|
||||
tmp.write("This was read from a file.")
|
||||
|
||||
def tearDown(self):
|
||||
support.unlink(self.file)
|
||||
|
||||
def make_byte_stream(self):
|
||||
return BytesIO(b"This is a byte stream.")
|
||||
|
||||
def checkContent(self, stream, content):
|
||||
self.assertIsNotNone(stream)
|
||||
self.assertEqual(stream.read(), content)
|
||||
stream.close()
|
||||
|
||||
|
||||
def test_byte_stream(self):
|
||||
# If the source is an InputSource that does not have a character
|
||||
# stream but does have a byte stream, use the byte stream.
|
||||
src = InputSource(self.file)
|
||||
src.setByteStream(self.make_byte_stream())
|
||||
prep = prepare_input_source(src)
|
||||
self.assertIsNone(prep.getCharacterStream())
|
||||
self.checkContent(prep.getByteStream(),
|
||||
b"This is a byte stream.")
|
||||
|
||||
def test_system_id(self):
|
||||
# If the source is an InputSource that has neither a character
|
||||
# stream nor a byte stream, open the system ID.
|
||||
src = InputSource(self.file)
|
||||
prep = prepare_input_source(src)
|
||||
self.assertIsNone(prep.getCharacterStream())
|
||||
self.checkContent(prep.getByteStream(),
|
||||
b"This was read from a file.")
|
||||
|
||||
def test_string(self):
|
||||
# If the source is a string, use it as a system ID and open it.
|
||||
prep = prepare_input_source(self.file)
|
||||
self.assertIsNone(prep.getCharacterStream())
|
||||
self.checkContent(prep.getByteStream(),
|
||||
b"This was read from a file.")
|
||||
|
||||
def test_binary_file(self):
|
||||
# If the source is a binary file-like object, use it as a byte
|
||||
# stream.
|
||||
prep = prepare_input_source(self.make_byte_stream())
|
||||
self.assertIsNone(prep.getCharacterStream())
|
||||
self.checkContent(prep.getByteStream(),
|
||||
b"This is a byte stream.")
|
||||
|
||||
|
||||
# ===== XMLGenerator
|
||||
|
||||
class XmlgenTest:
|
||||
|
@ -622,7 +676,7 @@ class ExpatReaderTest(XmlTestBase):
|
|||
|
||||
# ===== XMLReader support
|
||||
|
||||
def test_expat_file(self):
|
||||
def test_expat_binary_file(self):
|
||||
parser = create_parser()
|
||||
result = BytesIO()
|
||||
xmlgen = XMLGenerator(result)
|
||||
|
@ -633,8 +687,19 @@ class ExpatReaderTest(XmlTestBase):
|
|||
|
||||
self.assertEqual(result.getvalue(), xml_test_out)
|
||||
|
||||
def test_expat_text_file(self):
|
||||
parser = create_parser()
|
||||
result = BytesIO()
|
||||
xmlgen = XMLGenerator(result)
|
||||
|
||||
parser.setContentHandler(xmlgen)
|
||||
with open(TEST_XMLFILE, 'rt', encoding='iso-8859-1') as f:
|
||||
parser.parse(f)
|
||||
|
||||
self.assertEqual(result.getvalue(), xml_test_out)
|
||||
|
||||
@requires_nonascii_filenames
|
||||
def test_expat_file_nonascii(self):
|
||||
def test_expat_binary_file_nonascii(self):
|
||||
fname = support.TESTFN_UNICODE
|
||||
shutil.copyfile(TEST_XMLFILE, fname)
|
||||
self.addCleanup(support.unlink, fname)
|
||||
|
@ -644,7 +709,7 @@ class ExpatReaderTest(XmlTestBase):
|
|||
xmlgen = XMLGenerator(result)
|
||||
|
||||
parser.setContentHandler(xmlgen)
|
||||
parser.parse(open(fname))
|
||||
parser.parse(open(fname, 'rb'))
|
||||
|
||||
self.assertEqual(result.getvalue(), xml_test_out)
|
||||
|
||||
|
@ -826,7 +891,7 @@ class ExpatReaderTest(XmlTestBase):
|
|||
|
||||
self.assertEqual(result.getvalue(), xml_test_out)
|
||||
|
||||
def test_expat_inpsource_stream(self):
|
||||
def test_expat_inpsource_byte_stream(self):
|
||||
parser = create_parser()
|
||||
result = BytesIO()
|
||||
xmlgen = XMLGenerator(result)
|
||||
|
@ -1018,6 +1083,7 @@ class XmlReaderTest(XmlTestBase):
|
|||
def test_main():
|
||||
run_unittest(MakeParserTest,
|
||||
SaxutilsTest,
|
||||
PrepareInputSourceTest,
|
||||
StringXmlgenTest,
|
||||
BytesXmlgenTest,
|
||||
WriterXmlgenTest,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<HTML xmlns:pp="http://www.isogen.com/paul/post-processor">
|
||||
<TITLE>Introduction to XSL</TITLE>
|
||||
<H1>Introduction to XSL</H1>
|
||||
|
@ -110,6 +110,6 @@
|
|||
</UL>
|
||||
|
||||
|
||||
|
||||
µ
|
||||
|
||||
</HTML>
|
||||
|
|
|
@ -110,6 +110,6 @@
|
|||
</UL>
|
||||
|
||||
|
||||
|
||||
<EFBFBD>
|
||||
|
||||
</HTML>
|
Loading…
Reference in New Issue