예제 #1
0
class HistoryMultiSessionTestCase(_HistoryTestCase):
    # HistoryMultiSessionTestCase.test_two_sessions_basic
    def test_two_sessions_basic(self):
        a = "file:///home/tester/a.txt"
        b = "file:///home/tester/b.txt"
        locs = ([self.history.note_loc(Location(a, (i+1)*10, 1, session_name="1"))
                for i in range(10)]
                +
                [self.history.note_loc(Location(b, 100 + (i+1)*10, 1, session_name="2"))
                 for i in range(10)])
        cw1 = "file:///home/tester/cw1.txt"
        cw2 = "file:///home/tester/cw2.txt"
        curr_loc_cw1 = Location(cw1, 110, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 210, 1, session_name="2")
        new_loc_w1 = self.history.go_back(curr_loc_cw1, 3)
        self.assertEqual(new_loc_w1, locs[7])
        new_loc_w2 = self.history.go_back(curr_loc_cw2, 7)
        self.assertEqual(new_loc_w2, locs[13])
        self.assertNotEqual(new_loc_w2, locs[14]) # Verify they're different
        
        visits_pre_close = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        self.assertEqual(len(visits_pre_close[0]), 7)
        self.assertEqual(len(visits_pre_close[1]), 3)
        self.assertEqual(len(visits_pre_close[2]), 3)
        self.assertEqual(len(visits_pre_close[3]), 7)
        
        # And verify that after we do a close and reopen, the caches are maintained
        # correctly for each session.
        self.history.close()
        self.history = History(self._db_path_)
        visits_post_close = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        self.assertEqual(visits_post_close, visits_pre_close)
        
    def test_multisession_replenish_caches(self):
        a = "file:///home/tester/a.txt"
        b = "file:///home/tester/b.txt"
        locs = ([self.history.note_loc(Location(a, (i+1)*10, 1, session_name="1"))
                for i in range(100)]
                +
                [self.history.note_loc(Location(b, 1000 + (i+1)*10, 1, session_name="2"))
                 for i in range(100)])
        cw1 = "file:///home/tester/cw1.txt"
        cw2 = "file:///home/tester/cw2.txt"
        curr_loc_cw1 = Location(cw1, 1010, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 2010, 1, session_name="2")
        new_loc_w1 = self.history.go_back(curr_loc_cw1, 30)
        self.assertEqual(new_loc_w1, locs[70])
        new_loc_w2 = self.history.go_back(curr_loc_cw2, 55)
        self.assertEqual(new_loc_w2, locs[145])
        visits1 = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        self.assertEqual(visits1[0][0], locs[69]) # Go back
        self.assertEqual(visits1[1][-1], locs[71]) # Go forward
        self.assertEqual(visits1[2][0], locs[144]) # Go back
        self.assertEqual(visits1[3][-1], locs[146]) # Go forward
        # Now move forward 1, should truncate forward visits
        curr_loc_cw1 = Location(cw1, 1020, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 2020, 1, session_name="2")
        new_loc_w1 = self.history.note_loc(curr_loc_cw1)
        new_loc_w2 = self.history.note_loc(curr_loc_cw2)
        visits2 = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        # Should empty out the forward-visits cache, back-visits should be non-empty
        self.assertTrue(len(visits2[0]) > 0)
        self.assertEqual(len(visits2[1]), 0)
        self.assertTrue(len(visits2[2]) > 0)
        self.assertEqual(len(visits2[3]), 0)
        
        # Finally go back a bit, and verify that each back_visits cache
        # contains the right kind of URIs
        
        curr_loc_cw1 = Location(cw1, 1030, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 2030, 1, session_name="2")
        new_loc_w1 = self.history.go_back(curr_loc_cw1, 40)
        self.assertEqual(new_loc_w1, locs[31])
        new_loc_w2 = self.history.go_back(curr_loc_cw2, 41)
        self.assertEqual(new_loc_w2, locs[105])
        
        h1 = self.history.recent_history(curr_loc=None, merge_curr_loc=False, session_name="1")
        h2 = self.history.recent_history(curr_loc=None, merge_curr_loc=False, session_name="2")
        self.assertFalse([loc for isCurr, loc in h1 if not isCurr and loc.uri == b])
        self.assertFalse([loc for isCurr, loc in h2 if not isCurr and loc.uri == a])

    def test_multisession_obsolete_uri(self):
        a = "file:///home/tester/a.txt"
        b = "file:///home/tester/b.txt"
        # an obsolete URI can't be used in more than one session, by the
        # nature of the type of URIs that can be obsoleted (dbgp, e.g.)
        a1_obs = "file:///home/tester/a1_obs.txt"
        b1_obs = "file:///home/tester/b1_obs.txt"
        a2_obs = "file:///home/tester/a2_obs.txt"
        b2_obs = "file:///home/tester/b2_obs.txt"
        self.history.note_loc(Location(a, 10, 1, session_name="1"))
        self.history.note_loc(Location(a1_obs, 20, 1, session_name="1"))
        self.history.note_loc(Location(b1_obs, 30, 1, session_name="1"))
        self.history.note_loc(Location(a, 40, 1, session_name="1"))
        self.history.note_loc(Location(b, 110, 1, session_name="2"))
        self.history.note_loc(Location(a2_obs, 120, 1, session_name="2"))
        self.history.note_loc(Location(b2_obs, 130, 1, session_name="2"))
        self.history.note_loc(Location(b, 140, 1, session_name="2"))
        cw1 = "file:///home/tester/cw1.txt"
        cw2 = "file:///home/tester/cw2.txt"
        curr_loc_cw1 = Location(cw1, 50, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 150, 1, session_name="2")
        loc = self.history.go_back(curr_loc_cw1, 4)
        self.assertEqual(loc.line, 10)
        curr_loc1 = loc
        # Now close a_obs in session 1
        loc = self.history.go_forward(curr_loc1, 1)
        self.history.obsolete_uri(a1_obs, undo_delta=1, orig_dir_was_back=False, session_name="1")
        loc = self.history.go_forward(curr_loc1, 2)
        self.assertEqual(loc.line, 40) # later we'll move back onto b_obs
        curr_loc1 = loc
        
        # Now move to a_obs in session 2 -- it's still alive there
        loc = self.history.go_back(curr_loc_cw2, 3)
        self.assertEqual(loc.line, 120) # later we'll move back onto b_obs
        curr_loc2 = loc
        # Kill off b_obs
        loc = self.history.go_forward(curr_loc2, 1)
        self.history.obsolete_uri(b2_obs, undo_delta=1, orig_dir_was_back=False, session_name="2")
        loc = self.history.go_forward(curr_loc2, 1)
        self.assertEqual(loc.line, 140) # at b
        curr_loc2 = loc
        
        # Back to session1, verify b_obs is still there
        loc = self.history.go_back(curr_loc1, 1)
        self.assertEqual(loc.line, 30) # And kill it off
        self.history.obsolete_uri(b1_obs, undo_delta=1, orig_dir_was_back=True, session_name="1")
        loc = self.history.go_back(curr_loc1, 1)
        self.assertEqual(loc.line, 10)
        curr_loc1 = loc
        
        # Finally in session2, remove a_obs
        loc = self.history.go_back(curr_loc2, 1)
        self.assertEqual(loc.line, 120)
        # Kill off a_obs
        self.history.obsolete_uri(a2_obs, undo_delta=1, orig_dir_was_back=True, session_name="2")
        loc = self.history.go_back(curr_loc2, 1)
        self.assertEqual(loc.line, 110)
예제 #2
0
class HistoryMultiSessionTestCase(_HistoryTestCase):
    # HistoryMultiSessionTestCase.test_two_sessions_basic
    def test_two_sessions_basic(self):
        a = "file:///home/tester/a.txt"
        b = "file:///home/tester/b.txt"
        locs = ([
            self.history.note_loc(
                Location(a, (i + 1) * 10, 1, session_name="1"))
            for i in range(10)
        ] + [
            self.history.note_loc(
                Location(b, 100 + (i + 1) * 10, 1, session_name="2"))
            for i in range(10)
        ])
        cw1 = "file:///home/tester/cw1.txt"
        cw2 = "file:///home/tester/cw2.txt"
        curr_loc_cw1 = Location(cw1, 110, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 210, 1, session_name="2")
        new_loc_w1 = self.history.go_back(curr_loc_cw1, 3)
        self.assertEqual(new_loc_w1, locs[7])
        new_loc_w2 = self.history.go_back(curr_loc_cw2, 7)
        self.assertEqual(new_loc_w2, locs[13])
        self.assertNotEqual(new_loc_w2, locs[14])  # Verify they're different

        visits_pre_close = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        self.assertEqual(len(visits_pre_close[0]), 7)
        self.assertEqual(len(visits_pre_close[1]), 3)
        self.assertEqual(len(visits_pre_close[2]), 3)
        self.assertEqual(len(visits_pre_close[3]), 7)

        # And verify that after we do a close and reopen, the caches are maintained
        # correctly for each session.
        self.history.close()
        self.history = History(self._db_path_)
        visits_post_close = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        self.assertEqual(visits_post_close, visits_pre_close)

    def test_multisession_replenish_caches(self):
        a = "file:///home/tester/a.txt"
        b = "file:///home/tester/b.txt"
        locs = ([
            self.history.note_loc(
                Location(a, (i + 1) * 10, 1, session_name="1"))
            for i in range(100)
        ] + [
            self.history.note_loc(
                Location(b, 1000 + (i + 1) * 10, 1, session_name="2"))
            for i in range(100)
        ])
        cw1 = "file:///home/tester/cw1.txt"
        cw2 = "file:///home/tester/cw2.txt"
        curr_loc_cw1 = Location(cw1, 1010, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 2010, 1, session_name="2")
        new_loc_w1 = self.history.go_back(curr_loc_cw1, 30)
        self.assertEqual(new_loc_w1, locs[70])
        new_loc_w2 = self.history.go_back(curr_loc_cw2, 55)
        self.assertEqual(new_loc_w2, locs[145])
        visits1 = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        self.assertEqual(visits1[0][0], locs[69])  # Go back
        self.assertEqual(visits1[1][-1], locs[71])  # Go forward
        self.assertEqual(visits1[2][0], locs[144])  # Go back
        self.assertEqual(visits1[3][-1], locs[146])  # Go forward
        # Now move forward 1, should truncate forward visits
        curr_loc_cw1 = Location(cw1, 1020, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 2020, 1, session_name="2")
        new_loc_w1 = self.history.note_loc(curr_loc_cw1)
        new_loc_w2 = self.history.note_loc(curr_loc_cw2)
        visits2 = [
            self.history.get_session("1").recent_back_visits,
            self.history.get_session("1").forward_visits,
            self.history.get_session("2").recent_back_visits,
            self.history.get_session("2").forward_visits,
        ]
        # Should empty out the forward-visits cache, back-visits should be non-empty
        self.assertTrue(len(visits2[0]) > 0)
        self.assertEqual(len(visits2[1]), 0)
        self.assertTrue(len(visits2[2]) > 0)
        self.assertEqual(len(visits2[3]), 0)

        # Finally go back a bit, and verify that each back_visits cache
        # contains the right kind of URIs

        curr_loc_cw1 = Location(cw1, 1030, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 2030, 1, session_name="2")
        new_loc_w1 = self.history.go_back(curr_loc_cw1, 40)
        self.assertEqual(new_loc_w1, locs[31])
        new_loc_w2 = self.history.go_back(curr_loc_cw2, 41)
        self.assertEqual(new_loc_w2, locs[105])

        h1 = self.history.recent_history(curr_loc=None,
                                         merge_curr_loc=False,
                                         session_name="1")
        h2 = self.history.recent_history(curr_loc=None,
                                         merge_curr_loc=False,
                                         session_name="2")
        self.assertFalse(
            [loc for isCurr, loc in h1 if not isCurr and loc.uri == b])
        self.assertFalse(
            [loc for isCurr, loc in h2 if not isCurr and loc.uri == a])

    def test_multisession_obsolete_uri(self):
        a = "file:///home/tester/a.txt"
        b = "file:///home/tester/b.txt"
        # an obsolete URI can't be used in more than one session, by the
        # nature of the type of URIs that can be obsoleted (dbgp, e.g.)
        a1_obs = "file:///home/tester/a1_obs.txt"
        b1_obs = "file:///home/tester/b1_obs.txt"
        a2_obs = "file:///home/tester/a2_obs.txt"
        b2_obs = "file:///home/tester/b2_obs.txt"
        self.history.note_loc(Location(a, 10, 1, session_name="1"))
        self.history.note_loc(Location(a1_obs, 20, 1, session_name="1"))
        self.history.note_loc(Location(b1_obs, 30, 1, session_name="1"))
        self.history.note_loc(Location(a, 40, 1, session_name="1"))
        self.history.note_loc(Location(b, 110, 1, session_name="2"))
        self.history.note_loc(Location(a2_obs, 120, 1, session_name="2"))
        self.history.note_loc(Location(b2_obs, 130, 1, session_name="2"))
        self.history.note_loc(Location(b, 140, 1, session_name="2"))
        cw1 = "file:///home/tester/cw1.txt"
        cw2 = "file:///home/tester/cw2.txt"
        curr_loc_cw1 = Location(cw1, 50, 1, session_name="1")
        curr_loc_cw2 = Location(cw2, 150, 1, session_name="2")
        loc = self.history.go_back(curr_loc_cw1, 4)
        self.assertEqual(loc.line, 10)
        curr_loc1 = loc
        # Now close a_obs in session 1
        loc = self.history.go_forward(curr_loc1, 1)
        self.history.obsolete_uri(a1_obs,
                                  undo_delta=1,
                                  orig_dir_was_back=False,
                                  session_name="1")
        loc = self.history.go_forward(curr_loc1, 2)
        self.assertEqual(loc.line, 40)  # later we'll move back onto b_obs
        curr_loc1 = loc

        # Now move to a_obs in session 2 -- it's still alive there
        loc = self.history.go_back(curr_loc_cw2, 3)
        self.assertEqual(loc.line, 120)  # later we'll move back onto b_obs
        curr_loc2 = loc
        # Kill off b_obs
        loc = self.history.go_forward(curr_loc2, 1)
        self.history.obsolete_uri(b2_obs,
                                  undo_delta=1,
                                  orig_dir_was_back=False,
                                  session_name="2")
        loc = self.history.go_forward(curr_loc2, 1)
        self.assertEqual(loc.line, 140)  # at b
        curr_loc2 = loc

        # Back to session1, verify b_obs is still there
        loc = self.history.go_back(curr_loc1, 1)
        self.assertEqual(loc.line, 30)  # And kill it off
        self.history.obsolete_uri(b1_obs,
                                  undo_delta=1,
                                  orig_dir_was_back=True,
                                  session_name="1")
        loc = self.history.go_back(curr_loc1, 1)
        self.assertEqual(loc.line, 10)
        curr_loc1 = loc

        # Finally in session2, remove a_obs
        loc = self.history.go_back(curr_loc2, 1)
        self.assertEqual(loc.line, 120)
        # Kill off a_obs
        self.history.obsolete_uri(a2_obs,
                                  undo_delta=1,
                                  orig_dir_was_back=True,
                                  session_name="2")
        loc = self.history.go_back(curr_loc2, 1)
        self.assertEqual(loc.line, 110)