Skip to content

Commit b9eaa27

Browse files
authored
Merge pull request RustPython#2737 from fanninpm/test-xml-dom-minicompat
Add test_xml_dom_minicompat from CPython 3.8
2 parents 6b41793 + 2f207ba commit b9eaa27

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed

Lib/test/test_xml_dom_minicompat.py

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# Tests for xml.dom.minicompat
2+
3+
import copy
4+
import pickle
5+
import unittest
6+
7+
import xml.dom
8+
from xml.dom.minicompat import *
9+
10+
11+
class EmptyNodeListTestCase(unittest.TestCase):
12+
"""Tests for the EmptyNodeList class."""
13+
14+
def test_emptynodelist_item(self):
15+
# Test item access on an EmptyNodeList.
16+
node_list = EmptyNodeList()
17+
18+
self.assertIsNone(node_list.item(0))
19+
self.assertIsNone(node_list.item(-1)) # invalid item
20+
21+
with self.assertRaises(IndexError):
22+
node_list[0]
23+
with self.assertRaises(IndexError):
24+
node_list[-1]
25+
26+
def test_emptynodelist_length(self):
27+
node_list = EmptyNodeList()
28+
# Reading
29+
self.assertEqual(node_list.length, 0)
30+
# Writing
31+
with self.assertRaises(xml.dom.NoModificationAllowedErr):
32+
node_list.length = 111
33+
34+
def test_emptynodelist___add__(self):
35+
node_list = EmptyNodeList() + NodeList()
36+
self.assertEqual(node_list, NodeList())
37+
38+
# TODO: RUSTPYTHON
39+
@unittest.expectedFailure
40+
def test_emptynodelist___radd__(self):
41+
node_list = [1,2] + EmptyNodeList()
42+
self.assertEqual(node_list, [1,2])
43+
44+
45+
class NodeListTestCase(unittest.TestCase):
46+
"""Tests for the NodeList class."""
47+
48+
def test_nodelist_item(self):
49+
# Test items access on a NodeList.
50+
# First, use an empty NodeList.
51+
node_list = NodeList()
52+
53+
self.assertIsNone(node_list.item(0))
54+
self.assertIsNone(node_list.item(-1))
55+
56+
with self.assertRaises(IndexError):
57+
node_list[0]
58+
with self.assertRaises(IndexError):
59+
node_list[-1]
60+
61+
# Now, use a NodeList with items.
62+
node_list.append(111)
63+
node_list.append(999)
64+
65+
self.assertEqual(node_list.item(0), 111)
66+
self.assertIsNone(node_list.item(-1)) # invalid item
67+
68+
self.assertEqual(node_list[0], 111)
69+
self.assertEqual(node_list[-1], 999)
70+
71+
def test_nodelist_length(self):
72+
node_list = NodeList([1, 2])
73+
# Reading
74+
self.assertEqual(node_list.length, 2)
75+
# Writing
76+
with self.assertRaises(xml.dom.NoModificationAllowedErr):
77+
node_list.length = 111
78+
79+
def test_nodelist___add__(self):
80+
node_list = NodeList([3, 4]) + [1, 2]
81+
self.assertEqual(node_list, NodeList([3, 4, 1, 2]))
82+
83+
def test_nodelist___radd__(self):
84+
node_list = [1, 2] + NodeList([3, 4])
85+
self.assertEqual(node_list, NodeList([1, 2, 3, 4]))
86+
87+
# TODO: RUSTPYTHON
88+
@unittest.expectedFailure
89+
def test_nodelist_pickle_roundtrip(self):
90+
# Test pickling and unpickling of a NodeList.
91+
92+
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
93+
# Empty NodeList.
94+
node_list = NodeList()
95+
pickled = pickle.dumps(node_list, proto)
96+
unpickled = pickle.loads(pickled)
97+
self.assertIsNot(unpickled, node_list)
98+
self.assertEqual(unpickled, node_list)
99+
100+
# Non-empty NodeList.
101+
node_list.append(1)
102+
node_list.append(2)
103+
pickled = pickle.dumps(node_list, proto)
104+
unpickled = pickle.loads(pickled)
105+
self.assertIsNot(unpickled, node_list)
106+
self.assertEqual(unpickled, node_list)
107+
108+
def test_nodelist_copy(self):
109+
# Empty NodeList.
110+
node_list = NodeList()
111+
copied = copy.copy(node_list)
112+
self.assertIsNot(copied, node_list)
113+
self.assertEqual(copied, node_list)
114+
115+
# Non-empty NodeList.
116+
node_list.append([1])
117+
node_list.append([2])
118+
copied = copy.copy(node_list)
119+
self.assertIsNot(copied, node_list)
120+
self.assertEqual(copied, node_list)
121+
for x, y in zip(copied, node_list):
122+
self.assertIs(x, y)
123+
124+
def test_nodelist_deepcopy(self):
125+
# Empty NodeList.
126+
node_list = NodeList()
127+
copied = copy.deepcopy(node_list)
128+
self.assertIsNot(copied, node_list)
129+
self.assertEqual(copied, node_list)
130+
131+
# Non-empty NodeList.
132+
node_list.append([1])
133+
node_list.append([2])
134+
copied = copy.deepcopy(node_list)
135+
self.assertIsNot(copied, node_list)
136+
self.assertEqual(copied, node_list)
137+
for x, y in zip(copied, node_list):
138+
self.assertIsNot(x, y)
139+
self.assertEqual(x, y)
140+
141+
if __name__ == '__main__':
142+
unittest.main()

0 commit comments

Comments
 (0)