def test_check_unique_keys(self): with self.assertRaises(TypeError): menus.Options({ 'a': menus.MenuValue('p', Mock()), ' a': menus.MenuValue('k', Mock()) }) with self.assertRaises(TypeError): self.op[' 1'] = menus.MenuValue('1', Mock())
def test_possiblities_with_spaces(self): op = menus.Options({ ' a': menus.MenuValue('p', Mock()), 'b ': menus.MenuValue('p', Mock()), ' c ': menus.MenuValue('p', Mock()), }) for key in 'a', 'b', 'c': tc = op.get_possibilities(key) self.assertEqual(len(tc), 1) self.assertNotEqual(tc, [key]) self.assertIn(key, tc[0])
def test_matches_by_correct_key(self): op = menus.Options({ 'k': menus.MenuValue('1', Mock()), 'kk': menus.MenuValue('2', Mock()), 'kkk': menus.MenuValue('3', Mock()), }) best = op.match_best_or_none('k') self.assertEqual(best.name, '1') best = op.match_best_or_none('kk') self.assertEqual(best.name, '2') best = op.match_best_or_none('kkk') self.assertEqual(best.name, '3')
def test_matches_by_correct_padded_key(self): op = menus.Options({ ' a': menus.MenuValue('1', Mock()), 'b ': menus.MenuValue('2', Mock()), ' c ': menus.MenuValue('3', Mock()), ' s i ': menus.MenuValue('4', Mock()), }) best = op.match_best_or_none('a') self.assertEqual(best.name, '1') best = op.match_best_or_none('b') self.assertEqual(best.name, '2') best = op.match_best_or_none('c') self.assertEqual(best.name, '3') best = op.match_best_or_none('si') self.assertEqual(best.name, '4')
def test_pagination_ui(self): option_indicator = 'THIS IS AN OPTION' random_options = { str(uuid.uuid4()): menus.MenuValue(option_indicator, Mock()) for i in range(1000) } get_options = Mock() get_options.return_value = random_options self.submenu.get_options = get_options self.submenu.initialize() seen_options = 0 last_page = -1 while last_page != self.submenu.PAGE: ui = self.submenu.get_ui() if self.submenu.PAGE == last_page: break seen_options += len( [line for line in ui if option_indicator in line]) last_page = self.submenu.PAGE self.submenu.PAGE += 1 self.assertEqual(seen_options, len(random_options))
def test_return(self, patched_chargetter, patched_is_valid): destination = 'DESTINATION' patched_is_valid.return_value = menus.MenuValue('TEST', destination) self.submenu.initialize() patched_chargetter.return_value = b'\n' self.assertEqual(self.submenu.get_response(), destination) patched_is_valid.assert_called_once_with()
def test_shows_indicator_if_one_match(self): self.submenu.filter = 'a' self.submenu.get_options = Mock() self.submenu.get_options.return_value = menus.Options({ 'the_key': menus.MenuValue('sindri', Mock()), 'foo': menus.MenuValue('foo', Mock()), 'bar': menus.MenuValue('bar', Mock()), }) self.submenu.initialize() ui = self.submenu.get_ui() self.assertEqual(len([line for line in ui if 'sindri' in line]), 1) self.submenu.filter = 'the_key' ui = self.submenu.get_ui() self.assertEqual(len([line for line in ui if 'sindri' in line]), 2)
def test_fuzzy_filter(self): dct = {'1': menus.MenuValue('This is a playlist', Mock())} op = menus.Options(dct) should_match = ( 'ThisIsAPlaylist', 'ThisPlaylist', 'tiaplay', ) for _filter in should_match: self.assertEqual(len(op.filter(_filter)), 1)
def setUp(self): self.dct = { '1': menus.MenuValue('A', Mock()), '2': menus.MenuValue('B', Mock()), '3': menus.MenuValue('C', Mock()), 's': menus.MenuValue('Search', Mock()), 'kk': menus.MenuValue('pp', Mock()), 'ko': menus.MenuValue('p', Mock()), 'q': menus.MenuValue('o', Mock()), 'o': menus.MenuValue('q', Mock()), } self.op = menus.Options(self.dct)