Coverage for idle_test/test_zzdummy.py: 30%
105 statements
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-11 13:22 -0700
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-11 13:22 -0700
1"Test zzdummy, coverage 100%."
3from idlelib import zzdummy
4import unittest
5from test.support import requires
6from tkinter import Tk, Text
7from unittest import mock
8from idlelib import config
9from idlelib import editor
10from idlelib import format
13usercfg = zzdummy.idleConf.userCfg
14testcfg = {
15 'main': config.IdleUserConfParser(''),
16 'highlight': config.IdleUserConfParser(''),
17 'keys': config.IdleUserConfParser(''),
18 'extensions': config.IdleUserConfParser(''),
19}
20code_sample = """\
22class C1:
23 # Class comment.
24 def __init__(self, a, b):
25 self.a = a
26 self.b = b
27"""
30class DummyEditwin:
31 get_selection_indices = editor.EditorWindow.get_selection_indices
32 def __init__(self, root, text):
33 self.root = root
34 self.top = root
35 self.text = text
36 self.fregion = format.FormatRegion(self)
37 self.text.undo_block_start = mock.Mock()
38 self.text.undo_block_stop = mock.Mock()
41class ZZDummyTest(unittest.TestCase):
43 @classmethod
44 def setUpClass(cls):
45 requires('gui')
46 root = cls.root = Tk()
47 root.withdraw()
48 text = cls.text = Text(cls.root)
49 cls.editor = DummyEditwin(root, text)
50 zzdummy.idleConf.userCfg = testcfg
52 @classmethod
53 def tearDownClass(cls):
54 zzdummy.idleConf.userCfg = usercfg
55 del cls.editor, cls.text
56 cls.root.update_idletasks()
57 for id in cls.root.tk.call('after', 'info'):
58 cls.root.after_cancel(id) # Need for EditorWindow.
59 cls.root.destroy()
60 del cls.root
62 def setUp(self):
63 text = self.text
64 text.insert('1.0', code_sample)
65 text.undo_block_start.reset_mock()
66 text.undo_block_stop.reset_mock()
67 zz = self.zz = zzdummy.ZzDummy(self.editor)
68 zzdummy.ZzDummy.ztext = '# ignore #'
70 def tearDown(self):
71 self.text.delete('1.0', 'end')
72 del self.zz
74 def checklines(self, text, value):
75 # Verify that there are lines being checked.
76 end_line = int(float(text.index('end')))
78 # Check each line for the starting text.
79 actual = []
80 for line in range(1, end_line):
81 txt = text.get(f'{line}.0', f'{line}.end')
82 actual.append(txt.startswith(value))
83 return actual
85 def test_init(self):
86 zz = self.zz
87 self.assertEqual(zz.editwin, self.editor)
88 self.assertEqual(zz.text, self.editor.text)
90 def test_reload(self):
91 self.assertEqual(self.zz.ztext, '# ignore #')
92 testcfg['extensions'].SetOption('ZzDummy', 'z-text', 'spam')
93 zzdummy.ZzDummy.reload()
94 self.assertEqual(self.zz.ztext, 'spam')
96 def test_z_in_event(self):
97 eq = self.assertEqual
98 zz = self.zz
99 text = zz.text
100 eq(self.zz.ztext, '# ignore #')
102 # No lines have the leading text.
103 expected = [False, False, False, False, False, False, False]
104 actual = self.checklines(text, zz.ztext)
105 eq(expected, actual)
107 text.tag_add('sel', '2.0', '4.end')
108 eq(zz.z_in_event(), 'break')
109 expected = [False, True, True, True, False, False, False]
110 actual = self.checklines(text, zz.ztext)
111 eq(expected, actual)
113 text.undo_block_start.assert_called_once()
114 text.undo_block_stop.assert_called_once()
116 def test_z_out_event(self):
117 eq = self.assertEqual
118 zz = self.zz
119 text = zz.text
120 eq(self.zz.ztext, '# ignore #')
122 # Prepend text.
123 text.tag_add('sel', '2.0', '5.end')
124 zz.z_in_event()
125 text.undo_block_start.reset_mock()
126 text.undo_block_stop.reset_mock()
128 # Select a few lines to remove text.
129 text.tag_remove('sel', '1.0', 'end')
130 text.tag_add('sel', '3.0', '4.end')
131 eq(zz.z_out_event(), 'break')
132 expected = [False, True, False, False, True, False, False]
133 actual = self.checklines(text, zz.ztext)
134 eq(expected, actual)
136 text.undo_block_start.assert_called_once()
137 text.undo_block_stop.assert_called_once()
139 def test_roundtrip(self):
140 # Insert and remove to all code should give back original text.
141 zz = self.zz
142 text = zz.text
144 text.tag_add('sel', '1.0', 'end-1c')
145 zz.z_in_event()
146 zz.z_out_event()
148 self.assertEqual(text.get('1.0', 'end-1c'), code_sample)
151if __name__ == '__main__': 151 ↛ 152line 151 didn't jump to line 152, because the condition on line 151 was never true
152 unittest.main(verbosity=2)