summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-04-02 20:55:59 +0300
committerSerhiy Storchaka <storchaka@gmail.com>2015-04-02 20:55:59 +0300
commitaa9563c1b8b8187282c0cad2b0e3c0ed7f6a8dc9 (patch)
tree7582c9bfdb3b1931d249d8eccd35a852b14ff341 /Lib
parent2379d541dd2a4944713999f0071d53fdddee3d47 (diff)
downloadcpython-git-aa9563c1b8b8187282c0cad2b0e3c0ed7f6a8dc9.tar.gz
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.py10
-rw-r--r--Lib/test/test_sax.py76
-rw-r--r--Lib/test/xmltestdata/test.xml4
-rw-r--r--Lib/test/xmltestdata/test.xml.out2
4 files changed, 82 insertions, 10 deletions
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index d06a83d611..05df6e9396 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 a6238b2786..c8d5b21c85 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 9af92fb435..92136da76d 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 d4ab1abcb6..f7e9ad2938 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