| 
									
										
										
										
											2013-04-10 19:30:11 +03:00
										 |  |  | # Tests for xml.dom.minicompat | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-26 23:49:42 +02:00
										 |  |  | import copy | 
					
						
							| 
									
										
										
										
											2013-04-10 19:30:11 +03:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:03:42 +02:00
										 |  |  |         for proto in range(pickle.HIGHEST_PROTOCOL + 1): | 
					
						
							|  |  |  |             # Empty NodeList. | 
					
						
							|  |  |  |             node_list = NodeList() | 
					
						
							|  |  |  |             pickled = pickle.dumps(node_list, proto) | 
					
						
							|  |  |  |             unpickled = pickle.loads(pickled) | 
					
						
							| 
									
										
										
										
											2015-11-26 23:49:42 +02:00
										 |  |  |             self.assertIsNot(unpickled, node_list) | 
					
						
							| 
									
										
										
										
											2014-12-15 14:03:42 +02:00
										 |  |  |             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) | 
					
						
							| 
									
										
										
										
											2015-11-26 23:49:42 +02:00
										 |  |  |             self.assertIsNot(unpickled, node_list) | 
					
						
							| 
									
										
										
										
											2014-12-15 14:03:42 +02:00
										 |  |  |             self.assertEqual(unpickled, node_list) | 
					
						
							| 
									
										
										
										
											2013-04-10 19:30:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-26 23:49:42 +02:00
										 |  |  |     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) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-10 19:30:11 +03:00
										 |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main() |