Home | History | Annotate | Download | only in idle_test
      1 import unittest
      2 from test.test_support import requires
      3 from Tkinter import Tk, Text
      4 
      5 import idlelib.AutoComplete as ac
      6 import idlelib.AutoCompleteWindow as acw
      7 from idlelib.idle_test.mock_idle import Func
      8 from idlelib.idle_test.mock_tk import Event
      9 
     10 class AutoCompleteWindow:
     11     def complete():
     12         return
     13 
     14 class DummyEditwin:
     15     def __init__(self, root, text):
     16         self.root = root
     17         self.text = text
     18         self.indentwidth = 8
     19         self.tabwidth = 8
     20         self.context_use_ps1 = True
     21 
     22 
     23 class AutoCompleteTest(unittest.TestCase):
     24 
     25     @classmethod
     26     def setUpClass(cls):
     27         requires('gui')
     28         cls.root = Tk()
     29         cls.text = Text(cls.root)
     30         cls.editor = DummyEditwin(cls.root, cls.text)
     31 
     32     @classmethod
     33     def tearDownClass(cls):
     34         del cls.editor, cls.text
     35         cls.root.destroy()
     36         del cls.root
     37 
     38     def setUp(self):
     39         self.editor.text.delete('1.0', 'end')
     40         self.autocomplete = ac.AutoComplete(self.editor)
     41 
     42     def test_init(self):
     43         self.assertEqual(self.autocomplete.editwin, self.editor)
     44 
     45     def test_make_autocomplete_window(self):
     46         testwin = self.autocomplete._make_autocomplete_window()
     47         self.assertIsInstance(testwin, acw.AutoCompleteWindow)
     48 
     49     def test_remove_autocomplete_window(self):
     50         self.autocomplete.autocompletewindow = (
     51             self.autocomplete._make_autocomplete_window())
     52         self.autocomplete._remove_autocomplete_window()
     53         self.assertIsNone(self.autocomplete.autocompletewindow)
     54 
     55     def test_force_open_completions_event(self):
     56         # Test that force_open_completions_event calls _open_completions
     57         o_cs = Func()
     58         self.autocomplete.open_completions = o_cs
     59         self.autocomplete.force_open_completions_event('event')
     60         self.assertEqual(o_cs.args, (True, False, True))
     61 
     62     def test_try_open_completions_event(self):
     63         Equal = self.assertEqual
     64         autocomplete = self.autocomplete
     65         trycompletions = self.autocomplete.try_open_completions_event
     66         o_c_l = Func()
     67         autocomplete._open_completions_later = o_c_l
     68 
     69         # _open_completions_later should not be called with no text in editor
     70         trycompletions('event')
     71         Equal(o_c_l.args, None)
     72 
     73         # _open_completions_later should be called with COMPLETE_ATTRIBUTES (1)
     74         self.text.insert('1.0', 're.')
     75         trycompletions('event')
     76         Equal(o_c_l.args, (False, False, False, 1))
     77 
     78         # _open_completions_later should be called with COMPLETE_FILES (2)
     79         self.text.delete('1.0', 'end')
     80         self.text.insert('1.0', '"./Lib/')
     81         trycompletions('event')
     82         Equal(o_c_l.args, (False, False, False, 2))
     83 
     84     def test_autocomplete_event(self):
     85         Equal = self.assertEqual
     86         autocomplete = self.autocomplete
     87 
     88         # Test that the autocomplete event is ignored if user is pressing a
     89         # modifier key in addition to the tab key
     90         ev = Event(mc_state=True)
     91         self.assertIsNone(autocomplete.autocomplete_event(ev))
     92         del ev.mc_state
     93 
     94         # If autocomplete window is open, complete() method is called
     95         self.text.insert('1.0', 're.')
     96         # This must call autocomplete._make_autocomplete_window()
     97         Equal(self.autocomplete.autocomplete_event(ev), 'break')
     98 
     99         # If autocomplete window is not active or does not exist,
    100         # open_completions is called. Return depends on its return.
    101         autocomplete._remove_autocomplete_window()
    102         o_cs = Func()  # .result = None
    103         autocomplete.open_completions = o_cs
    104         Equal(self.autocomplete.autocomplete_event(ev), None)
    105         Equal(o_cs.args, (False, True, True))
    106         o_cs.result = True
    107         Equal(self.autocomplete.autocomplete_event(ev), 'break')
    108         Equal(o_cs.args, (False, True, True))
    109 
    110     def test_open_completions_later(self):
    111         # Test that autocomplete._delayed_completion_id is set
    112         pass
    113 
    114     def test_delayed_open_completions(self):
    115         # Test that autocomplete._delayed_completion_id set to None and that
    116         # open_completions only called if insertion index is the same as
    117         # _delayed_completion_index
    118         pass
    119 
    120     def test_open_completions(self):
    121         # Test completions of files and attributes as well as non-completion
    122         # of errors
    123         pass
    124 
    125     def test_fetch_completions(self):
    126         # Test that fetch_completions returns 2 lists:
    127         # For attribute completion, a large list containing all variables, and
    128         # a small list containing non-private variables.
    129         # For file completion, a large list containing all files in the path,
    130         # and a small list containing files that do not start with '.'
    131         pass
    132 
    133     def test_get_entity(self):
    134         # Test that a name is in the namespace of sys.modules and
    135         # __main__.__dict__
    136         pass
    137 
    138 
    139 if __name__ == '__main__':
    140     unittest.main(verbosity=2)
    141