import io import unittest from http import client from test.test_httplib import FakeSocket from unittest import mock from xml.dom import getDOMImplementation, minidom, xmlbuilder SMALL_SAMPLE = b""" Introduction to XSL

A. Namespace

""" class XMLBuilderTest(unittest.TestCase): def test_entity_resolver(self): body = ( b"HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\n\r\n" + SMALL_SAMPLE ) sock = FakeSocket(body) response = client.HTTPResponse(sock) response.begin() attrs = {"open.return_value": response} opener = mock.Mock(**attrs) resolver = xmlbuilder.DOMEntityResolver() with mock.patch("urllib.request.build_opener") as mock_build: mock_build.return_value = opener source = resolver.resolveEntity(None, "http://example.com/2000/svg") self.assertIsInstance(source, xmlbuilder.DOMInputSource) self.assertIsNone(source.publicId) self.assertEqual(source.systemId, "http://example.com/2000/svg") self.assertEqual(source.baseURI, "http://example.com/2000/") self.assertEqual(source.encoding, "utf-8") self.assertIs(source.byteStream, response) self.assertIsNone(source.characterStream) self.assertIsNone(source.stringData) def test_builder(self): imp = getDOMImplementation() self.assertIsInstance(imp, xmlbuilder.DOMImplementationLS) builder = imp.createDOMBuilder(imp.MODE_SYNCHRONOUS, None) self.assertIsInstance(builder, xmlbuilder.DOMBuilder) def test_parse_uri(self): body = ( b"HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\n\r\n" + SMALL_SAMPLE ) sock = FakeSocket(body) response = client.HTTPResponse(sock) response.begin() attrs = {"open.return_value": response} opener = mock.Mock(**attrs) with mock.patch("urllib.request.build_opener") as mock_build: mock_build.return_value = opener imp = getDOMImplementation() builder = imp.createDOMBuilder(imp.MODE_SYNCHRONOUS, None) document = builder.parseURI("http://example.com/2000/svg") self.assertIsInstance(document, minidom.Document) self.assertEqual(len(document.childNodes), 1) def test_parse_with_systemId(self): response = io.BytesIO(SMALL_SAMPLE) with mock.patch("urllib.request.urlopen") as mock_open: mock_open.return_value = response imp = getDOMImplementation() source = imp.createDOMInputSource() builder = imp.createDOMBuilder(imp.MODE_SYNCHRONOUS, None) source.systemId = "http://example.com/2000/svg" document = builder.parse(source) self.assertIsInstance(document, minidom.Document) self.assertEqual(len(document.childNodes), 1)