diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-02 17:55:59 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-02 17:55:59 (GMT) |
commit | aa9563c1b8b8187282c0cad2b0e3c0ed7f6a8dc9 (patch) | |
tree | 7582c9bfdb3b1931d249d8eccd35a852b14ff341 /Lib | |
parent | 2379d541dd2a4944713999f0071d53fdddee3d47 (diff) | |
download | cpython-aa9563c1b8b8187282c0cad2b0e3c0ed7f6a8dc9.zip cpython-aa9563c1b8b8187282c0cad2b0e3c0ed7f6a8dc9.tar.gz cpython-aa9563c1b8b8187282c0cad2b0e3c0ed7f6a8dc9.tar.bz2 |
Issue #2175: Added tests for xml.sax.saxutils.prepare_input_source().
Made test XML files non-ASCII.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_minidom.py | 10 | ||||
-rw-r--r-- | Lib/test/test_sax.py | 76 | ||||
-rw-r--r-- | Lib/test/xmltestdata/test.xml | 4 | ||||
-rw-r--r-- | Lib/test/xmltestdata/test.xml.out | 2 |
4 files changed, 82 insertions, 10 deletions
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py index d06a83d..05df6e9 100644 --- a/Lib/test/test_minidom.py +++ b/Lib/test/test_minidom.py @@ -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)) diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py index a6238b2..c8d5b21 100644 --- a/Lib/test/test_sax.py +++ b/Lib/test/test_sax.py @@ -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, diff --git a/Lib/test/xmltestdata/test.xml b/Lib/test/xmltestdata/test.xml index 9af92fb..92136da 100644 --- a/Lib/test/xmltestdata/test.xml +++ b/Lib/test/xmltestdata/test.xml @@ -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> diff --git a/Lib/test/xmltestdata/test.xml.out b/Lib/test/xmltestdata/test.xml.out index d4ab1ab..f7e9ad2 100644 --- a/Lib/test/xmltestdata/test.xml.out +++ b/Lib/test/xmltestdata/test.xml.out @@ -110,6 +110,6 @@ </UL> - +µ </HTML>
\ No newline at end of file |