diff -r c2c84d3ab393 Lib/test/test_minidom.py --- a/Lib/test/test_minidom.py Wed Feb 13 12:18:03 2013 +0000 +++ b/Lib/test/test_minidom.py Wed Feb 13 19:42:03 2013 +0200 @@ -52,8 +52,14 @@ t = node.wholeText self.confirm(t == s, "looking for %s, found %s" % (repr(s), repr(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 -r c2c84d3ab393 Lib/test/test_sax.py --- a/Lib/test/test_sax.py Wed Feb 13 12:18:03 2013 +0000 +++ b/Lib/test/test_sax.py Wed Feb 13 19:42:03 2013 +0200 @@ -9,7 +9,7 @@ # don't try to test this module if we cannot create a parser raise ImportError("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 @@ -17,7 +17,7 @@ import os.path import shutil from test import support -from test.support import findfile, run_unittest +from test.support import findfile, run_unittest, TESTFN import unittest TEST_XMLFILE = findfile("test.xml", subdir="xmltestdata") @@ -171,6 +171,81 @@ p = make_parser(['xml.parsers.no_such_parser']) +class PrepareInputSourceTest(unittest.TestCase): + + # Fixture methods + def setUp(self): + self.file = 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 make_character_stream(self): + return StringIO("This is a character stream.") + + def checkContent(self, stream, content): + self.assertIsNotNone(stream) + self.assertEqual(stream.read(), content) + stream.close() + + # The tests + def test_character_stream(self): + '''If the source is an InputSource with a character stream, use it.''' + src = InputSource(self.file) + src.setCharacterStream(self.make_character_stream()) + prep = prepare_input_source(src) + self.assertIsNone(prep.getByteStream()) + self.checkContent(prep.getCharacterStream(), + "This is a character stream.") + + 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.") + + def test_text_file(self): + '''If the source is a text file-like object, use it as a character + stream.''' + prep = prepare_input_source(self.make_character_stream()) + self.assertIsNone(prep.getByteStream()) + self.checkContent(prep.getCharacterStream(), + "This is a character stream.") + + # ===== XMLGenerator class XmlgenTest: @@ -556,7 +631,7 @@ # ===== XMLReader support - def test_expat_file(self): + def test_expat_binary_file(self): parser = create_parser() result = BytesIO() xmlgen = XMLGenerator(result) @@ -567,8 +642,19 @@ 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) @@ -578,7 +664,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(open(fname)) + parser.parse(open(fname, 'rb')) self.assertEqual(result.getvalue(), xml_test_out) @@ -736,7 +822,7 @@ 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) @@ -749,6 +835,19 @@ self.assertEqual(result.getvalue(), xml_test_out) + def test_expat_inpsource_character_stream(self): + parser = create_parser() + result = BytesIO() + xmlgen = XMLGenerator(result) + + parser.setContentHandler(xmlgen) + inpsrc = InputSource() + with open(TEST_XMLFILE, 'rt', encoding='iso-8859-1') as f: + inpsrc.setCharacterStream(f) + parser.parse(inpsrc) + + self.assertEqual(result.getvalue(), xml_test_out) + # ===== IncrementalParser support def test_expat_incremental(self): @@ -928,6 +1027,7 @@ def test_main(): run_unittest(MakeParserTest, SaxutilsTest, + PrepareInputSourceTest, StringXmlgenTest, BytesXmlgenTest, WriterXmlgenTest, diff -r c2c84d3ab393 Lib/test/xmltestdata/test.xml --- a/Lib/test/xmltestdata/test.xml Wed Feb 13 12:18:03 2013 +0000 +++ b/Lib/test/xmltestdata/test.xml Wed Feb 13 19:42:03 2013 +0200 @@ -1,4 +1,4 @@ - +