]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #2175: Added tests for xml.sax.saxutils.prepare_input_source().
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 2 Apr 2015 17:55:46 +0000 (20:55 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Thu, 2 Apr 2015 17:55:46 +0000 (20:55 +0300)
Made test XML files non-ASCII.

Lib/test/test_sax.py
Lib/test/xmltestdata/test.xml
Lib/test/xmltestdata/test.xml.out

index 86638a2665d98d5696680f2fff074dbb249c6c92..e314b7c77125e07f7305c04a23e119750760ee3e 100644 (file)
@@ -9,7 +9,7 @@ except SAXReaderNotAvailable:
     # 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
@@ -167,6 +167,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 io.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
 
 start = '<?xml version="1.0" encoding="iso-8859-1"?>\n'
@@ -481,7 +535,7 @@ class ExpatReaderTest(XmlTestBase):
 
     # ===== XMLReader support
 
-    def test_expat_file(self):
+    def test_expat_binary_file(self):
         parser = create_parser()
         result = StringIO()
         xmlgen = XMLGenerator(result)
@@ -660,7 +714,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 = StringIO()
         xmlgen = XMLGenerator(result)
@@ -896,6 +950,7 @@ class XmlReaderTest(XmlTestBase):
 def test_main():
     run_unittest(MakeParserTest,
                  SaxutilsTest,
+                 PrepareInputSourceTest,
                  StringXmlgenTest,
                  BytesIOXmlgenTest,
                  WriterXmlgenTest,
index 9af92fb435503e821f9161ef227f4798a5d323e6..92136da76d3581658c1731a04052319865085626 100644 (file)
@@ -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>
                </UL>
        
 
-
        
 </HTML>
index d4ab1abcb6260f5a89e9ec677161fb8c2dd38472..f7e9ad2938a71d224f11306e940268966c369f5a 100644 (file)
                </UL>
        
 
-
        
 </HTML>
\ No newline at end of file