test_percolator.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. "Test percolator, coverage 100%."
  2. from idlelib.percolator import Percolator, Delegator
  3. import unittest
  4. from test.support import requires
  5. requires('gui')
  6. from tkinter import Text, Tk, END
  7. class MyFilter(Delegator):
  8. def __init__(self):
  9. Delegator.__init__(self, None)
  10. def insert(self, *args):
  11. self.insert_called_with = args
  12. self.delegate.insert(*args)
  13. def delete(self, *args):
  14. self.delete_called_with = args
  15. self.delegate.delete(*args)
  16. def uppercase_insert(self, index, chars, tags=None):
  17. chars = chars.upper()
  18. self.delegate.insert(index, chars)
  19. def lowercase_insert(self, index, chars, tags=None):
  20. chars = chars.lower()
  21. self.delegate.insert(index, chars)
  22. def dont_insert(self, index, chars, tags=None):
  23. pass
  24. class PercolatorTest(unittest.TestCase):
  25. @classmethod
  26. def setUpClass(cls):
  27. cls.root = Tk()
  28. cls.text = Text(cls.root)
  29. @classmethod
  30. def tearDownClass(cls):
  31. del cls.text
  32. cls.root.destroy()
  33. del cls.root
  34. def setUp(self):
  35. self.percolator = Percolator(self.text)
  36. self.filter_one = MyFilter()
  37. self.filter_two = MyFilter()
  38. self.percolator.insertfilter(self.filter_one)
  39. self.percolator.insertfilter(self.filter_two)
  40. def tearDown(self):
  41. self.percolator.close()
  42. self.text.delete('1.0', END)
  43. def test_insertfilter(self):
  44. self.assertIsNotNone(self.filter_one.delegate)
  45. self.assertEqual(self.percolator.top, self.filter_two)
  46. self.assertEqual(self.filter_two.delegate, self.filter_one)
  47. self.assertEqual(self.filter_one.delegate, self.percolator.bottom)
  48. def test_removefilter(self):
  49. filter_three = MyFilter()
  50. self.percolator.removefilter(self.filter_two)
  51. self.assertEqual(self.percolator.top, self.filter_one)
  52. self.assertIsNone(self.filter_two.delegate)
  53. filter_three = MyFilter()
  54. self.percolator.insertfilter(self.filter_two)
  55. self.percolator.insertfilter(filter_three)
  56. self.percolator.removefilter(self.filter_one)
  57. self.assertEqual(self.percolator.top, filter_three)
  58. self.assertEqual(filter_three.delegate, self.filter_two)
  59. self.assertEqual(self.filter_two.delegate, self.percolator.bottom)
  60. self.assertIsNone(self.filter_one.delegate)
  61. def test_insert(self):
  62. self.text.insert('insert', 'foo')
  63. self.assertEqual(self.text.get('1.0', END), 'foo\n')
  64. self.assertTupleEqual(self.filter_one.insert_called_with,
  65. ('insert', 'foo', None))
  66. def test_modify_insert(self):
  67. self.filter_one.insert = self.filter_one.uppercase_insert
  68. self.text.insert('insert', 'bAr')
  69. self.assertEqual(self.text.get('1.0', END), 'BAR\n')
  70. def test_modify_chain_insert(self):
  71. filter_three = MyFilter()
  72. self.percolator.insertfilter(filter_three)
  73. self.filter_two.insert = self.filter_two.uppercase_insert
  74. self.filter_one.insert = self.filter_one.lowercase_insert
  75. self.text.insert('insert', 'BaR')
  76. self.assertEqual(self.text.get('1.0', END), 'bar\n')
  77. def test_dont_insert(self):
  78. self.filter_one.insert = self.filter_one.dont_insert
  79. self.text.insert('insert', 'foo bar')
  80. self.assertEqual(self.text.get('1.0', END), '\n')
  81. self.filter_one.insert = self.filter_one.dont_insert
  82. self.text.insert('insert', 'foo bar')
  83. self.assertEqual(self.text.get('1.0', END), '\n')
  84. def test_without_filter(self):
  85. self.text.insert('insert', 'hello')
  86. self.assertEqual(self.text.get('1.0', 'end'), 'hello\n')
  87. def test_delete(self):
  88. self.text.insert('insert', 'foo')
  89. self.text.delete('1.0', '1.2')
  90. self.assertEqual(self.text.get('1.0', END), 'o\n')
  91. self.assertTupleEqual(self.filter_one.delete_called_with,
  92. ('1.0', '1.2'))
  93. if __name__ == '__main__':
  94. unittest.main(verbosity=2)