Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
    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()
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
    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()
Exemplo n.º 8
0
    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()
Exemplo n.º 9
0
    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()
Exemplo n.º 10
0
 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()
Exemplo n.º 11
0
    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()
Exemplo n.º 12
0
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
Exemplo n.º 13
0
 def __init__(self):
     self.cursor = Cursor()
     CoreVariables(self)