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)
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)