def entries(self, dates): today = history.Entry(atime=str(dates.today.timestamp()), url=QUrl('www.today.com'), title='today') tomorrow = history.Entry(atime=str(dates.tomorrow.timestamp()), url=QUrl('www.tomorrow.com'), title='tomorrow') yesterday = history.Entry(atime=str(dates.yesterday.timestamp()), url=QUrl('www.yesterday.com'), title='yesterday') return Dates(yesterday, today, tomorrow)
def web_history(stubs, web_history_stub): """Pre-populate the web-history stub with some history entries.""" web_history_stub.history_dict = collections.OrderedDict([ ('http://qutebrowser.org', history.Entry( datetime(2015, 9, 5).timestamp(), QUrl('http://qutebrowser.org'), 'qutebrowser | qutebrowser')), ('https://python.org', history.Entry( datetime(2016, 3, 8).timestamp(), QUrl('https://python.org'), 'Welcome to Python.org')), ('https://github.com', history.Entry( datetime(2016, 5, 1).timestamp(), QUrl('https://github.com'), 'GitHub')), ]) return web_history_stub
def test_iter(hist): list(hist.async_read()) url = QUrl('http://www.example.com/') hist.add_url(url, atime=12345) entry = history.Entry(url=url, atime=12345, redirect=False, title="") assert list(hist) == [entry]
def test_add_item_redirect(qtbot, hist): list(hist.async_read()) url = 'http://www.example.com/' with qtbot.assertNotEmitted(hist.add_completion_item): with qtbot.waitSignal(hist.item_added): hist.add_url(QUrl(url), redirect=True, atime=12345) entry = history.Entry(url=QUrl(url), redirect=True, atime=12345, title="") assert hist.history_dict[url] == entry
def test_qute_history_benchmark(self, fake_web_history, benchmark, now): for t in range(100000): # one history per second entry = history.Entry( atime=str(now - t), url=QUrl('www.x.com/{}'.format(t)), title='x at {}'.format(t)) fake_web_history._add_entry(entry) url = QUrl("qute://history/data?start_time={}".format(now)) _mimetype, _data = benchmark(qutescheme.qute_history, url)
def hist_interface(): entry = history.Entry(atime=0, url=QUrl('http://www.example.com/'), title='example') history_dict = {'http://www.example.com/': entry} fake_hist = FakeWebHistory(history_dict) interface = webkithistory.WebHistoryInterface(fake_hist) QWebHistoryInterface.setDefaultInterface(interface) yield QWebHistoryInterface.setDefaultInterface(None)
def test_qute_history_benchmark(self, fake_web_history, benchmark, now): # items must be earliest-first to ensure history is sorted properly for t in range(100000, 0, -1): # one history per second entry = history.Entry(atime=str(now - t), url=QUrl('www.x.com/{}'.format(t)), title='x at {}'.format(t)) fake_web_history._add_entry(entry) url = QUrl("qute://history/data?start_time={}".format(now)) _mimetype, data = benchmark(qutescheme.qute_history, url) assert len(json.loads(data)) > 1
def test_add_item(qtbot, hist): list(hist.async_read()) url = 'http://www.example.com/' with qtbot.waitSignals([hist.add_completion_item, hist.item_added], order='strict'): hist.add_url(QUrl(url), atime=12345, title="the title") entry = history.Entry(url=QUrl(url), redirect=False, atime=12345, title="the title") assert hist.history_dict[url] == entry
def hist_interface(): # pylint: disable=invalid-name QtWebKit = pytest.importorskip('PyQt5.QtWebKit') from qutebrowser.browser.webkit import webkithistory QWebHistoryInterface = QtWebKit.QWebHistoryInterface # pylint: enable=invalid-name entry = history.Entry(atime=0, url=QUrl('http://www.example.com/'), title='example') history_dict = {'http://www.example.com/': entry} fake_hist = FakeWebHistory(history_dict) interface = webkithistory.WebHistoryInterface(fake_hist) QWebHistoryInterface.setDefaultInterface(interface) yield QWebHistoryInterface.setDefaultInterface(None)
def entries(self, now): """Create fake history entries.""" # create 12 history items spaced 6 hours apart, starting from now entry_count = 12 interval = 6 * 60 * 60 items = [] for i in range(entry_count): entry_atime = now - i * interval entry = history.Entry(atime=str(entry_atime), url=QUrl("www.x.com/" + str(i)), title="Page " + str(i)) items.insert(0, entry) return items
def test_add_item_redirect_update(qtbot, tmpdir): """A redirect update added should override a non-redirect one.""" url = 'http://www.example.com/' hist_file = tmpdir / 'filled-history' hist_file.write('12345 {}\n'.format(url)) hist = history.WebHistory(hist_dir=str(tmpdir), hist_name='filled-history') list(hist.async_read()) with qtbot.assertNotEmitted(hist.add_completion_item): with qtbot.waitSignal(hist.item_added): hist.add_url(QUrl(url), redirect=True, atime=67890) entry = history.Entry(url=QUrl(url), redirect=True, atime=67890, title="") assert hist.history_dict[url] == entry
def test_qute_history_benchmark(self, dates, entries, fake_web_history, benchmark): for i in range(100000): entry = history.Entry(atime=str(dates.yesterday.timestamp()), url=QUrl('www.yesterday.com/{}'.format(i)), title='yesterday') fake_web_history._add_entry(entry) fake_web_history._add_entry(entries.today) fake_web_history._add_entry(entries.tomorrow) url = QUrl("qute://history") _mimetype, data = benchmark(qutescheme.qute_history, url) assert "today" in data assert "tomorrow" not in data assert "yesterday" not in data
def test_adding_item_during_async_read(qtbot, hist, redirect): """Check what happens when adding URL while reading the history.""" url = QUrl('http://www.example.com/') with qtbot.assertNotEmitted(hist.add_completion_item), \ qtbot.assertNotEmitted(hist.item_added): hist.add_url(url, redirect=redirect, atime=12345) if redirect: with qtbot.assertNotEmitted(hist.add_completion_item): with qtbot.waitSignal(hist.async_read_done): list(hist.async_read()) else: with qtbot.waitSignals([hist.add_completion_item, hist.async_read_done], order='strict'): list(hist.async_read()) assert not hist._temp_history expected = history.Entry(url=url, atime=12345, redirect=redirect, title="") assert list(hist.history_dict.values()) == [expected]
def test_url_completion_benchmark(benchmark, config_stub, quickmark_manager_stub, bookmark_manager_stub, web_history_stub): """Benchmark url completion.""" config_stub.data['completion'] = {'timestamp-format': '%Y-%m-%d', 'web-history-max-items': 1000} entries = [history.Entry( atime=i, url=QUrl('http://example.com/{}'.format(i)), title='title{}'.format(i)) for i in range(100000)] web_history_stub.history_dict = collections.OrderedDict( ((e.url_str(), e) for e in entries)) quickmark_manager_stub.marks = collections.OrderedDict( (e.title, e.url_str()) for e in entries[0:1000]) bookmark_manager_stub.marks = collections.OrderedDict( (e.url_str(), e.title) for e in entries[0:1000]) def bench(): model = urlmodel.UrlCompletionModel() filtermodel = sortfilter.CompletionFilterModel(model) filtermodel.set_pattern('') filtermodel.set_pattern('e') filtermodel.set_pattern('ex') filtermodel.set_pattern('ex ') filtermodel.set_pattern('ex 1') filtermodel.set_pattern('ex 12') filtermodel.set_pattern('ex 123') benchmark(bench)
hist = history.WebHistory(hist_dir=str(tmpdir), hist_name='filled-history') list(hist.async_read()) with qtbot.assertNotEmitted(hist.add_completion_item): with qtbot.waitSignal(hist.item_added): hist.add_url(QUrl(url), redirect=True, atime=67890) entry = history.Entry(url=QUrl(url), redirect=True, atime=67890, title="") assert hist.history_dict[url] == entry @pytest.mark.parametrize('line, expected', [ ( # old format without title '12345 http://example.com/', history.Entry(atime=12345, url=QUrl('http://example.com/'), title='',) ), ( # trailing space without title '12345 http://example.com/ ', history.Entry(atime=12345, url=QUrl('http://example.com/'), title='',) ), ( # new format with title '12345 http://example.com/ this is a title', history.Entry(atime=12345, url=QUrl('http://example.com/'), title='this is a title') ), ( # weird NUL bytes '\x0012345 http://example.com/',