summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2013-04-28 14:05:52 +0200
committerStefan Behnel <stefan_ml@behnel.de>2013-04-28 14:05:52 +0200
commit1984326cfc177668b19c2502999b0cffbba8c69a (patch)
tree21c984ed928a71933699cd76cfd30619bd8a8b69
parent785f4828ed8e2f1a455191013be77ba5114a6916 (diff)
downloadpython-lxml-1984326cfc177668b19c2502999b0cffbba8c69a.tar.gz
add test for 'no_network' parser option
-rw-r--r--src/lxml/tests/test_http_io.py68
1 files changed, 66 insertions, 2 deletions
diff --git a/src/lxml/tests/test_http_io.py b/src/lxml/tests/test_http_io.py
index ba873d73..de141540 100644
--- a/src/lxml/tests/test_http_io.py
+++ b/src/lxml/tests/test_http_io.py
@@ -5,6 +5,7 @@ Web IO test cases that need Python 2.5+ (wsgiref)
"""
import unittest
+import textwrap
import os
import sys
import gzip
@@ -21,10 +22,10 @@ from .dummy_http_server import webserver, HTTPRequestCollector
class HttpIOTestCase(HelperTestCase):
etree = etree
- def _parse_from_http(self, data, code=200, headers=None):
+ def _parse_from_http(self, data, code=200, headers=None, parser=None):
handler = HTTPRequestCollector(data, code, headers)
with webserver(handler) as host_url:
- tree = self.etree.parse(host_url + 'TEST')
+ tree = self.etree.parse(host_url + 'TEST', parser=parser)
self.assertEqual([('/TEST', [])], handler.requests)
return tree
@@ -54,6 +55,69 @@ class HttpIOTestCase(HelperTestCase):
self.assertEqual('root', tree.getroot().tag)
self.assertEqual('a', tree.getroot()[0].tag)
+ def test_parser_input_mix(self):
+ data = _bytes('<root><a/></root>')
+ handler = HTTPRequestCollector(data)
+
+ with webserver(handler) as host_url:
+ tree = self.etree.parse(host_url)
+ root = tree.getroot()
+ self.assertEqual('a', root[0].tag)
+
+ root = self.etree.fromstring(data)
+ self.assertEqual('a', root[0].tag)
+
+ tree = self.etree.parse(host_url)
+ root = tree.getroot()
+ self.assertEqual('a', root[0].tag)
+
+ root = self.etree.fromstring(data)
+ self.assertEqual('a', root[0].tag)
+
+ root = self.etree.fromstring(data)
+ self.assertEqual('a', root[0].tag)
+
+ def test_network_dtd(self):
+ data = map(textwrap.dedent, [
+ # XML file
+ '''\
+ <?xml version="1.0"?>
+ <!DOCTYPE root SYSTEM "./file.dtd">
+ <root>&myentity;</root>
+ ''',
+ # DTD
+ '<!ENTITY myentity "DEFINED">',
+ ])
+
+ responses = []
+ def handler(environ, start_response):
+ start_response('200 OK', [])
+ return [responses.pop()]
+
+ with webserver(handler) as host_url:
+ # DTD network loading enabled
+ responses = data[::-1]
+ tree = self.etree.parse(
+ host_url + 'dir/test.xml',
+ parser=self.etree.XMLParser(
+ load_dtd=True, no_network=False))
+ self.assertFalse(responses) # all read
+ root = tree.getroot()
+ self.assertEqual('DEFINED', root.text)
+
+ # DTD network loading disabled
+ responses = data[::-1]
+ try:
+ self.etree.parse(
+ host_url + 'dir/test.xml',
+ parser=self.etree.XMLParser(
+ load_dtd=True, no_network=True))
+ except self.etree.XMLSyntaxError:
+ self.assertTrue("myentity" in str(sys.exc_info()[1]))
+ else:
+ self.assertTrue(False)
+ self.assertEqual(1, len(responses)) # DTD not read
+
def test_suite():
suite = unittest.TestSuite()