Skip to content

Commit 99167f8

Browse files
authored
bpo-31559: Remove test order dependence in idle_test.test_browser. (#3708)
Order dependence caused leak-test buildbots to fail when running test_idle repeatedly.
1 parent aecc08a commit 99167f8

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

‎Lib/idlelib/idle_test/test_browser.py‎

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def test_close(self):
6565
del cb.top.destroy, cb.node.destroy
6666

6767

68-
# Same nested tree creation as in test_pyclbr.py except for super on C0.
68+
# Nested tree same as in test_pyclbr.py except for supers on C0. C1.
6969
mb = pyclbr
7070
module, fname = 'test', 'test.py'
7171
f0 = mb.Function(module, 'f0', fname, 1)
@@ -79,26 +79,43 @@ def test_close(self):
7979
F3 = mb._nest_function(C2, 'F3', 14)
8080
mock_pyclbr_tree = {'f0': f0, 'C0': C0}
8181

82-
# transform_children(mock_pyclbr_tree, 'test') mutates C0.name.
82+
# Adjust C0.name, C1.name so tests do not depend on order.
83+
browser.transform_children(mock_pyclbr_tree, 'test') # C0(base)
84+
browser.transform_children(C0.children) # C1()
85+
86+
# The class below checks that the calls above are correct
87+
# and that duplicate calls have no effect.
88+
8389

8490
class TransformChildrenTest(unittest.TestCase):
8591

86-
def test_transform_children(self):
92+
def test_transform_module_children(self):
8793
eq = self.assertEqual
94+
transform = browser.transform_children
8895
# Parameter matches tree module.
89-
tcl = list(browser.transform_children(mock_pyclbr_tree, 'test'))
90-
eq(tcl[0], f0)
91-
eq(tcl[1], C0)
96+
tcl = list(transform(mock_pyclbr_tree, 'test'))
97+
eq(tcl, [f0, C0])
98+
eq(tcl[0].name, 'f0')
9299
eq(tcl[1].name, 'C0(base)')
93-
# Check that second call does not add second '(base)' suffix.
94-
tcl = list(browser.transform_children(mock_pyclbr_tree, 'test'))
100+
# Check that second call does not change suffix.
101+
tcl = list(transform(mock_pyclbr_tree, 'test'))
95102
eq(tcl[1].name, 'C0(base)')
96103
# Nothing to traverse if parameter name isn't same as tree module.
97-
tn = browser.transform_children(mock_pyclbr_tree, 'different name')
98-
self.assertEqual(list(tn), [])
99-
# No name parameter.
100-
tn = browser.transform_children({'f1': f1, 'c1': c1})
101-
self.assertEqual(list(tn), [f1, c1])
104+
tcl = list(transform(mock_pyclbr_tree, 'different name'))
105+
eq(tcl, [])
106+
107+
def test_transform_node_children(self):
108+
eq = self.assertEqual
109+
transform = browser.transform_children
110+
# Class with two children, one name altered.
111+
tcl = list(transform(C0.children))
112+
eq(tcl, [F1, C1])
113+
eq(tcl[0].name, 'F1')
114+
eq(tcl[1].name, 'C1()')
115+
tcl = list(transform(C0.children))
116+
eq(tcl[1].name, 'C1()')
117+
# Function with two children.
118+
eq(list(transform(f0.children)), [f1, c1])
102119

103120

104121
class ModuleBrowserTreeItemTest(unittest.TestCase):
@@ -138,7 +155,7 @@ def test_getsublist(self):
138155
self.assertIsInstance(sub0, browser.ChildBrowserTreeItem)
139156
self.assertIsInstance(sub1, browser.ChildBrowserTreeItem)
140157
self.assertEqual(sub0.name, 'f0')
141-
self.assertEqual(sub1.name, 'C0')
158+
self.assertEqual(sub1.name, 'C0(base)')
142159

143160

144161
def test_ondoubleclick(self):
@@ -172,13 +189,13 @@ def tearDownClass(cls):
172189

173190
def test_init(self):
174191
eq = self.assertEqual
175-
eq(self.cbt_C1.name, 'C1')
192+
eq(self.cbt_C1.name, 'C1()')
176193
self.assertFalse(self.cbt_C1.isfunction)
177194
eq(self.cbt_f1.name, 'f1')
178195
self.assertTrue(self.cbt_f1.isfunction)
179196

180197
def test_gettext(self):
181-
self.assertEqual(self.cbt_C1.GetText(), 'class C1')
198+
self.assertEqual(self.cbt_C1.GetText(), 'class C1()')
182199
self.assertEqual(self.cbt_f1.GetText(), 'def f1(...)')
183200

184201
def test_geticonname(self):
@@ -221,7 +238,7 @@ def test_nested(self):
221238
# The tree items are processed in breadth first order.
222239
# Verify that processing each sublist hits every node and
223240
# in the right order.
224-
expected_names = ['f0', 'C0', # This is run before transform test.
241+
expected_names = ['f0', 'C0(base)',
225242
'f1', 'c1', 'F1', 'C1()',
226243
'f2', 'C2',
227244
'F3']
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove test order dependence in idle_test.test_browser.

0 commit comments

Comments
 (0)