| # Tests for xml.dom.minicompat | |
| import copy | |
| import pickle | |
| import unittest | |
| import xml.dom | |
| from xml.dom.minicompat import * | |
| class EmptyNodeListTestCase(unittest.TestCase): | |
| """Tests for the EmptyNodeList class.""" | |
| def test_emptynodelist_item(self): | |
| # Test item access on an EmptyNodeList. | |
| node_list = EmptyNodeList() | |
| self.assertIsNone(node_list.item(0)) | |
| self.assertIsNone(node_list.item(-1)) # invalid item | |
| with self.assertRaises(IndexError): | |
| node_list[0] | |
| with self.assertRaises(IndexError): | |
| node_list[-1] | |
| def test_emptynodelist_length(self): | |
| node_list = EmptyNodeList() | |
| # Reading | |
| self.assertEqual(node_list.length, 0) | |
| # Writing | |
| with self.assertRaises(xml.dom.NoModificationAllowedErr): | |
| node_list.length = 111 | |
| def test_emptynodelist___add__(self): | |
| node_list = EmptyNodeList() + NodeList() | |
| self.assertEqual(node_list, NodeList()) | |
| def test_emptynodelist___radd__(self): | |
| node_list = [1,2] + EmptyNodeList() | |
| self.assertEqual(node_list, [1,2]) | |
| class NodeListTestCase(unittest.TestCase): | |
| """Tests for the NodeList class.""" | |
| def test_nodelist_item(self): | |
| # Test items access on a NodeList. | |
| # First, use an empty NodeList. | |
| node_list = NodeList() | |
| self.assertIsNone(node_list.item(0)) | |
| self.assertIsNone(node_list.item(-1)) | |
| with self.assertRaises(IndexError): | |
| node_list[0] | |
| with self.assertRaises(IndexError): | |
| node_list[-1] | |
| # Now, use a NodeList with items. | |
| node_list.append(111) | |
| node_list.append(999) | |
| self.assertEqual(node_list.item(0), 111) | |
| self.assertIsNone(node_list.item(-1)) # invalid item | |
| self.assertEqual(node_list[0], 111) | |
| self.assertEqual(node_list[-1], 999) | |
| def test_nodelist_length(self): | |
| node_list = NodeList([1, 2]) | |
| # Reading | |
| self.assertEqual(node_list.length, 2) | |
| # Writing | |
| with self.assertRaises(xml.dom.NoModificationAllowedErr): | |
| node_list.length = 111 | |
| def test_nodelist___add__(self): | |
| node_list = NodeList([3, 4]) + [1, 2] | |
| self.assertEqual(node_list, NodeList([3, 4, 1, 2])) | |
| def test_nodelist___radd__(self): | |
| node_list = [1, 2] + NodeList([3, 4]) | |
| self.assertEqual(node_list, NodeList([1, 2, 3, 4])) | |
| def test_nodelist_pickle_roundtrip(self): | |
| # Test pickling and unpickling of a NodeList. | |
| for proto in range(pickle.HIGHEST_PROTOCOL + 1): | |
| # Empty NodeList. | |
| node_list = NodeList() | |
| pickled = pickle.dumps(node_list, proto) | |
| unpickled = pickle.loads(pickled) | |
| self.assertIsNot(unpickled, node_list) | |
| self.assertEqual(unpickled, node_list) | |
| # Non-empty NodeList. | |
| node_list.append(1) | |
| node_list.append(2) | |
| pickled = pickle.dumps(node_list, proto) | |
| unpickled = pickle.loads(pickled) | |
| self.assertIsNot(unpickled, node_list) | |
| self.assertEqual(unpickled, node_list) | |
| def test_nodelist_copy(self): | |
| # Empty NodeList. | |
| node_list = NodeList() | |
| copied = copy.copy(node_list) | |
| self.assertIsNot(copied, node_list) | |
| self.assertEqual(copied, node_list) | |
| # Non-empty NodeList. | |
| node_list.append([1]) | |
| node_list.append([2]) | |
| copied = copy.copy(node_list) | |
| self.assertIsNot(copied, node_list) | |
| self.assertEqual(copied, node_list) | |
| for x, y in zip(copied, node_list): | |
| self.assertIs(x, y) | |
| def test_nodelist_deepcopy(self): | |
| # Empty NodeList. | |
| node_list = NodeList() | |
| copied = copy.deepcopy(node_list) | |
| self.assertIsNot(copied, node_list) | |
| self.assertEqual(copied, node_list) | |
| # Non-empty NodeList. | |
| node_list.append([1]) | |
| node_list.append([2]) | |
| copied = copy.deepcopy(node_list) | |
| self.assertIsNot(copied, node_list) | |
| self.assertEqual(copied, node_list) | |
| for x, y in zip(copied, node_list): | |
| self.assertIsNot(x, y) | |
| self.assertEqual(x, y) | |
| if __name__ == '__main__': | |
| unittest.main() |