[Python-checkins] cpython (3.4): Issue #2175: Added tests for xml.sax.saxutils.prepare_input_source().

serhiy.storchaka python-checkins at python.org
Thu Apr 2 20:00:59 CEST 2015


https://hg.python.org/cpython/rev/fa47897e7889
changeset:   95399:fa47897e7889
branch:      3.4
parent:      95396:1d2444273b3d
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Thu Apr 02 20:55:59 2015 +0300
summary:
  Issue #2175: Added tests for xml.sax.saxutils.prepare_input_source().
Made test XML files non-ASCII.

files:
  Lib/test/test_minidom.py          |  10 ++-
  Lib/test/test_sax.py              |  76 +++++++++++++++++-
  Lib/test/xmltestdata/test.xml     |   4 +-
  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
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -49,8 +49,14 @@
         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
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -10,7 +10,7 @@
     # 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 @@
         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 @@
 
     # ===== 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 @@
 
         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 @@
         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 @@
 
         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 @@
 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
--- 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
--- 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

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list