1 "Test percolator, coverage 100%."
2
3 from idlelib.percolator import Percolator, Delegator
4 import unittest
5 from test.support import requires
6 requires('gui')
7 from tkinter import Text, Tk, END
8
9
10 class ESC[4;38;5;81mMyFilter(ESC[4;38;5;149mDelegator):
11 def __init__(self):
12 Delegator.__init__(self, None)
13
14 def insert(self, *args):
15 self.insert_called_with = args
16 self.delegate.insert(*args)
17
18 def delete(self, *args):
19 self.delete_called_with = args
20 self.delegate.delete(*args)
21
22 def uppercase_insert(self, index, chars, tags=None):
23 chars = chars.upper()
24 self.delegate.insert(index, chars)
25
26 def lowercase_insert(self, index, chars, tags=None):
27 chars = chars.lower()
28 self.delegate.insert(index, chars)
29
30 def dont_insert(self, index, chars, tags=None):
31 pass
32
33
34 class ESC[4;38;5;81mPercolatorTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
35
36 @classmethod
37 def setUpClass(cls):
38 cls.root = Tk()
39 cls.text = Text(cls.root)
40
41 @classmethod
42 def tearDownClass(cls):
43 del cls.text
44 cls.root.destroy()
45 del cls.root
46
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)
53
54 def tearDown(self):
55 self.percolator.close()
56 self.text.delete('1.0', END)
57
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)
63
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)
69
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)
78
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))
84
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')
89
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')
97
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')
105
106 def test_without_filter(self):
107 self.text.insert('insert', 'hello')
108 self.assertEqual(self.text.get('1.0', 'end'), 'hello\n')
109
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'))
116
117 if __name__ == '__main__':
118 unittest.main(verbosity=2)