14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support as support
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport __builtin__ as builtins
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport rlcompleter
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass CompleteMe(object):
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    """ Trivial class used in testing rlcompleter.Completer. """
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    spam = 1
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestRlcompleter(unittest.TestCase):
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def setUp(self):
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.stdcompleter = rlcompleter.Completer()
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.completer = rlcompleter.Completer(dict(spam=int,
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                                                    egg=str,
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                                                    CompleteMe=CompleteMe))
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # forces stdcompleter to bind builtins namespace
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.stdcompleter.complete('', 0)
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_namespace(self):
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class A(dict):
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class B(list):
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertTrue(self.stdcompleter.use_main_ns)
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertFalse(self.completer.use_main_ns)
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertFalse(rlcompleter.Completer(A()).use_main_ns)
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(TypeError, rlcompleter.Completer, B((1,)))
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_global_matches(self):
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # test with builtins namespace
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(sorted(self.stdcompleter.global_matches('di')),
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         [x+'(' for x in dir(builtins) if x.startswith('di')])
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(sorted(self.stdcompleter.global_matches('st')),
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         [x+'(' for x in dir(builtins) if x.startswith('st')])
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.stdcompleter.global_matches('akaksajadhak'), [])
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # test with a customized namespace
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.global_matches('CompleteM'),
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['CompleteMe('])
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.global_matches('eg'),
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['egg('])
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # XXX: see issue5256
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.global_matches('CompleteM'),
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['CompleteMe('])
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_attr_matches(self):
504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # test with builtins namespace
514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.stdcompleter.attr_matches('str.s'),
524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['str.{}('.format(x) for x in dir(str)
534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                          if x.startswith('s')])
544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.stdcompleter.attr_matches('tuple.foospamegg'), [])
554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # test with a customized namespace
574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.attr_matches('CompleteMe.sp'),
584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['CompleteMe.spam'])
594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.attr_matches('Completeme.egg'), [])
604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        CompleteMe.me = CompleteMe
624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.attr_matches('CompleteMe.me.me.sp'),
634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['CompleteMe.me.me.spam'])
644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(self.completer.attr_matches('egg.s'),
654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         ['egg.{}('.format(x) for x in dir(str)
664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                          if x.startswith('s')])
674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main():
694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    support.run_unittest(TestRlcompleter)
704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__':
734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    test_main()
74