Coverage for idle_test/test_percolator.py: 4%
91 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 percolator, coverage 100%."
3from idlelib.percolator import Percolator, Delegator
4import unittest
5from test.support import requires
6requires('gui')
7from tkinter import Text, Tk, END
10class MyFilter(Delegator):
11 def __init__(self):
12 Delegator.__init__(self, None)
14 def insert(self, *args):
15 self.insert_called_with = args
16 self.delegate.insert(*args)
18 def delete(self, *args):
19 self.delete_called_with = args
20 self.delegate.delete(*args)
22 def uppercase_insert(self, index, chars, tags=None):
23 chars = chars.upper()
24 self.delegate.insert(index, chars)
26 def lowercase_insert(self, index, chars, tags=None):
27 chars = chars.lower()
28 self.delegate.insert(index, chars)
30 def dont_insert(self, index, chars, tags=None):
31 pass
34class PercolatorTest(unittest.TestCase):
36 @classmethod
37 def setUpClass(cls):
38 cls.root = Tk()
39 cls.text = Text(cls.root)
41 @classmethod
42 def tearDownClass(cls):
43 del cls.text
44 cls.root.destroy()
45 del cls.root
47 def setUp(self):
48 self.percolator = Percolator(self.text)
49 self.filter_one = MyFilter()
50 self.filter_two = MyFilter()
51 self.percolator.insertfilter(self.filter_one)
52 self.percolator.insertfilter(self.filter_two)
54 def tearDown(self):
55 self.percolator.close()
56 self.text.delete('1.0', END)
58 def test_insertfilter(self):
59 self.assertIsNotNone(self.filter_one.delegate)
60 self.assertEqual(self.percolator.top, self.filter_two)
61 self.assertEqual(self.filter_two.delegate, self.filter_one)
62 self.assertEqual(self.filter_one.delegate, self.percolator.bottom)
64 def test_removefilter(self):
65 filter_three = MyFilter()
66 self.percolator.removefilter(self.filter_two)
67 self.assertEqual(self.percolator.top, self.filter_one)
68 self.assertIsNone(self.filter_two.delegate)
70 filter_three = MyFilter()
71 self.percolator.insertfilter(self.filter_two)
72 self.percolator.insertfilter(filter_three)
73 self.percolator.removefilter(self.filter_one)
74 self.assertEqual(self.percolator.top, filter_three)
75 self.assertEqual(filter_three.delegate, self.filter_two)
76 self.assertEqual(self.filter_two.delegate, self.percolator.bottom)
77 self.assertIsNone(self.filter_one.delegate)
79 def test_insert(self):
80 self.text.insert('insert', 'foo')
81 self.assertEqual(self.text.get('1.0', END), 'foo\n')
82 self.assertTupleEqual(self.filter_one.insert_called_with,
83 ('insert', 'foo', None))
85 def test_modify_insert(self):
86 self.filter_one.insert = self.filter_one.uppercase_insert
87 self.text.insert('insert', 'bAr')
88 self.assertEqual(self.text.get('1.0', END), 'BAR\n')
90 def test_modify_chain_insert(self):
91 filter_three = MyFilter()
92 self.percolator.insertfilter(filter_three)
93 self.filter_two.insert = self.filter_two.uppercase_insert
94 self.filter_one.insert = self.filter_one.lowercase_insert
95 self.text.insert('insert', 'BaR')
96 self.assertEqual(self.text.get('1.0', END), 'bar\n')
98 def test_dont_insert(self):
99 self.filter_one.insert = self.filter_one.dont_insert
100 self.text.insert('insert', 'foo bar')
101 self.assertEqual(self.text.get('1.0', END), '\n')
102 self.filter_one.insert = self.filter_one.dont_insert
103 self.text.insert('insert', 'foo bar')
104 self.assertEqual(self.text.get('1.0', END), '\n')
106 def test_without_filter(self):
107 self.text.insert('insert', 'hello')
108 self.assertEqual(self.text.get('1.0', 'end'), 'hello\n')
110 def test_delete(self):
111 self.text.insert('insert', 'foo')
112 self.text.delete('1.0', '1.2')
113 self.assertEqual(self.text.get('1.0', END), 'o\n')
114 self.assertTupleEqual(self.filter_one.delete_called_with,
115 ('1.0', '1.2'))
117if __name__ == '__main__':
118 unittest.main(verbosity=2)