blob: 2ff0788429f80c4ba522171df400c7593d6fe1dd [file] [log] [blame]
Antoine Pitrou482e66a2010-08-04 15:43:16 +00001import unittest
2import builtins
3import rlcompleter
4
5class CompleteMe:
6 """ Trivial class used in testing rlcompleter.Completer. """
7 spam = 1
Serhiy Storchakaab824222015-09-27 13:43:50 +03008 _ham = 2
Antoine Pitrou482e66a2010-08-04 15:43:16 +00009
10
11class TestRlcompleter(unittest.TestCase):
12 def setUp(self):
13 self.stdcompleter = rlcompleter.Completer()
14 self.completer = rlcompleter.Completer(dict(spam=int,
15 egg=str,
16 CompleteMe=CompleteMe))
17
18 # forces stdcompleter to bind builtins namespace
19 self.stdcompleter.complete('', 0)
20
21 def test_namespace(self):
22 class A(dict):
23 pass
24 class B(list):
25 pass
26
27 self.assertTrue(self.stdcompleter.use_main_ns)
28 self.assertFalse(self.completer.use_main_ns)
29 self.assertFalse(rlcompleter.Completer(A()).use_main_ns)
30 self.assertRaises(TypeError, rlcompleter.Completer, B((1,)))
31
32 def test_global_matches(self):
33 # test with builtins namespace
Georg Brandl50de5f52010-10-21 07:40:03 +000034 self.assertEqual(sorted(self.stdcompleter.global_matches('di')),
Antoine Pitrou482e66a2010-08-04 15:43:16 +000035 [x+'(' for x in dir(builtins) if x.startswith('di')])
Georg Brandl50de5f52010-10-21 07:40:03 +000036 self.assertEqual(sorted(self.stdcompleter.global_matches('st')),
Antoine Pitrou482e66a2010-08-04 15:43:16 +000037 [x+'(' for x in dir(builtins) if x.startswith('st')])
38 self.assertEqual(self.stdcompleter.global_matches('akaksajadhak'), [])
39
40 # test with a customized namespace
41 self.assertEqual(self.completer.global_matches('CompleteM'),
42 ['CompleteMe('])
43 self.assertEqual(self.completer.global_matches('eg'),
44 ['egg('])
45 # XXX: see issue5256
46 self.assertEqual(self.completer.global_matches('CompleteM'),
47 ['CompleteMe('])
48
49 def test_attr_matches(self):
50 # test with builtins namespace
51 self.assertEqual(self.stdcompleter.attr_matches('str.s'),
52 ['str.{}('.format(x) for x in dir(str)
53 if x.startswith('s')])
54 self.assertEqual(self.stdcompleter.attr_matches('tuple.foospamegg'), [])
Serhiy Storchakaab824222015-09-27 13:43:50 +030055 expected = sorted({'None.%s%s' % (x, '(' if x != '__doc__' else '')
56 for x in dir(None)})
57 self.assertEqual(self.stdcompleter.attr_matches('None.'), expected)
58 self.assertEqual(self.stdcompleter.attr_matches('None._'), expected)
59 self.assertEqual(self.stdcompleter.attr_matches('None.__'), expected)
Antoine Pitrou482e66a2010-08-04 15:43:16 +000060
61 # test with a customized namespace
62 self.assertEqual(self.completer.attr_matches('CompleteMe.sp'),
63 ['CompleteMe.spam'])
64 self.assertEqual(self.completer.attr_matches('Completeme.egg'), [])
Serhiy Storchakaab824222015-09-27 13:43:50 +030065 self.assertEqual(self.completer.attr_matches('CompleteMe.'),
66 ['CompleteMe.mro(', 'CompleteMe.spam'])
67 self.assertEqual(self.completer.attr_matches('CompleteMe._'),
68 ['CompleteMe._ham'])
69 matches = self.completer.attr_matches('CompleteMe.__')
70 for x in matches:
71 self.assertTrue(x.startswith('CompleteMe.__'), x)
72 self.assertIn('CompleteMe.__name__', matches)
73 self.assertIn('CompleteMe.__new__(', matches)
Antoine Pitrou482e66a2010-08-04 15:43:16 +000074
75 CompleteMe.me = CompleteMe
76 self.assertEqual(self.completer.attr_matches('CompleteMe.me.me.sp'),
77 ['CompleteMe.me.me.spam'])
78 self.assertEqual(self.completer.attr_matches('egg.s'),
79 ['egg.{}('.format(x) for x in dir(str)
80 if x.startswith('s')])
81
Berker Peksagaaf61142015-07-28 00:06:31 +030082 def test_complete(self):
83 completer = rlcompleter.Completer()
84 self.assertEqual(completer.complete('', 0), '\t')
Serhiy Storchaka8ace8e92015-09-27 13:26:03 +030085 self.assertEqual(completer.complete('a', 0), 'and ')
86 self.assertEqual(completer.complete('a', 1), 'as ')
87 self.assertEqual(completer.complete('as', 2), 'assert ')
88 self.assertEqual(completer.complete('an', 0), 'and ')
89 self.assertEqual(completer.complete('pa', 0), 'pass')
90 self.assertEqual(completer.complete('Fa', 0), 'False')
91 self.assertEqual(completer.complete('el', 0), 'elif ')
92 self.assertEqual(completer.complete('el', 1), 'else')
93 self.assertEqual(completer.complete('tr', 0), 'try:')
Antoine Pitrou482e66a2010-08-04 15:43:16 +000094
Antoine Pitrou482e66a2010-08-04 15:43:16 +000095if __name__ == '__main__':
Zachary Ware38c707e2015-04-13 15:00:43 -050096 unittest.main()