/Lib/test/test_xml_dom_minicompat.py

https://github.com/albertz/CPython
Python | 138 lines | 91 code | 29 blank | 18 comment | 10 complexity | 7416dfb08542cad2f5316dd86e60992e MD5 | raw file
  1. # Tests for xml.dom.minicompat
  2. import copy
  3. import pickle
  4. import unittest
  5. import xml.dom
  6. from xml.dom.minicompat import *
  7. class EmptyNodeListTestCase(unittest.TestCase):
  8. """Tests for the EmptyNodeList class."""
  9. def test_emptynodelist_item(self):
  10. # Test item access on an EmptyNodeList.
  11. node_list = EmptyNodeList()
  12. self.assertIsNone(node_list.item(0))
  13. self.assertIsNone(node_list.item(-1)) # invalid item
  14. with self.assertRaises(IndexError):
  15. node_list[0]
  16. with self.assertRaises(IndexError):
  17. node_list[-1]
  18. def test_emptynodelist_length(self):
  19. node_list = EmptyNodeList()
  20. # Reading
  21. self.assertEqual(node_list.length, 0)
  22. # Writing
  23. with self.assertRaises(xml.dom.NoModificationAllowedErr):
  24. node_list.length = 111
  25. def test_emptynodelist___add__(self):
  26. node_list = EmptyNodeList() + NodeList()
  27. self.assertEqual(node_list, NodeList())
  28. def test_emptynodelist___radd__(self):
  29. node_list = [1,2] + EmptyNodeList()
  30. self.assertEqual(node_list, [1,2])
  31. class NodeListTestCase(unittest.TestCase):
  32. """Tests for the NodeList class."""
  33. def test_nodelist_item(self):
  34. # Test items access on a NodeList.
  35. # First, use an empty NodeList.
  36. node_list = NodeList()
  37. self.assertIsNone(node_list.item(0))
  38. self.assertIsNone(node_list.item(-1))
  39. with self.assertRaises(IndexError):
  40. node_list[0]
  41. with self.assertRaises(IndexError):
  42. node_list[-1]
  43. # Now, use a NodeList with items.
  44. node_list.append(111)
  45. node_list.append(999)
  46. self.assertEqual(node_list.item(0), 111)
  47. self.assertIsNone(node_list.item(-1)) # invalid item
  48. self.assertEqual(node_list[0], 111)
  49. self.assertEqual(node_list[-1], 999)
  50. def test_nodelist_length(self):
  51. node_list = NodeList([1, 2])
  52. # Reading
  53. self.assertEqual(node_list.length, 2)
  54. # Writing
  55. with self.assertRaises(xml.dom.NoModificationAllowedErr):
  56. node_list.length = 111
  57. def test_nodelist___add__(self):
  58. node_list = NodeList([3, 4]) + [1, 2]
  59. self.assertEqual(node_list, NodeList([3, 4, 1, 2]))
  60. def test_nodelist___radd__(self):
  61. node_list = [1, 2] + NodeList([3, 4])
  62. self.assertEqual(node_list, NodeList([1, 2, 3, 4]))
  63. def test_nodelist_pickle_roundtrip(self):
  64. # Test pickling and unpickling of a NodeList.
  65. for proto in range(pickle.HIGHEST_PROTOCOL + 1):
  66. # Empty NodeList.
  67. node_list = NodeList()
  68. pickled = pickle.dumps(node_list, proto)
  69. unpickled = pickle.loads(pickled)
  70. self.assertIsNot(unpickled, node_list)
  71. self.assertEqual(unpickled, node_list)
  72. # Non-empty NodeList.
  73. node_list.append(1)
  74. node_list.append(2)
  75. pickled = pickle.dumps(node_list, proto)
  76. unpickled = pickle.loads(pickled)
  77. self.assertIsNot(unpickled, node_list)
  78. self.assertEqual(unpickled, node_list)
  79. def test_nodelist_copy(self):
  80. # Empty NodeList.
  81. node_list = NodeList()
  82. copied = copy.copy(node_list)
  83. self.assertIsNot(copied, node_list)
  84. self.assertEqual(copied, node_list)
  85. # Non-empty NodeList.
  86. node_list.append([1])
  87. node_list.append([2])
  88. copied = copy.copy(node_list)
  89. self.assertIsNot(copied, node_list)
  90. self.assertEqual(copied, node_list)
  91. for x, y in zip(copied, node_list):
  92. self.assertIs(x, y)
  93. def test_nodelist_deepcopy(self):
  94. # Empty NodeList.
  95. node_list = NodeList()
  96. copied = copy.deepcopy(node_list)
  97. self.assertIsNot(copied, node_list)
  98. self.assertEqual(copied, node_list)
  99. # Non-empty NodeList.
  100. node_list.append([1])
  101. node_list.append([2])
  102. copied = copy.deepcopy(node_list)
  103. self.assertIsNot(copied, node_list)
  104. self.assertEqual(copied, node_list)
  105. for x, y in zip(copied, node_list):
  106. self.assertIsNot(x, y)
  107. self.assertEqual(x, y)
  108. if __name__ == '__main__':
  109. unittest.main()