def _test_position_mapping(self, app, *args): def get_map(id_list): return [(r[0], r[1]) for r in c.get_position_mapping(id_list)] c = Cursor() c.set_implementation(MockCursor()) self.assertCountEqual([(1, 1), (3, 3), (5, 5)], get_map([1, 3, 5])) app.stop()
def _test_read_tags(self, app, *args): c = Cursor() mgr = self._create_set_mgr() set_mgr = mgr.set_manager with self.conn: set_mgr.query_to_current_set("select id from file order by id") self.assertEqual( 1, self.conn.execute( 'select file_key from current_set where position=0'). fetchone()[0]) self.assertNotEqual( 0, self.conn.execute( 'select count(*) from current_set').fetchone()[0]) row = self.conn.execute( 'select rowid, * from current_set where position=1').fetchone( ) c.set_implementation( SqliteCursor(row=row, backend=self.conn, search_manager=self.search_manager)) self.assertEqual('file', c.get_tag(0, 'file_type', 0)) set_mgr.query_to_current_set( "select id from file where rowid between 20 and 70") book1_id = mgr.create_book("book1") self.assertEqual(10001, book1_id) self.assertEqual( 10001, self.conn.execute('select count(*) from file').fetchone()[0]) self.assertEqual( "book1", self.conn.execute( 'select name from file where id=10001').fetchone()[0]) set_mgr.query_to_current_set("select id from file order by id") self.assertEqual( 10001, self.conn.execute( 'select count(*) from current_set').fetchone()[0]) self.assertEqual( 10000, self.conn.execute( 'select position from current_set where file_key=10001'). fetchone()[0]) c.go_last() self.assertEqual(book1_id, c.file_id) self.assertEqual("book1", c.filename) self.assertEqual('book', c.get_tag(0, 'file_type', 0)) app.stop()
def _test_advanced_clone(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) c.go(990) c.mark() c.go_next() c.cut_marked() c.go_eol() c.paste_marked(append=True, update_cursor=False) c1 = c.clone() c1.go(999) self.assertFalse(c1.is_eol()) self.assertEqual(c1.pos, 999) self.assertEqual(c1.file_id, 990) app.stop()
def _test_tags(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) def test_tags(expected): tags = c.get_tags() for grp in tags: if len({}) > 0: self.assertCountEqual(grp, expected) c.add_tag("one") test_tags({'tag': ["one"]}) c.add_tag("two") test_tags({'tag': ["two", "one"]}) c.remove_tag("one") test_tags({'tag': ["two"]}) c.add_tag("three") test_tags({'tag': ["two", "three"]}) c.remove_tag("three", "two") test_tags({}) c.add_tag("one", "two") test_tags({'tag': ["two", "one"]}) c = Cursor() c.set_implementation(MockCursor()) c.go_last() c.add_tag("a") c.go_previous() c.add_tag("1", "2") c.go_first() test_tags({}) c.go_next() c.go_last() test_tags({'tag': ["a"]}) app.stop()
def _test_clone(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) c.go(300) c.mark() self.assertEqual(c.pos, 300) c1 = c.clone() self.assertEqual(c1.pos, 300) self.assertEqual(c1.eol_implementation, c.eol_implementation) self.assertEqual(c1.file_id, c.file_id) self.assertEqual(c1.filename, c.filename) self.assertEqual(c1.get_marked_count(), 1) c.mark_all(False) self.assertEqual(c1.get_marked_count(), c.get_marked_count()) c1.go(200) self.assertEqual(c1.pos, 200) c.go_eol() c1 = c.clone() self.assertEqual(c1.pos, c1.pos) self.assertEqual(c1.eol_implementation, c.eol_implementation) self.assertEqual(c1.file_id, c.file_id) self.assertEqual(c1.filename, c.filename) self.assertEqual(1000, c1.pos) c1.go_previous() self.assertEqual(999, c1.pos) self.assertEqual(999, c1.file_id) app.stop()
def _test_advanced_mark(self, app, *args): def test_eol(c): self.assertTrue(c.is_eol()) self.assertEqual(0, c.pos) self.assertIsNone(c.file_id) self.assertEqual(0, len(c)) c = Cursor() c.set_implementation(MockCursor()) c.go(500) c.mark_all() c.cut_marked() test_eol(c) c.go_previous() test_eol(c) c.go_next() test_eol(c) c.go_first() test_eol(c) c.go_last() test_eol(c) c.go_eol() test_eol(c) c.go(200) test_eol(c) c.go_previous() test_eol(c) c.go_next() test_eol(c) c.paste_marked() self.assertFalse(c.is_eol()) self.assertEqual(1000, len(c)) self.assertEqual(0, c.pos) self.assertEqual(0, c.file_id) c.go_next() self.assertEqual(1, c.pos) self.assertEqual(1, c.file_id) app.stop()
def _test_mark(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) self.assertFalse(c.get_mark()) # test marking c.mark() self.assertTrue(c.get_mark()) c.go_next() self.assertFalse(c.get_mark()) c.mark(True) self.assertTrue(c.get_mark()) c.go_next() self.assertFalse(c.get_mark()) c.go_first() self.assertTrue(c.get_mark()) self.assertEqual(2, c.get_marked_count()) # test unmarking c.mark() self.assertFalse(c.get_mark()) c.go_next() c.mark() self.assertFalse(c.get_mark()) c.go_next() c.mark(False) self.assertFalse(c.get_mark()) self.assertEqual(0, c.get_marked_count()) # test cut & paste c.go(5) self.assertEqual(5, c.file_id) c.mark() c.go_first() c.cut_marked() self.assertEqual(999, len(c)) c.go(5) self.assertEqual(5, c.pos) self.assertEqual(6, c.file_id) c.go(1) c.paste_marked() self.assertEqual(1000, len(c)) self.assertEqual(1, c.pos) self.assertEqual(5, c.file_id) c.go(10) for i in range(20): c.mark() c.go_next() c.go(10) c.cut_marked() self.assertEqual(10, c.pos) self.assertEqual(30, c.file_id) c.go_next() self.assertEqual(11, c.pos) self.assertEqual(31, c.file_id) c.go_previous() c.paste_marked() self.assertEqual(10, c.pos) self.assertEqual(10, c.file_id) c.go_next() self.assertEqual(11, c.pos) self.assertEqual(11, c.file_id) # reset cursor c = Cursor() c.set_implementation(MockCursor()) # test special cases like first and last c.go_first() c.mark() c.cut_marked() self.assertEqual(0, c.pos) self.assertEqual(1, c.file_id) c.go_previous() self.assertEqual(0, c.pos) self.assertEqual(1, c.file_id) c.go_next() self.assertEqual(1, c.pos) self.assertEqual(2, c.file_id) c.paste_marked() self.assertEqual(1, c.pos) self.assertEqual(0, c.file_id) c.go_next() self.assertEqual(2, c.pos) self.assertEqual(2, c.file_id) c.go_last() self.assertEqual(999, c.pos) self.assertEqual(999, c.file_id) c.mark() self.assertTrue(c.get_mark()) c.cut_marked() self.assertEqual(999, c.pos) self.assertIsNone(c.file_id) self.assertTrue(c.is_eol()) c.paste_marked() self.assertEqual(999, c.pos) self.assertEqual(999, c.file_id) self.assertFalse(c.is_eol()) # reset cursor c = Cursor() c.set_implementation(MockCursor()) # test cut all c.mark_all() c.cut_marked() self.assertTrue(c.is_eol()) self.assertEqual(0, c.pos) self.assertIsNone(c.file_id) self.assertEqual(0, len(c)) c.paste_marked() self.assertFalse(c.is_eol()) self.assertEqual(1000, len(c)) self.assertEqual(0, c.pos) self.assertEqual(0, c.file_id) c.go_next() self.assertEqual(1, c.pos) self.assertEqual(1, c.file_id) c.go_previous() c.go_previous() self.assertEqual(0, c.pos) self.assertEqual(0, c.file_id) c.go_last() self.assertEqual(999, c.pos) self.assertEqual(999, c.file_id) self.assertFalse(c.is_eol()) c.go_next() self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.mark_all(True) c.cut_marked() c.cut_marked() self.assertTrue(c.is_eol()) self.assertEqual(0, c.pos) self.assertIsNone(c.file_id) self.assertEqual(0, len(c)) c.paste_marked() self.assertFalse(c.is_eol()) self.assertEqual(1000, len(c)) self.assertEqual(0, c.pos) self.assertEqual(0, c.file_id) app.stop()
def _test_move_items(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) c.go(5) c.move_to(4) self.assertEqual(4, c.pos) self.assertEqual(5, c.file_id) c.go(5) self.assertEqual(5, c.pos) self.assertEqual(4, c.file_id) c.go(20) c.move_to(10) self.assertEqual(10, c.pos) self.assertEqual(20, c.file_id) c.go_next() self.assertEqual(11, c.pos) self.assertEqual(10, c.file_id) c.go_next() self.assertEqual(12, c.pos) self.assertEqual(11, c.file_id) c.go(20) self.assertEqual(20, c.pos) self.assertEqual(19, c.file_id) c.go_next() self.assertEqual(21, c.pos) self.assertEqual(21, c.file_id) c.go_previous() self.assertEqual(20, c.pos) self.assertEqual(19, c.file_id) c.go(30) c.move_to(35) self.assertEqual(35, c.pos) self.assertEqual(30, c.file_id) c.go_next() self.assertEqual(36, c.pos) self.assertEqual(36, c.file_id) c.go(30) self.assertEqual(30, c.pos) self.assertEqual(31, c.file_id) c.go(34) self.assertEqual(34, c.pos) self.assertEqual(35, c.file_id) # cases with first place c.go_first() c.move_to(2) self.assertEqual(2, c.pos) self.assertEqual(0, c.file_id) c.go_first() self.assertEqual(0, c.pos) self.assertEqual(1, c.file_id) c.go(500) c.move_to(0) self.assertEqual(0, c.pos) self.assertEqual(500, c.file_id) c.go_next() self.assertEqual(1, c.pos) self.assertEqual(1, c.file_id) c.go_previous() c.go_previous() self.assertEqual(0, c.pos) self.assertEqual(500, c.file_id) # cases with last place c.go_last() self.assertEqual(999, c.pos) self.assertEqual(999, c.file_id) c.move_to(990) self.assertEqual(990, c.pos) self.assertEqual(999, c.file_id) c.go_last() self.assertEqual(999, c.pos) self.assertEqual(998, c.file_id) c.go_next() self.assertEqual(1000, c.pos) self.assertTrue(c.is_eol()) c.go_next() self.assertEqual(1000, c.pos) self.assertTrue(c.is_eol()) c.go_last() self.assertEqual(999, c.pos) self.assertEqual(998, c.file_id) c.go(995) c.move_to(999) self.assertEqual(999, c.pos) self.assertEqual(994, c.file_id) c.go_last() self.assertEqual(999, c.pos) self.assertEqual(994, c.file_id) c.go_next() self.assertEqual(1000, c.pos) self.assertTrue(c.is_eol()) c.go_previous() self.assertEqual(999, c.pos) self.assertEqual(994, c.file_id) # case with eol c.go(999) c.move_to(1000) self.assertEqual(999, c.pos) self.assertEqual(994, c.file_id) c.go_eol() c.move_to(700) self.assertEqual(1000, c.pos) self.assertTrue(c.is_eol()) c.go_previous() self.assertEqual(999, c.pos) self.assertEqual(994, c.file_id) c.go(700) self.assertEqual(700, c.pos) self.assertEqual(700, c.file_id) self.assertFalse(c.is_eol()) c.go_eol() self.assertEqual(1000, c.pos) self.assertTrue(c.is_eol()) c.go_previous() self.assertEqual(999, c.pos) self.assertEqual(994, c.file_id) c.go_eol() c.go_first() self.assertEqual(0, c.pos) self.assertEqual(500, c.file_id) c.go_eol() for i in range(3): c.go_next() self.assertEqual(1000, c.pos) self.assertTrue(c.is_eol()) app.stop()
def _test_navigate(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) self.assertEqual(0, c.pos) c.go_next() self.assertEqual(1, c.pos) c.go_previous() self.assertEqual(0, c.pos) for i in range(5): c.go_next() self.assertEqual(5, c.pos) c.go_first() self.assertEqual(0, c.pos) c.go_previous() self.assertEqual(0, c.pos) c.go(200) self.assertEqual(200, c.pos) self.assertFalse(c.is_eol()) c.go_last() self.assertEqual(999, c.pos) c.go_next() self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go_next() self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go_previous() self.assertEqual(999, c.pos) c.go_eol() self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go_first() self.assertEqual(0, c.pos) self.assertFalse(c.is_eol()) c.go_eol() c.go_eol() self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go(500) self.assertEqual(500, c.pos) self.assertFalse(c.is_eol()) c.go(600) self.assertEqual(600, c.pos) self.assertFalse(c.is_eol()) c.go(-5) self.assertEqual(0, c.pos) self.assertFalse(c.is_eol()) c.go(1001) self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go(2000) self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go_first() c.go(2000) self.assertTrue(c.is_eol()) self.assertEqual(1000, c.pos) c.go_previous() self.assertEqual(999, c.pos) app.stop()
def _test_set_implementation(self, app, *args): c = Cursor() c.set_implementation(MockCursor()) self.assertEqual(0, c.pos) self.assertEqual(0, c.file_id) app.stop()
def _test_empty_cursor(self, app, *args): c = Cursor() self.assertIsNone(c.filename) self.assertIsNone(c.pos) self.assertIsNone(c.file_id) self.assertIsNone(c.implementation) self.assertIsInstance(c.eol_implementation, EOLCursor) c1 = c.clone() self.assertIsNone(c1.filename) self.assertIsNone(c1.pos) self.assertIsNone(c1.file_id) self.assertIsNone(c1.implementation) self.assertIsInstance(c1.eol_implementation, EOLCursor) self.assertNotEqual(c, c1) c.go_next() c.go_previous() c.go_first() c.go_last() c.go_eol() self.assertIsInstance(c1.eol_implementation, EOLCursor) app.stop()
class Session(Entity): cursor = None fields = {} active_fs = {} cmd_actions = {} cmd_hotkeys = {} mimetype_actions = {} view_context = {} view_category = None view_category_history = deque() view_history = deque() max_view_history_size = 20 skip_push_context = False def __init__(self): self.cursor = Cursor() CoreVariables(self) def set_cursor(self, new_cursor): self.cursor.unbind(file_id=self.on_file_id_change) self.cursor = new_cursor self.cursor.bind(file_id=self.on_file_id_change) def on_file_id_change(self, instance, value): pass def fill_text_fields(self, original_text): return Templite(original_text.replace("%{", "${write(").replace("}%", ")}$")).render(**self.fields) def get_filesystem(self, key): return self.active_fs[key] def add_filesystem(self, key, filesystem): self.active_fs[key] = filesystem def set_action(self, name, fn, profile="default"): if name in self.cmd_actions: self.cmd_actions[name][profile] = fn else: self.cmd_actions[name] = {profile: fn} def set_hotkey(self, key, command, modifier=0, profile="default"): if key in self.cmd_hotkeys: hotkey = self.cmd_hotkeys[key] if profile in hotkey: hotkey[profile][modifier] = command else: hotkey[profile] = {modifier: command} else: self.cmd_hotkeys[key] = {profile: {modifier: command}} def get_hotkey_command(self, key, modifier=0, profile="default"): hotkeys_profiles = self.cmd_hotkeys[key] if profile in hotkeys_profiles: hotkeys = hotkeys_profiles[profile] if modifier in hotkeys: return hotkeys[modifier] return False def register_mimetype_action(self, mimetype, action, fn): self.mimetype_actions.setdefault(mimetype, {})[action] = fn def get_mimetype_action(self, mimetype, action, default=None): if mimetype in self.mimetype_actions: if action in self.mimetype_actions[mimetype]: return self.mimetype_actions[mimetype][action] else: return default def get_context(self, category): return self.view_context.setdefault(category, HistoryContext()) def push_context(self, category): if not self.skip_push_context: self.view_category_history.append(category) self.view_context[category].category = category self.view_history.append(self.view_context[category].clone()) def pop_context(self): if len(self.view_history) > 0: view_category = self.view_category_history.pop() self.view_context[view_category] = self.view_history.pop() return self.view_context[view_category] else: return None
def __init__(self): self.cursor = Cursor() CoreVariables(self)