Skip to content

Commit 8f02e7b

Browse files
committed
refactor and expand tests, also fixing test_delete
1 parent 083689e commit 8f02e7b

1 file changed

Lines changed: 116 additions & 59 deletions

File tree

Lib/idlelib/idle_test/test_linenumbers.py

Lines changed: 116 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""Unittest for idlelib.LineNumber"""
2+
from itertools import chain
23
import unittest
34
from test.support import requires
45
import tkinter as tk
@@ -11,6 +12,7 @@
1112
class Dummy_editwin:
1213
def __init__(self, text):
1314
self.text = text
15+
self.text_frame = self.text.master
1416
self.per = Percolator(text)
1517
self.undo = Delegator()
1618
self.per.insertfilter(self.undo)
@@ -34,77 +36,93 @@ def tearDownClass(cls):
3436
cls.editwin.per.close()
3537
cls.text.destroy()
3638
cls.root.destroy()
37-
del cls.text, cls.root
39+
del cls.text, cls.editwin, cls.root
3840

3941
def setUp(self):
4042
self.linenumber = LineNumbers(self.editwin)
4143

4244
def tearDown(self):
4345
self.text.delete('1.0', 'end')
4446

47+
def assert_state_disabled(self):
48+
state = self.linenumber.sidebar_text.config()['state']
49+
self.assertEqual(state[-1], tk.DISABLED)
50+
51+
def get_sidebar_text_contents(self):
52+
return self.linenumber.sidebar_text.get('1.0', tk.END)
53+
54+
def assert_sidebar_n_lines(self, n_lines):
55+
expected = '\n'.join(chain(map(str, range(1, n_lines + 1)), ['']))
56+
self.assertEqual(self.get_sidebar_text_contents(), expected)
57+
58+
def assert_text_equals(self, expected):
59+
return self.assertEqual(self.text.get('1.0', 'end'), expected)
60+
4561
def test_init_empty(self):
46-
get = self.linenumber.sidebar_text.get
47-
self.assertEqual(get('1.0', 'end'), '1\n')
62+
self.assert_sidebar_n_lines(1)
4863

4964
def test_init_not_empty(self):
5065
self.text.insert('insert', 'foo bar\n'*3)
51-
linenumber = LineNumbers(self.editwin)
52-
get = linenumber.sidebar_text.get
53-
self.assertEqual(get('1.0', 'end'), '1\n2\n3\n4\n')
66+
self.assert_text_equals('foo bar\n'*3 + '\n')
67+
self.assert_sidebar_n_lines(4)
5468

5569
def test_toggle_linenumbering(self):
56-
self.linenumber.side = tk.LEFT
57-
self.linenumber.toggle_line_numbers_event('')
70+
self.assertEqual(self.linenumber.side, tk.LEFT)
71+
self.linenumber.toggle_line_numbers_event(None)
5872
self.assertEqual(self.linenumber.side, None)
59-
60-
self.linenumber.side = None
61-
self.linenumber.toggle_line_numbers_event('')
73+
self.linenumber.toggle_line_numbers_event(None)
6274
self.assertEqual(self.linenumber.side, tk.LEFT)
6375

6476
def test_insert(self):
65-
text = self.editwin.text
66-
get = self.linenumber.sidebar_text.get
67-
config = self.linenumber.sidebar_text.config
68-
69-
text.insert('insert', 'foobar')
70-
self.assertEqual(get('1.0', 'end'), '1\n')
71-
self.assertEqual(config()['state'][-1], tk.DISABLED)
72-
73-
text.insert('insert', '\nfoo')
74-
self.assertEqual(get('1.0', 'end'), '1\n2\n')
75-
self.assertEqual(config()['state'][-1], tk.DISABLED)
76-
77-
text.insert('insert', 'hello\n'*2)
78-
self.assertEqual(get('1.0', 'end'), '1\n2\n3\n4\n')
79-
self.assertEqual(config()['state'][-1], tk.DISABLED)
80-
81-
text.insert('insert', '\nworld')
82-
self.assertEqual(get('1.0', 'end'), '1\n2\n3\n4\n5\n')
83-
self.assertEqual(config()['state'][-1], tk.DISABLED)
77+
self.text.insert('insert', 'foobar')
78+
self.assert_text_equals('foobar\n')
79+
self.assert_sidebar_n_lines(1)
80+
self.assert_state_disabled()
81+
82+
self.text.insert('insert', '\nfoo')
83+
self.assert_text_equals('foobar\nfoo\n')
84+
self.assert_sidebar_n_lines(2)
85+
self.assert_state_disabled()
86+
87+
self.text.insert('insert', 'hello\n'*2)
88+
self.assert_text_equals('foobar\nfoohello\nhello\n\n')
89+
self.assert_sidebar_n_lines(4)
90+
self.assert_state_disabled()
91+
92+
self.text.insert('insert', '\nworld')
93+
self.assert_text_equals('foobar\nfoohello\nhello\n\nworld\n')
94+
self.assert_sidebar_n_lines(5)
95+
self.assert_state_disabled()
8496

8597
def test_delete(self):
86-
text = self.editwin.text
87-
get = self.linenumber.sidebar_text.get
88-
config = self.linenumber.sidebar_text.config
89-
90-
text.insert('insert', 'foobar')
91-
text.delete('1.1', '1.3')
92-
self.assertEqual(get('1.0', 'end'), '1\n')
93-
self.assertEqual(config()['state'][-1], tk.DISABLED)
94-
95-
text.insert('insert', 'foo\n'*2)
96-
text.delete('3.1')
97-
text.delete('2.0', '2.end')
98-
self.assertEqual(get('1.0', 'end'), '1\n2\n')
99-
self.assertEqual(config()['state'][-1], tk.DISABLED)
100-
101-
text.delete('1.3', 'end')
102-
self.assertEqual(get('1.0', 'end'), '1\n')
103-
self.assertEqual(config()['state'][-1], tk.DISABLED)
104-
105-
text.delete('1.0', 'end')
106-
self.assertEqual(get('1.0', 'end'), '1\n')
107-
self.assertEqual(config()['state'][-1], tk.DISABLED)
98+
self.text.insert('insert', 'foobar')
99+
self.assert_text_equals('foobar\n')
100+
self.text.delete('1.1', '1.3')
101+
self.assert_text_equals('fbar\n')
102+
self.assert_sidebar_n_lines(1)
103+
self.assert_state_disabled()
104+
105+
self.text.insert('insert', 'foo\n'*2)
106+
self.assert_text_equals('fbarfoo\nfoo\n\n')
107+
self.assert_sidebar_n_lines(3)
108+
self.assert_state_disabled()
109+
110+
# note: deleting up to "2.end" doesn't delete the final newline
111+
self.text.delete('2.0', '2.end')
112+
self.assert_text_equals('fbarfoo\n\n\n')
113+
self.assert_sidebar_n_lines(3)
114+
self.assert_state_disabled()
115+
116+
self.text.delete('1.3', 'end')
117+
self.assert_text_equals('fba\n')
118+
self.assert_sidebar_n_lines(1)
119+
self.assert_state_disabled()
120+
121+
# note: Text widgets always keep a single '\n' character at the end
122+
self.text.delete('1.0', 'end')
123+
self.assert_text_equals('\n')
124+
self.assert_sidebar_n_lines(1)
125+
self.assert_state_disabled()
108126

109127
def test_sidebar_text_width(self):
110128
"""
@@ -113,26 +131,65 @@ def test_sidebar_text_width(self):
113131
"""
114132
def get_width():
115133
return self.linenumber.sidebar_text.config()['width'][-1]
116-
text = self.text
117134

135+
self.assert_sidebar_n_lines(1)
136+
self.assertEqual(get_width(), 1)
137+
138+
self.text.insert('insert', 'foo')
139+
self.assert_sidebar_n_lines(1)
140+
self.assertEqual(get_width(), 1)
141+
142+
self.text.insert('insert', 'foo\n'*8)
143+
self.assert_sidebar_n_lines(9)
118144
self.assertEqual(get_width(), 1)
119145

120-
text.insert('insert', 'foo')
146+
self.text.insert('insert', 'foo\n')
147+
self.assert_sidebar_n_lines(10)
148+
self.assertEqual(get_width(), 2)
149+
150+
self.text.insert('insert', 'foo\n')
151+
self.assert_sidebar_n_lines(11)
152+
self.assertEqual(get_width(), 2)
153+
154+
self.text.delete('insert -1l linestart', 'insert linestart')
155+
self.assert_sidebar_n_lines(10)
156+
self.assertEqual(get_width(), 2)
157+
158+
self.text.delete('insert -1l linestart', 'insert linestart')
159+
self.assert_sidebar_n_lines(9)
121160
self.assertEqual(get_width(), 1)
122161

123-
text.insert('insert', 'foo\n'*10)
162+
self.text.insert('insert', 'foo\n'*90)
163+
self.assert_sidebar_n_lines(99)
124164
self.assertEqual(get_width(), 2)
125165

126-
text.insert('insert', 'foo\n'*100)
166+
self.text.insert('insert', 'foo\n')
167+
self.assert_sidebar_n_lines(100)
168+
self.assertEqual(get_width(), 3)
169+
170+
self.text.insert('insert', 'foo\n')
171+
self.assert_sidebar_n_lines(101)
172+
self.assertEqual(get_width(), 3)
173+
174+
self.text.delete('insert -1l linestart', 'insert linestart')
175+
self.assert_sidebar_n_lines(100)
127176
self.assertEqual(get_width(), 3)
128177

129-
text.delete('50.0', 'end')
178+
self.text.delete('insert -1l linestart', 'insert linestart')
179+
self.assert_sidebar_n_lines(99)
180+
self.assertEqual(get_width(), 2)
181+
182+
self.text.delete('50.0', 'end')
183+
self.assert_sidebar_n_lines(49)
130184
self.assertEqual(get_width(), 2)
131185

132-
text.delete('5.0', 'end')
186+
self.text.delete('5.0', 'end')
187+
self.assert_sidebar_n_lines(4)
133188
self.assertEqual(get_width(), 1)
134189

135-
text.delete('1.0', 'end')
190+
# note: Text widgets always keep a single '\n' character at the end
191+
self.text.delete('1.0', 'end')
192+
self.assert_sidebar_n_lines(1)
136193
self.assertEqual(get_width(), 1)
137194

138195

0 commit comments

Comments
 (0)