diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2013-04-28 14:05:52 +0200 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2013-04-28 14:05:52 +0200 |
commit | 1984326cfc177668b19c2502999b0cffbba8c69a (patch) | |
tree | 21c984ed928a71933699cd76cfd30619bd8a8b69 | |
parent | 785f4828ed8e2f1a455191013be77ba5114a6916 (diff) | |
download | python-lxml-1984326cfc177668b19c2502999b0cffbba8c69a.tar.gz |
add test for 'no_network' parser option
-rw-r--r-- | src/lxml/tests/test_http_io.py | 68 |
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() |