14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support as support
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest
34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport __builtin__ as builtins
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport rlcompleter
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass CompleteMe(object):
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    """ Trivial class used in testing rlcompleter.Completer. """
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    spam = 1
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestRlcompleter(unittest.TestCase):
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def setUp(self):
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.stdcompleter = rlcompleter.Completer()
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.completer = rlcompleter.Completer(dict(spam=int,
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                                                    egg=str,
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                                                    CompleteMe=CompleteMe))
174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # forces stdcompleter to bind builtins namespace
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.stdcompleter.complete('', 0)
204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_namespace(self):
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class A(dict):
234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class B(list):
254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(self.stdcompleter.use_main_ns)
284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(self.completer.use_main_ns)
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(rlcompleter.Completer(A()).use_main_ns)
304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, rlcompleter.Completer, B((1,)))
314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_global_matches(self):
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test with builtins namespace
344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sorted(self.stdcompleter.global_matches('di')),
354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         [x+'(' for x in dir(builtins) if x.startswith('di')])
364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sorted(self.stdcompleter.global_matches('st')),
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         [x+'(' for x in dir(builtins) if x.startswith('st')])
384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.stdcompleter.global_matches('akaksajadhak'), [])
394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test with a customized namespace
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.global_matches('CompleteM'),
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['CompleteMe('])
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.global_matches('eg'),
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['egg('])
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # XXX: see issue5256
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.global_matches('CompleteM'),
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['CompleteMe('])
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_attr_matches(self):
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test with builtins namespace
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.stdcompleter.attr_matches('str.s'),
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['str.{}('.format(x) for x in dir(str)
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          if x.startswith('s')])
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.stdcompleter.attr_matches('tuple.foospamegg'), [])
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test with a customized namespace
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.attr_matches('CompleteMe.sp'),
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['CompleteMe.spam'])
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.attr_matches('Completeme.egg'), [])
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        CompleteMe.me = CompleteMe
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.attr_matches('CompleteMe.me.me.sp'),
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['CompleteMe.me.me.spam'])
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.completer.attr_matches('egg.s'),
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         ['egg.{}('.format(x) for x in dir(str)
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          if x.startswith('s')])
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main():
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    support.run_unittest(TestRlcompleter)
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == '__main__':
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_main()
74