From Lembrun, 1 Month ago, written in Plain Text.
Embed
  1. tests/end2end/features/test_misc_bdd.py ..................sssss.....ss.. [  3%]
  2. .......xx.........s..s......s...........ssss..                           [  3%]
  3. tests/end2end/features/test_navigate_bdd.py .F
  4.  
  5. ________________________ test_navigating_up_in_qutehelp ________________________
  6.  
  7. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c840109d0>
  8. url = 'qute://help/commands.html'
  9.  
  10.     def wait_for_load_finished_url(self, url, *, timeout=None,
  11.                                    load_status='success', after=None):
  12.         """Wait until a URL has finished loading."""
  13.         __tracebackhide__ = (lambda e: e.errisinstance(
  14.             testprocess.WaitForTimeout))
  15.    
  16.         if timeout is None:
  17.             if testutils.ON_CI:
  18.                 timeout = 15000
  19.             else:
  20.                 timeout = 5000
  21.    
  22.         qurl = QUrl(url)
  23.         if not qurl.isValid():
  24.             raise ValueError("Invalid URL {}: {}".format(url,
  25.                                                          qurl.errorString()))
  26.    
  27.         # We really need the same representation that the webview uses in
  28.         # its __repr__
  29.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  30.         assert url
  31.    
  32.         pattern = re.compile(
  33.             r"(load status for <qutebrowser\.browser\..* "
  34.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  35.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  36.                 load_status=re.escape(load_status), url=re.escape(url)))
  37.    
  38.         try:
  39. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  40.  
  41. tests/end2end/fixtures/quteprocess.py:847:
  42. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  43.  
  44. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c840109d0>
  45. timeout = 15000
  46. kwargs = {'after': LogLine(data='{"created": 1618848890.1624072, "msecs": 162.40715980529785, "levelname": "DEBUG", "name": "co...elp/commands\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html'\\) -> .*)")}
  47. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c83f2e3a0>
  48. xfail = None
  49.  
  50.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  51.                  **kwargs):
  52.         """Extend wait_for to add divisor if a test is xfailing."""
  53.         __tracebackhide__ = (lambda e:
  54.                              e.errisinstance(testprocess.WaitForTimeout))
  55.         xfail = self.request.node.get_closest_marker('xfail')
  56.         if xfail and (not xfail.args or xfail.args[0]):
  57.             kwargs['divisor'] = 10
  58.         else:
  59.             kwargs['divisor'] = 1
  60. >       return super().wait_for(timeout=timeout, **kwargs)
  61.  
  62. tests/end2end/fixtures/quteprocess.py:603:
  63. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  64.  
  65. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c840109d0>
  66. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  67. after = LogLine(data='{"created": 1618848890.1624072, "msecs": 162.40715980529785, "levelname": "DEBUG", "name": "commands", "...n", "lineno": 537, "levelno": 10, "message": "command called: open [\'qute://help/commands.html\']"}', waited_for=True)
  68. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html'\\) -> .*)")}
  69. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c83f2e1f0>
  70. key = 'message', @py_assert3 = None
  71.  
  72.     def wait_for(self, timeout=None, *, override_waited_for=False,
  73.                  do_skip=False, divisor=1, after=None, **kwargs):
  74.         """Wait until a given value is found in the data.
  75.    
  76.         Keyword arguments to this function get interpreted as attributes of the
  77.         searched data. Every given argument is treated as a pattern which
  78.         the attribute has to match against.
  79.    
  80.         Args:
  81.             timeout: How long to wait for the message.
  82.             override_waited_for: If set, gets triggered by previous messages
  83.                                  again.
  84.             do_skip: If set, call pytest.skip on a timeout.
  85.             divisor: A factor to decrease the timeout by.
  86.             after: If it's an existing line, ensure it's after the given one.
  87.    
  88.         Return:
  89.             The matched line.
  90.         """
  91.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  92.    
  93.         if timeout is None:
  94.             if do_skip:
  95.                 timeout = 2000
  96.             elif testutils.ON_CI:
  97.                 timeout = 15000
  98.             else:
  99.                 timeout = 5000
  100.    
  101.         timeout //= divisor
  102.    
  103.         if not kwargs:
  104.             raise TypeError("No keyword arguments given!")
  105.         for key in kwargs:
  106.             assert key in self.KEYS
  107.    
  108.         existing = self._wait_for_existing(override_waited_for, after,
  109.                                            **kwargs)
  110.         if existing is not None:
  111.             return existing
  112.         else:
  113. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  114.                                       **kwargs)
  115.  
  116. tests/end2end/fixtures/testprocess.py:495:
  117. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  118.  
  119. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c840109d0>
  120. timeout = 15000, do_skip = False
  121. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html'\\) -> .*)")}
  122. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c83f2e160>
  123. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html'\\) -> .*)")
  124. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help/commands\\\\.ht…'
  125. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c83f2e310>
  126. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c83e38190>
  127. got_signal = False
  128. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id...ml/?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/commands\\\\.html\'\\\\) -> .*)")}.'
  129.  
  130.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  131.         """Wait for a log message which doesn't exist yet.
  132.    
  133.         Called via wait_for.
  134.         """
  135.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  136.         message = kwargs.get('message', None)
  137.         if message is not None:
  138.             elided = quteutils.elide(repr(message), 100)
  139.             self._log("\n----> Waiting for {} in the log".format(elided))
  140.    
  141.         spy = QSignalSpy(self.new_data)
  142.         elapsed_timer = QElapsedTimer()
  143.         elapsed_timer.start()
  144.    
  145.         while True:
  146.             # Skip if there are pending messages causing a skip
  147.             self._maybe_skip()
  148.             got_signal = spy.wait(timeout)
  149.             if not got_signal or elapsed_timer.hasExpired(timeout):
  150.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  151.                     timeout, kwargs)
  152.                 if do_skip:
  153.                     pytest.skip(msg)
  154.                 else:
  155. >                   raise WaitForTimeout(msg)
  156. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html'\\) -> .*)")}.
  157.  
  158. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  159.  
  160. During handling of the above exception, another exception occurred:
  161.  
  162. request = <FixtureRequest for <Function test_navigating_up_in_qutehelp>>
  163.  
  164.     @pytest.mark.usefixtures(*function_args)
  165.     def scenario_wrapper(request):
  166. >       _execute_scenario(feature, scenario, request, encoding)
  167.  
  168. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  169. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  170. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  171.     _execute_step_function(request, scenario, step, step_func)
  172. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  173.     return_value = step_func(**kwargs)
  174. tests/end2end/features/conftest.py:253: in open_path
  175.     quteproc.open_path(path, new_tab=new_tab, new_bg_tab=new_bg_tab,
  176. tests/end2end/fixtures/quteprocess.py:784: in open_path
  177.     self.open_url(url, new_tab=new_tab, new_bg_tab=new_bg_tab,
  178. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  179.  
  180. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c840109d0>
  181. url = 'qute://help/commands.html'
  182.  
  183.     def open_url(self, url, *, new_tab=False, new_bg_tab=False,
  184.                  new_window=False, private=False, as_url=False, wait=True):
  185.         """Open the given url in qutebrowser."""
  186.         if sum(1 for opt in [new_tab, new_bg_tab, new_window, private, as_url]
  187.                if opt) > 1:
  188.             raise ValueError("Conflicting options given!")
  189.    
  190.         if as_url:
  191.             self.send_cmd(url, invalid=True)
  192.             line = None
  193.         elif new_tab:
  194.             line = self.send_cmd(':open -t ' + url)
  195.         elif new_bg_tab:
  196.             line = self.send_cmd(':open -b ' + url)
  197.         elif new_window:
  198.             line = self.send_cmd(':open -w ' + url)
  199.         elif private:
  200.             line = self.send_cmd(':open -p ' + url)
  201.         else:
  202.             line = self.send_cmd(':open ' + url)
  203.    
  204.         if wait:
  205. >           self.wait_for_load_finished_url(url, after=line)
  206. E           end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/commands.html to be loaded
  207.  
  208. tests/end2end/fixtures/quteprocess.py:810: WaitForTimeout
  209. ------------------------------ qutebrowser output ------------------------------
  210. Log
  211. -------------------------------- server output ---------------------------------
  212. Log
  213. --------------------------------- BDD scenario ---------------------------------
  214. Scenario
  215. ------------------------------ Captured log call -------------------------------
  216. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-yd4q711k/runtime/ipc-eb7adedb5232ff9302e7197d59f7e043
  217. INFO     ipc:ipc.py:481 Opening in existing instance
  218. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  219. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-yd4q711k/runtime/ipc-eb7adedb5232ff9302e7197d59f7e043
  220. INFO     ipc:ipc.py:481 Opening in existing instance
  221. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  222. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-yd4q711k/runtime/ipc-eb7adedb5232ff9302e7197d59f7e043
  223. INFO     ipc:ipc.py:481 Opening in existing instance
  224. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  225. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-yd4q711k/runtime/ipc-eb7adedb5232ff9302e7197d59f7e043
  226. INFO     ipc:ipc.py:481 Opening in existing instance
  227. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  228. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-yd4q711k/runtime/ipc-eb7adedb5232ff9302e7197d59f7e043
  229. INFO     ipc:ipc.py:481 Opening in existing instance
  230. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open qute://help/commands.html"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  231.  
  232. tests/end2end/features/test_navigate_bdd.py .........s..                 [  4%]
  233. tests/end2end/features/test_notifications_bdd.py ssssssssssssssssssss    [  4%]
  234. tests/end2end/features/test_open_bdd.py .............                    [  4%]
  235. tests/end2end/features/test_private_bdd.py ............s.s.....          [  4%]
  236. tests/end2end/features/test_prompts_bdd.py ..........ss.s..............s [  5%]
  237. sssssxs..............s                                                   [  5%]
  238. tests/end2end/features/test_qutescheme_bdd.py F
  239.  
  240. ___________________________ test_help_without_topic ____________________________
  241.  
  242. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  243. url = 'qute://help/index.html'
  244.  
  245.     def wait_for_load_finished_url(self, url, *, timeout=None,
  246.                                    load_status='success', after=None):
  247.         """Wait until a URL has finished loading."""
  248.         __tracebackhide__ = (lambda e: e.errisinstance(
  249.             testprocess.WaitForTimeout))
  250.    
  251.         if timeout is None:
  252.             if testutils.ON_CI:
  253.                 timeout = 15000
  254.             else:
  255.                 timeout = 5000
  256.    
  257.         qurl = QUrl(url)
  258.         if not qurl.isValid():
  259.             raise ValueError("Invalid URL {}: {}".format(url,
  260.                                                          qurl.errorString()))
  261.    
  262.         # We really need the same representation that the webview uses in
  263.         # its __repr__
  264.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  265.         assert url
  266.    
  267.         pattern = re.compile(
  268.             r"(load status for <qutebrowser\.browser\..* "
  269.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  270.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  271.                 load_status=re.escape(load_status), url=re.escape(url)))
  272.    
  273.         try:
  274. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  275.  
  276. tests/end2end/fixtures/quteprocess.py:847:
  277. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  278.  
  279. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  280. timeout = 15000
  281. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}
  282. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c8334da60>
  283. xfail = None
  284.  
  285.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  286.                  **kwargs):
  287.         """Extend wait_for to add divisor if a test is xfailing."""
  288.         __tracebackhide__ = (lambda e:
  289.                              e.errisinstance(testprocess.WaitForTimeout))
  290.         xfail = self.request.node.get_closest_marker('xfail')
  291.         if xfail and (not xfail.args or xfail.args[0]):
  292.             kwargs['divisor'] = 10
  293.         else:
  294.             kwargs['divisor'] = 1
  295. >       return super().wait_for(timeout=timeout, **kwargs)
  296.  
  297. tests/end2end/fixtures/quteprocess.py:603:
  298. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  299.  
  300. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  301. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  302. after = None
  303. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}
  304. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c83af3b80>
  305. key = 'message', @py_assert3 = None
  306.  
  307.     def wait_for(self, timeout=None, *, override_waited_for=False,
  308.                  do_skip=False, divisor=1, after=None, **kwargs):
  309.         """Wait until a given value is found in the data.
  310.    
  311.         Keyword arguments to this function get interpreted as attributes of the
  312.         searched data. Every given argument is treated as a pattern which
  313.         the attribute has to match against.
  314.    
  315.         Args:
  316.             timeout: How long to wait for the message.
  317.             override_waited_for: If set, gets triggered by previous messages
  318.                                  again.
  319.             do_skip: If set, call pytest.skip on a timeout.
  320.             divisor: A factor to decrease the timeout by.
  321.             after: If it's an existing line, ensure it's after the given one.
  322.    
  323.         Return:
  324.             The matched line.
  325.         """
  326.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  327.    
  328.         if timeout is None:
  329.             if do_skip:
  330.                 timeout = 2000
  331.             elif testutils.ON_CI:
  332.                 timeout = 15000
  333.             else:
  334.                 timeout = 5000
  335.    
  336.         timeout //= divisor
  337.    
  338.         if not kwargs:
  339.             raise TypeError("No keyword arguments given!")
  340.         for key in kwargs:
  341.             assert key in self.KEYS
  342.    
  343.         existing = self._wait_for_existing(override_waited_for, after,
  344.                                            **kwargs)
  345.         if existing is not None:
  346.             return existing
  347.         else:
  348. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  349.                                       **kwargs)
  350.  
  351. tests/end2end/fixtures/testprocess.py:495:
  352. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  353.  
  354. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  355. timeout = 15000, do_skip = False
  356. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}
  357. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c83cb41f0>
  358. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")
  359. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help/index\\\\.html/…'
  360. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c827920d0>
  361. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c827316d0>
  362. got_signal = False
  363. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id....html/?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/index\\\\.html\'\\\\) -> .*)")}.'
  364.  
  365.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  366.         """Wait for a log message which doesn't exist yet.
  367.    
  368.         Called via wait_for.
  369.         """
  370.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  371.         message = kwargs.get('message', None)
  372.         if message is not None:
  373.             elided = quteutils.elide(repr(message), 100)
  374.             self._log("\n----> Waiting for {} in the log".format(elided))
  375.    
  376.         spy = QSignalSpy(self.new_data)
  377.         elapsed_timer = QElapsedTimer()
  378.         elapsed_timer.start()
  379.    
  380.         while True:
  381.             # Skip if there are pending messages causing a skip
  382.             self._maybe_skip()
  383.             got_signal = spy.wait(timeout)
  384.             if not got_signal or elapsed_timer.hasExpired(timeout):
  385.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  386.                     timeout, kwargs)
  387.                 if do_skip:
  388.                     pytest.skip(msg)
  389.                 else:
  390. >                   raise WaitForTimeout(msg)
  391. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}.
  392.  
  393. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  394.  
  395. During handling of the above exception, another exception occurred:
  396.  
  397. request = <FixtureRequest for <Function test_help_without_topic>>
  398.  
  399.     @pytest.mark.usefixtures(*function_args)
  400.     def scenario_wrapper(request):
  401. >       _execute_scenario(feature, scenario, request, encoding)
  402.  
  403. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  404. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  405. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  406.     _execute_step_function(request, scenario, step, step_func)
  407. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  408.     return_value = step_func(**kwargs)
  409. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  410.  
  411. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  412. path = 'qute://help/index.html'
  413.  
  414.     @bdd.when(bdd.parsers.parse("I wait until {path} is loaded"))
  415.     def wait_until_loaded(quteproc, path):
  416.         """Wait until the given path is loaded (as per qutebrowser log)."""
  417. >       quteproc.wait_for_load_finished(path)
  418. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/index.html to be loaded
  419.  
  420. tests/end2end/features/conftest.py:305: WaitForTimeout
  421. ------------------------------ qutebrowser output ------------------------------
  422. Log
  423. -------------------------------- server output ---------------------------------
  424. Log
  425. --------------------------------- BDD scenario ---------------------------------
  426. Scenario
  427. ------------------------------ Captured log call -------------------------------
  428. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  429. INFO     ipc:ipc.py:481 Opening in existing instance
  430. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  431. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  432. INFO     ipc:ipc.py:481 Opening in existing instance
  433. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  434. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  435. INFO     ipc:ipc.py:481 Opening in existing instance
  436. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  437. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  438. INFO     ipc:ipc.py:481 Opening in existing instance
  439. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  440. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  441. INFO     ipc:ipc.py:481 Opening in existing instance
  442. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  443. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  444. INFO     ipc:ipc.py:481 Opening in existing instance
  445. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":tab-only"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  446. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  447. INFO     ipc:ipc.py:481 Opening in existing instance
  448. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":help"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  449.  
  450. tests/end2end/features/test_qutescheme_bdd.py .F
  451.  
  452. ____________________________ test_help_with_command ____________________________
  453.  
  454. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  455. url = 'qute://help/commands.html#back'
  456.  
  457.     def wait_for_load_finished_url(self, url, *, timeout=None,
  458.                                    load_status='success', after=None):
  459.         """Wait until a URL has finished loading."""
  460.         __tracebackhide__ = (lambda e: e.errisinstance(
  461.             testprocess.WaitForTimeout))
  462.    
  463.         if timeout is None:
  464.             if testutils.ON_CI:
  465.                 timeout = 15000
  466.             else:
  467.                 timeout = 5000
  468.    
  469.         qurl = QUrl(url)
  470.         if not qurl.isValid():
  471.             raise ValueError("Invalid URL {}: {}".format(url,
  472.                                                          qurl.errorString()))
  473.    
  474.         # We really need the same representation that the webview uses in
  475.         # its __repr__
  476.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  477.         assert url
  478.    
  479.         pattern = re.compile(
  480.             r"(load status for <qutebrowser\.browser\..* "
  481.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  482.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  483.                 load_status=re.escape(load_status), url=re.escape(url)))
  484.    
  485.         try:
  486. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  487.  
  488. tests/end2end/fixtures/quteprocess.py:847:
  489. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  490.  
  491. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  492. timeout = 15000
  493. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qut...\\.html\\#back/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html\\#back'\\) -> .*)}
  494. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c82792280>
  495. xfail = None
  496.  
  497.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  498.                  **kwargs):
  499.         """Extend wait_for to add divisor if a test is xfailing."""
  500.         __tracebackhide__ = (lambda e:
  501.                              e.errisinstance(testprocess.WaitForTimeout))
  502.         xfail = self.request.node.get_closest_marker('xfail')
  503.         if xfail and (not xfail.args or xfail.args[0]):
  504.             kwargs['divisor'] = 10
  505.         else:
  506.             kwargs['divisor'] = 1
  507. >       return super().wait_for(timeout=timeout, **kwargs)
  508.  
  509. tests/end2end/fixtures/quteprocess.py:603:
  510. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  511.  
  512. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  513. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  514. after = None
  515. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html\\#back/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html\\#back'\\) -> .*)}
  516. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c826e4160>
  517. key = 'message', @py_assert3 = None
  518.  
  519.     def wait_for(self, timeout=None, *, override_waited_for=False,
  520.                  do_skip=False, divisor=1, after=None, **kwargs):
  521.         """Wait until a given value is found in the data.
  522.    
  523.         Keyword arguments to this function get interpreted as attributes of the
  524.         searched data. Every given argument is treated as a pattern which
  525.         the attribute has to match against.
  526.    
  527.         Args:
  528.             timeout: How long to wait for the message.
  529.             override_waited_for: If set, gets triggered by previous messages
  530.                                  again.
  531.             do_skip: If set, call pytest.skip on a timeout.
  532.             divisor: A factor to decrease the timeout by.
  533.             after: If it's an existing line, ensure it's after the given one.
  534.    
  535.         Return:
  536.             The matched line.
  537.         """
  538.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  539.    
  540.         if timeout is None:
  541.             if do_skip:
  542.                 timeout = 2000
  543.             elif testutils.ON_CI:
  544.                 timeout = 15000
  545.             else:
  546.                 timeout = 5000
  547.    
  548.         timeout //= divisor
  549.    
  550.         if not kwargs:
  551.             raise TypeError("No keyword arguments given!")
  552.         for key in kwargs:
  553.             assert key in self.KEYS
  554.    
  555.         existing = self._wait_for_existing(override_waited_for, after,
  556.                                            **kwargs)
  557.         if existing is not None:
  558.             return existing
  559.         else:
  560. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  561.                                       **kwargs)
  562.  
  563. tests/end2end/fixtures/testprocess.py:495:
  564. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  565.  
  566. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  567. timeout = 15000, do_skip = False
  568. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html\\#back/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html\\#back'\\) -> .*)}
  569. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c826e41f0>
  570. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html\\#back/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html\\#back'\\) -> .*)
  571. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help/commands\\\\.ht…'
  572. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c826e4430>
  573. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c826cd890>
  574. got_signal = False
  575. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id...: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/commands\\\\.html\\\\#back\'\\\\) -> .*)}.'
  576.  
  577.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  578.         """Wait for a log message which doesn't exist yet.
  579.    
  580.         Called via wait_for.
  581.         """
  582.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  583.         message = kwargs.get('message', None)
  584.         if message is not None:
  585.             elided = quteutils.elide(repr(message), 100)
  586.             self._log("\n----> Waiting for {} in the log".format(elided))
  587.    
  588.         spy = QSignalSpy(self.new_data)
  589.         elapsed_timer = QElapsedTimer()
  590.         elapsed_timer.start()
  591.    
  592.         while True:
  593.             # Skip if there are pending messages causing a skip
  594.             self._maybe_skip()
  595.             got_signal = spy.wait(timeout)
  596.             if not got_signal or elapsed_timer.hasExpired(timeout):
  597.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  598.                     timeout, kwargs)
  599.                 if do_skip:
  600.                     pytest.skip(msg)
  601.                 else:
  602. >                   raise WaitForTimeout(msg)
  603. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/commands\\.html\\#back/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/commands\\.html\\#back'\\) -> .*)}.
  604.  
  605. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  606.  
  607. During handling of the above exception, another exception occurred:
  608.  
  609. request = <FixtureRequest for <Function test_help_with_command>>
  610.  
  611.     @pytest.mark.usefixtures(*function_args)
  612.     def scenario_wrapper(request):
  613. >       _execute_scenario(feature, scenario, request, encoding)
  614.  
  615. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  616. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  617. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  618.     _execute_step_function(request, scenario, step, step_func)
  619. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  620.     return_value = step_func(**kwargs)
  621. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  622.  
  623. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  624. path = 'qute://help/commands.html#back'
  625.  
  626.     @bdd.when(bdd.parsers.parse("I wait until {path} is loaded"))
  627.     def wait_until_loaded(quteproc, path):
  628.         """Wait until the given path is loaded (as per qutebrowser log)."""
  629. >       quteproc.wait_for_load_finished(path)
  630. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/commands.html#back to be loaded
  631.  
  632. tests/end2end/features/conftest.py:305: WaitForTimeout
  633. ------------------------------ qutebrowser output ------------------------------
  634. Log
  635. -------------------------------- server output ---------------------------------
  636. Log
  637. --------------------------------- BDD scenario ---------------------------------
  638. Scenario
  639. ------------------------------ Captured log call -------------------------------
  640. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  641. INFO     ipc:ipc.py:481 Opening in existing instance
  642. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  643. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  644. INFO     ipc:ipc.py:481 Opening in existing instance
  645. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  646. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  647. INFO     ipc:ipc.py:481 Opening in existing instance
  648. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  649. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  650. INFO     ipc:ipc.py:481 Opening in existing instance
  651. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  652. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  653. INFO     ipc:ipc.py:481 Opening in existing instance
  654. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  655. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  656. INFO     ipc:ipc.py:481 Opening in existing instance
  657. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":tab-only"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  658. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  659. INFO     ipc:ipc.py:481 Opening in existing instance
  660. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":help :back"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  661.  
  662. tests/end2end/features/test_qutescheme_bdd.py .F
  663.  
  664. ____________________________ test_help_with_setting ____________________________
  665.  
  666. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  667. url = 'qute://help/settings.html#editor.command'
  668.  
  669.     def wait_for_load_finished_url(self, url, *, timeout=None,
  670.                                    load_status='success', after=None):
  671.         """Wait until a URL has finished loading."""
  672.         __tracebackhide__ = (lambda e: e.errisinstance(
  673.             testprocess.WaitForTimeout))
  674.    
  675.         if timeout is None:
  676.             if testutils.ON_CI:
  677.                 timeout = 15000
  678.             else:
  679.                 timeout = 5000
  680.    
  681.         qurl = QUrl(url)
  682.         if not qurl.isValid():
  683.             raise ValueError("Invalid URL {}: {}".format(url,
  684.                                                          qurl.errorString()))
  685.    
  686.         # We really need the same representation that the webview uses in
  687.         # its __repr__
  688.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  689.         assert url
  690.    
  691.         pattern = re.compile(
  692.             r"(load status for <qutebrowser\.browser\..* "
  693.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  694.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  695.                 load_status=re.escape(load_status), url=re.escape(url)))
  696.    
  697.         try:
  698. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  699.  
  700. tests/end2end/fixtures/quteprocess.py:847:
  701. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  702.  
  703. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  704. timeout = 15000
  705. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qut...\\.html\\#editor\\.command/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/settings\\.html\\#ed)}
  706. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c82686670>
  707. xfail = None
  708.  
  709.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  710.                  **kwargs):
  711.         """Extend wait_for to add divisor if a test is xfailing."""
  712.         __tracebackhide__ = (lambda e:
  713.                              e.errisinstance(testprocess.WaitForTimeout))
  714.         xfail = self.request.node.get_closest_marker('xfail')
  715.         if xfail and (not xfail.args or xfail.args[0]):
  716.             kwargs['divisor'] = 10
  717.         else:
  718.             kwargs['divisor'] = 1
  719. >       return super().wait_for(timeout=timeout, **kwargs)
  720.  
  721. tests/end2end/fixtures/quteprocess.py:603:
  722. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  723.  
  724. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  725. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  726. after = None
  727. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/settings\\.html\\#editor\\.command/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/settings\\.html\\#ed)}
  728. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c82686700>
  729. key = 'message', @py_assert3 = None
  730.  
  731.     def wait_for(self, timeout=None, *, override_waited_for=False,
  732.                  do_skip=False, divisor=1, after=None, **kwargs):
  733.         """Wait until a given value is found in the data.
  734.    
  735.         Keyword arguments to this function get interpreted as attributes of the
  736.         searched data. Every given argument is treated as a pattern which
  737.         the attribute has to match against.
  738.    
  739.         Args:
  740.             timeout: How long to wait for the message.
  741.             override_waited_for: If set, gets triggered by previous messages
  742.                                  again.
  743.             do_skip: If set, call pytest.skip on a timeout.
  744.             divisor: A factor to decrease the timeout by.
  745.             after: If it's an existing line, ensure it's after the given one.
  746.    
  747.         Return:
  748.             The matched line.
  749.         """
  750.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  751.    
  752.         if timeout is None:
  753.             if do_skip:
  754.                 timeout = 2000
  755.             elif testutils.ON_CI:
  756.                 timeout = 15000
  757.             else:
  758.                 timeout = 5000
  759.    
  760.         timeout //= divisor
  761.    
  762.         if not kwargs:
  763.             raise TypeError("No keyword arguments given!")
  764.         for key in kwargs:
  765.             assert key in self.KEYS
  766.    
  767.         existing = self._wait_for_existing(override_waited_for, after,
  768.                                            **kwargs)
  769.         if existing is not None:
  770.             return existing
  771.         else:
  772. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  773.                                       **kwargs)
  774.  
  775. tests/end2end/fixtures/testprocess.py:495:
  776. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  777.  
  778. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  779. timeout = 15000, do_skip = False
  780. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/settings\\.html\\#editor\\.command/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/settings\\.html\\#ed)}
  781. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c826869d0>
  782. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/settings\\.html\\#editor\\.command/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/settings\\.html\\#ed)
  783. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help/settings\\\\.ht…'
  784. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c82686af0>
  785. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c8266ce40>
  786. got_signal = False
  787. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id...\\.command/?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/settings\\\\.html\\\\#ed)}.'
  788.  
  789.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  790.         """Wait for a log message which doesn't exist yet.
  791.    
  792.         Called via wait_for.
  793.         """
  794.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  795.         message = kwargs.get('message', None)
  796.         if message is not None:
  797.             elided = quteutils.elide(repr(message), 100)
  798.             self._log("\n----> Waiting for {} in the log".format(elided))
  799.    
  800.         spy = QSignalSpy(self.new_data)
  801.         elapsed_timer = QElapsedTimer()
  802.         elapsed_timer.start()
  803.    
  804.         while True:
  805.             # Skip if there are pending messages causing a skip
  806.             self._maybe_skip()
  807.             got_signal = spy.wait(timeout)
  808.             if not got_signal or elapsed_timer.hasExpired(timeout):
  809.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  810.                     timeout, kwargs)
  811.                 if do_skip:
  812.                     pytest.skip(msg)
  813.                 else:
  814. >                   raise WaitForTimeout(msg)
  815. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/settings\\.html\\#editor\\.command/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/settings\\.html\\#ed)}.
  816.  
  817. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  818.  
  819. During handling of the above exception, another exception occurred:
  820.  
  821. request = <FixtureRequest for <Function test_help_with_setting>>
  822.  
  823.     @pytest.mark.usefixtures(*function_args)
  824.     def scenario_wrapper(request):
  825. >       _execute_scenario(feature, scenario, request, encoding)
  826.  
  827. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  828. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  829. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  830.     _execute_step_function(request, scenario, step, step_func)
  831. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  832.     return_value = step_func(**kwargs)
  833. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  834.  
  835. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  836. path = 'qute://help/settings.html#editor.command'
  837.  
  838.     @bdd.when(bdd.parsers.parse("I wait until {path} is loaded"))
  839.     def wait_until_loaded(quteproc, path):
  840.         """Wait until the given path is loaded (as per qutebrowser log)."""
  841. >       quteproc.wait_for_load_finished(path)
  842. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/settings.html#editor.command to be loaded
  843.  
  844. tests/end2end/features/conftest.py:305: WaitForTimeout
  845. ------------------------------ qutebrowser output ------------------------------
  846. Log
  847. -------------------------------- server output ---------------------------------
  848. Log
  849. --------------------------------- BDD scenario ---------------------------------
  850. Scenario
  851. ------------------------------ Captured log call -------------------------------
  852. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  853. INFO     ipc:ipc.py:481 Opening in existing instance
  854. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  855. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  856. INFO     ipc:ipc.py:481 Opening in existing instance
  857. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  858. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  859. INFO     ipc:ipc.py:481 Opening in existing instance
  860. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  861. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  862. INFO     ipc:ipc.py:481 Opening in existing instance
  863. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  864. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  865. INFO     ipc:ipc.py:481 Opening in existing instance
  866. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  867. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  868. INFO     ipc:ipc.py:481 Opening in existing instance
  869. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":tab-only"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  870. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  871. INFO     ipc:ipc.py:481 Opening in existing instance
  872. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":help editor.command"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  873.  
  874. tests/end2end/features/test_qutescheme_bdd.py F
  875.  
  876. _______________________________ test_help_with_t _______________________________
  877.  
  878. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  879. url = 'qute://help/index.html'
  880.  
  881.     def wait_for_load_finished_url(self, url, *, timeout=None,
  882.                                    load_status='success', after=None):
  883.         """Wait until a URL has finished loading."""
  884.         __tracebackhide__ = (lambda e: e.errisinstance(
  885.             testprocess.WaitForTimeout))
  886.    
  887.         if timeout is None:
  888.             if testutils.ON_CI:
  889.                 timeout = 15000
  890.             else:
  891.                 timeout = 5000
  892.    
  893.         qurl = QUrl(url)
  894.         if not qurl.isValid():
  895.             raise ValueError("Invalid URL {}: {}".format(url,
  896.                                                          qurl.errorString()))
  897.    
  898.         # We really need the same representation that the webview uses in
  899.         # its __repr__
  900.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  901.         assert url
  902.    
  903.         pattern = re.compile(
  904.             r"(load status for <qutebrowser\.browser\..* "
  905.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  906.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  907.                 load_status=re.escape(load_status), url=re.escape(url)))
  908.    
  909.         try:
  910. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  911.  
  912. tests/end2end/fixtures/quteprocess.py:847:
  913. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  914.  
  915. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  916. timeout = 15000
  917. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}
  918. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c824f7310>
  919. xfail = None
  920.  
  921.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  922.                  **kwargs):
  923.         """Extend wait_for to add divisor if a test is xfailing."""
  924.         __tracebackhide__ = (lambda e:
  925.                              e.errisinstance(testprocess.WaitForTimeout))
  926.         xfail = self.request.node.get_closest_marker('xfail')
  927.         if xfail and (not xfail.args or xfail.args[0]):
  928.             kwargs['divisor'] = 10
  929.         else:
  930.             kwargs['divisor'] = 1
  931. >       return super().wait_for(timeout=timeout, **kwargs)
  932.  
  933. tests/end2end/fixtures/quteprocess.py:603:
  934. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  935.  
  936. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  937. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  938. after = None
  939. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}
  940. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c824f73a0>
  941. key = 'message', @py_assert3 = None
  942.  
  943.     def wait_for(self, timeout=None, *, override_waited_for=False,
  944.                  do_skip=False, divisor=1, after=None, **kwargs):
  945.         """Wait until a given value is found in the data.
  946.    
  947.         Keyword arguments to this function get interpreted as attributes of the
  948.         searched data. Every given argument is treated as a pattern which
  949.         the attribute has to match against.
  950.    
  951.         Args:
  952.             timeout: How long to wait for the message.
  953.             override_waited_for: If set, gets triggered by previous messages
  954.                                  again.
  955.             do_skip: If set, call pytest.skip on a timeout.
  956.             divisor: A factor to decrease the timeout by.
  957.             after: If it's an existing line, ensure it's after the given one.
  958.    
  959.         Return:
  960.             The matched line.
  961.         """
  962.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  963.    
  964.         if timeout is None:
  965.             if do_skip:
  966.                 timeout = 2000
  967.             elif testutils.ON_CI:
  968.                 timeout = 15000
  969.             else:
  970.                 timeout = 5000
  971.    
  972.         timeout //= divisor
  973.    
  974.         if not kwargs:
  975.             raise TypeError("No keyword arguments given!")
  976.         for key in kwargs:
  977.             assert key in self.KEYS
  978.    
  979.         existing = self._wait_for_existing(override_waited_for, after,
  980.                                            **kwargs)
  981.         if existing is not None:
  982.             return existing
  983.         else:
  984. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  985.                                       **kwargs)
  986.  
  987. tests/end2end/fixtures/testprocess.py:495:
  988. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  989.  
  990. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  991. timeout = 15000, do_skip = False
  992. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}
  993. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c824f75e0>
  994. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")
  995. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help/index\\\\.html/…'
  996. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c824f7670>
  997. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c824d9270>
  998. got_signal = False
  999. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id....html/?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/index\\\\.html\'\\\\) -> .*)")}.'
  1000.  
  1001.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  1002.         """Wait for a log message which doesn't exist yet.
  1003.    
  1004.         Called via wait_for.
  1005.         """
  1006.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1007.         message = kwargs.get('message', None)
  1008.         if message is not None:
  1009.             elided = quteutils.elide(repr(message), 100)
  1010.             self._log("\n----> Waiting for {} in the log".format(elided))
  1011.    
  1012.         spy = QSignalSpy(self.new_data)
  1013.         elapsed_timer = QElapsedTimer()
  1014.         elapsed_timer.start()
  1015.    
  1016.         while True:
  1017.             # Skip if there are pending messages causing a skip
  1018.             self._maybe_skip()
  1019.             got_signal = spy.wait(timeout)
  1020.             if not got_signal or elapsed_timer.hasExpired(timeout):
  1021.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  1022.                     timeout, kwargs)
  1023.                 if do_skip:
  1024.                     pytest.skip(msg)
  1025.                 else:
  1026. >                   raise WaitForTimeout(msg)
  1027. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help/index\\.html/?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/index\\.html'\\) -> .*)")}.
  1028.  
  1029. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  1030.  
  1031. During handling of the above exception, another exception occurred:
  1032.  
  1033. request = <FixtureRequest for <Function test_help_with_t>>
  1034.  
  1035.     @pytest.mark.usefixtures(*function_args)
  1036.     def scenario_wrapper(request):
  1037. >       _execute_scenario(feature, scenario, request, encoding)
  1038.  
  1039. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  1040. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1041. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  1042.     _execute_step_function(request, scenario, step, step_func)
  1043. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  1044.     return_value = step_func(**kwargs)
  1045. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1046.  
  1047. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1048. path = 'qute://help/index.html'
  1049.  
  1050.     @bdd.when(bdd.parsers.parse("I wait until {path} is loaded"))
  1051.     def wait_until_loaded(quteproc, path):
  1052.         """Wait until the given path is loaded (as per qutebrowser log)."""
  1053. >       quteproc.wait_for_load_finished(path)
  1054. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/index.html to be loaded
  1055.  
  1056. tests/end2end/features/conftest.py:305: WaitForTimeout
  1057. ------------------------------ qutebrowser output ------------------------------
  1058. Log
  1059. -------------------------------- server output ---------------------------------
  1060. Log
  1061. --------------------------------- BDD scenario ---------------------------------
  1062. Scenario
  1063. ------------------------------ Captured log call -------------------------------
  1064. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1065. INFO     ipc:ipc.py:481 Opening in existing instance
  1066. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1067. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1068. INFO     ipc:ipc.py:481 Opening in existing instance
  1069. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1070. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1071. INFO     ipc:ipc.py:481 Opening in existing instance
  1072. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1073. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1074. INFO     ipc:ipc.py:481 Opening in existing instance
  1075. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1076. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1077. INFO     ipc:ipc.py:481 Opening in existing instance
  1078. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1079. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1080. INFO     ipc:ipc.py:481 Opening in existing instance
  1081. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":tab-only"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1082. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1083. INFO     ipc:ipc.py:481 Opening in existing instance
  1084. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":help -t"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1085.  
  1086. tests/end2end/features/test_qutescheme_bdd.py F
  1087.  
  1088. _______________________ test_opening_link_with_qutehelp ________________________
  1089.  
  1090. request = <FixtureRequest for <Function test_opening_link_with_qutehelp>>
  1091.  
  1092.     @pytest.mark.usefixtures(*function_args)
  1093.     def scenario_wrapper(request):
  1094. >       _execute_scenario(feature, scenario, request, encoding)
  1095.  
  1096. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  1097. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1098. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  1099.     _execute_step_function(request, scenario, step, step_func)
  1100. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  1101.     return_value = step_func(**kwargs)
  1102. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1103.  
  1104. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1105. is_regex = None, pattern = "Changing title for idx 0 to 'qutebrowser help'"
  1106. do_skip = None
  1107.  
  1108.     @bdd.when(bdd.parsers.re(r'I wait for (?P<is_regex>regex )?"'
  1109.                              r'(?P<pattern>[^"]+)" in the log(?P<do_skip> or skip '
  1110.                              r'the test)?'))
  1111.     def wait_in_log(quteproc, is_regex, pattern, do_skip):
  1112.         """Wait for a given pattern in the qutebrowser log.
  1113.    
  1114.         If used like "When I wait for regex ... in the log" the argument is treated
  1115.         as regex. Otherwise, it's treated as a pattern (* can be used as wildcard).
  1116.         """
  1117.         if is_regex:
  1118.             pattern = re.compile(pattern)
  1119.    
  1120. >       line = quteproc.wait_for(message=pattern, do_skip=bool(do_skip))
  1121. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': "Changing title for idx 0 to 'qutebrowser help'"}.
  1122.  
  1123. tests/end2end/features/conftest.py:320: WaitForTimeout
  1124. ------------------------------ qutebrowser output ------------------------------
  1125. Log
  1126. -------------------------------- server output ---------------------------------
  1127. Log
  1128. --------------------------------- BDD scenario ---------------------------------
  1129. Scenario
  1130. ------------------------------ Captured log call -------------------------------
  1131. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1132. INFO     ipc:ipc.py:481 Opening in existing instance
  1133. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1134. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1135. INFO     ipc:ipc.py:481 Opening in existing instance
  1136. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1137. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1138. INFO     ipc:ipc.py:481 Opening in existing instance
  1139. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1140. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1141. INFO     ipc:ipc.py:481 Opening in existing instance
  1142. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1143. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1144. INFO     ipc:ipc.py:481 Opening in existing instance
  1145. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1146. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1147. INFO     ipc:ipc.py:481 Opening in existing instance
  1148. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":tab-only"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1149. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1150. INFO     ipc:ipc.py:481 Opening in existing instance
  1151. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open qute:help"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1152.  
  1153. tests/end2end/features/test_qutescheme_bdd.py F
  1154.  
  1155. ______________________ test_opening_a_link_with_qutehelp _______________________
  1156.  
  1157. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1158. url = 'qute://help/'
  1159.  
  1160.     def wait_for_load_finished_url(self, url, *, timeout=None,
  1161.                                    load_status='success', after=None):
  1162.         """Wait until a URL has finished loading."""
  1163.         __tracebackhide__ = (lambda e: e.errisinstance(
  1164.             testprocess.WaitForTimeout))
  1165.    
  1166.         if timeout is None:
  1167.             if testutils.ON_CI:
  1168.                 timeout = 15000
  1169.             else:
  1170.                 timeout = 5000
  1171.    
  1172.         qurl = QUrl(url)
  1173.         if not qurl.isValid():
  1174.             raise ValueError("Invalid URL {}: {}".format(url,
  1175.                                                          qurl.errorString()))
  1176.    
  1177.         # We really need the same representation that the webview uses in
  1178.         # its __repr__
  1179.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  1180.         assert url
  1181.    
  1182.         pattern = re.compile(
  1183.             r"(load status for <qutebrowser\.browser\..* "
  1184.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  1185.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  1186.                 load_status=re.escape(load_status), url=re.escape(url)))
  1187.    
  1188.         try:
  1189. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  1190.  
  1191. tests/end2end/fixtures/quteprocess.py:847:
  1192. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1193.  
  1194. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1195. timeout = 15000
  1196. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1197. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c824f7ca0>
  1198. xfail = None
  1199.  
  1200.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  1201.                  **kwargs):
  1202.         """Extend wait_for to add divisor if a test is xfailing."""
  1203.         __tracebackhide__ = (lambda e:
  1204.                              e.errisinstance(testprocess.WaitForTimeout))
  1205.         xfail = self.request.node.get_closest_marker('xfail')
  1206.         if xfail and (not xfail.args or xfail.args[0]):
  1207.             kwargs['divisor'] = 10
  1208.         else:
  1209.             kwargs['divisor'] = 1
  1210. >       return super().wait_for(timeout=timeout, **kwargs)
  1211.  
  1212. tests/end2end/fixtures/quteprocess.py:603:
  1213. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1214.  
  1215. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1216. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  1217. after = None
  1218. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1219. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c82611430>
  1220. key = 'message', @py_assert3 = None
  1221.  
  1222.     def wait_for(self, timeout=None, *, override_waited_for=False,
  1223.                  do_skip=False, divisor=1, after=None, **kwargs):
  1224.         """Wait until a given value is found in the data.
  1225.    
  1226.         Keyword arguments to this function get interpreted as attributes of the
  1227.         searched data. Every given argument is treated as a pattern which
  1228.         the attribute has to match against.
  1229.    
  1230.         Args:
  1231.             timeout: How long to wait for the message.
  1232.             override_waited_for: If set, gets triggered by previous messages
  1233.                                  again.
  1234.             do_skip: If set, call pytest.skip on a timeout.
  1235.             divisor: A factor to decrease the timeout by.
  1236.             after: If it's an existing line, ensure it's after the given one.
  1237.    
  1238.         Return:
  1239.             The matched line.
  1240.         """
  1241.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1242.    
  1243.         if timeout is None:
  1244.             if do_skip:
  1245.                 timeout = 2000
  1246.             elif testutils.ON_CI:
  1247.                 timeout = 15000
  1248.             else:
  1249.                 timeout = 5000
  1250.    
  1251.         timeout //= divisor
  1252.    
  1253.         if not kwargs:
  1254.             raise TypeError("No keyword arguments given!")
  1255.         for key in kwargs:
  1256.             assert key in self.KEYS
  1257.    
  1258.         existing = self._wait_for_existing(override_waited_for, after,
  1259.                                            **kwargs)
  1260.         if existing is not None:
  1261.             return existing
  1262.         else:
  1263. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  1264.                                       **kwargs)
  1265.  
  1266. tests/end2end/fixtures/testprocess.py:495:
  1267. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1268.  
  1269. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1270. timeout = 15000, do_skip = False
  1271. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1272. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c826114c0>
  1273. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")
  1274. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help//?\'>: LoadSta…'
  1275. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c82611550>
  1276. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c8262d660>
  1277. got_signal = False
  1278. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id... url=\'qute://help//?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/\'\\\\) -> .*)")}.'
  1279.  
  1280.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  1281.         """Wait for a log message which doesn't exist yet.
  1282.    
  1283.         Called via wait_for.
  1284.         """
  1285.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1286.         message = kwargs.get('message', None)
  1287.         if message is not None:
  1288.             elided = quteutils.elide(repr(message), 100)
  1289.             self._log("\n----> Waiting for {} in the log".format(elided))
  1290.    
  1291.         spy = QSignalSpy(self.new_data)
  1292.         elapsed_timer = QElapsedTimer()
  1293.         elapsed_timer.start()
  1294.    
  1295.         while True:
  1296.             # Skip if there are pending messages causing a skip
  1297.             self._maybe_skip()
  1298.             got_signal = spy.wait(timeout)
  1299.             if not got_signal or elapsed_timer.hasExpired(timeout):
  1300.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  1301.                     timeout, kwargs)
  1302.                 if do_skip:
  1303.                     pytest.skip(msg)
  1304.                 else:
  1305. >                   raise WaitForTimeout(msg)
  1306. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}.
  1307.  
  1308. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  1309.  
  1310. During handling of the above exception, another exception occurred:
  1311.  
  1312. request = <FixtureRequest for <Function test_opening_a_link_with_qutehelp>>
  1313.  
  1314.     @pytest.mark.usefixtures(*function_args)
  1315.     def scenario_wrapper(request):
  1316. >       _execute_scenario(feature, scenario, request, encoding)
  1317.  
  1318. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  1319. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1320. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  1321.     _execute_step_function(request, scenario, step, step_func)
  1322. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  1323.     return_value = step_func(**kwargs)
  1324. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1325.  
  1326. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1327. path = 'qute://help/'
  1328.  
  1329.     @bdd.when(bdd.parsers.parse("I wait until {path} is loaded"))
  1330.     def wait_until_loaded(quteproc, path):
  1331.         """Wait until the given path is loaded (as per qutebrowser log)."""
  1332. >       quteproc.wait_for_load_finished(path)
  1333. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/ to be loaded
  1334.  
  1335. tests/end2end/features/conftest.py:305: WaitForTimeout
  1336. ------------------------------ qutebrowser output ------------------------------
  1337. Log
  1338. -------------------------------- server output ---------------------------------
  1339. Log
  1340. --------------------------------- BDD scenario ---------------------------------
  1341. Scenario
  1342. ------------------------------ Captured log call -------------------------------
  1343. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1344. INFO     ipc:ipc.py:481 Opening in existing instance
  1345. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1346. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1347. INFO     ipc:ipc.py:481 Opening in existing instance
  1348. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1349. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1350. INFO     ipc:ipc.py:481 Opening in existing instance
  1351. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1352. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1353. INFO     ipc:ipc.py:481 Opening in existing instance
  1354. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1355. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1356. INFO     ipc:ipc.py:481 Opening in existing instance
  1357. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1358. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1359. INFO     ipc:ipc.py:481 Opening in existing instance
  1360. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":tab-only"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1361. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1362. INFO     ipc:ipc.py:481 Opening in existing instance
  1363. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open qute://help"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1364.  
  1365. tests/end2end/features/test_qutescheme_bdd.py F
  1366.  
  1367. __________________ test_opening_a_link_with_qutehelpindexhtml __________________
  1368.  
  1369. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1370. url = 'qute://help/'
  1371.  
  1372.     def wait_for_load_finished_url(self, url, *, timeout=None,
  1373.                                    load_status='success', after=None):
  1374.         """Wait until a URL has finished loading."""
  1375.         __tracebackhide__ = (lambda e: e.errisinstance(
  1376.             testprocess.WaitForTimeout))
  1377.    
  1378.         if timeout is None:
  1379.             if testutils.ON_CI:
  1380.                 timeout = 15000
  1381.             else:
  1382.                 timeout = 5000
  1383.    
  1384.         qurl = QUrl(url)
  1385.         if not qurl.isValid():
  1386.             raise ValueError("Invalid URL {}: {}".format(url,
  1387.                                                          qurl.errorString()))
  1388.    
  1389.         # We really need the same representation that the webview uses in
  1390.         # its __repr__
  1391.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  1392.         assert url
  1393.    
  1394.         pattern = re.compile(
  1395.             r"(load status for <qutebrowser\.browser\..* "
  1396.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  1397.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  1398.                 load_status=re.escape(load_status), url=re.escape(url)))
  1399.    
  1400.         try:
  1401. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  1402.  
  1403. tests/end2end/fixtures/quteprocess.py:847:
  1404. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1405.  
  1406. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1407. timeout = 15000
  1408. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1409. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c82611820>
  1410. xfail = None
  1411.  
  1412.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  1413.                  **kwargs):
  1414.         """Extend wait_for to add divisor if a test is xfailing."""
  1415.         __tracebackhide__ = (lambda e:
  1416.                              e.errisinstance(testprocess.WaitForTimeout))
  1417.         xfail = self.request.node.get_closest_marker('xfail')
  1418.         if xfail and (not xfail.args or xfail.args[0]):
  1419.             kwargs['divisor'] = 10
  1420.         else:
  1421.             kwargs['divisor'] = 1
  1422. >       return super().wait_for(timeout=timeout, **kwargs)
  1423.  
  1424. tests/end2end/fixtures/quteprocess.py:603:
  1425. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1426.  
  1427. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1428. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  1429. after = None
  1430. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1431. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c82611700>
  1432. key = 'message', @py_assert3 = None
  1433.  
  1434.     def wait_for(self, timeout=None, *, override_waited_for=False,
  1435.                  do_skip=False, divisor=1, after=None, **kwargs):
  1436.         """Wait until a given value is found in the data.
  1437.    
  1438.         Keyword arguments to this function get interpreted as attributes of the
  1439.         searched data. Every given argument is treated as a pattern which
  1440.         the attribute has to match against.
  1441.    
  1442.         Args:
  1443.             timeout: How long to wait for the message.
  1444.             override_waited_for: If set, gets triggered by previous messages
  1445.                                  again.
  1446.             do_skip: If set, call pytest.skip on a timeout.
  1447.             divisor: A factor to decrease the timeout by.
  1448.             after: If it's an existing line, ensure it's after the given one.
  1449.    
  1450.         Return:
  1451.             The matched line.
  1452.         """
  1453.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1454.    
  1455.         if timeout is None:
  1456.             if do_skip:
  1457.                 timeout = 2000
  1458.             elif testutils.ON_CI:
  1459.                 timeout = 15000
  1460.             else:
  1461.                 timeout = 5000
  1462.    
  1463.         timeout //= divisor
  1464.    
  1465.         if not kwargs:
  1466.             raise TypeError("No keyword arguments given!")
  1467.         for key in kwargs:
  1468.             assert key in self.KEYS
  1469.    
  1470.         existing = self._wait_for_existing(override_waited_for, after,
  1471.                                            **kwargs)
  1472.         if existing is not None:
  1473.             return existing
  1474.         else:
  1475. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  1476.                                       **kwargs)
  1477.  
  1478. tests/end2end/fixtures/testprocess.py:495:
  1479. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1480.  
  1481. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1482. timeout = 15000, do_skip = False
  1483. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1484. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c82611670>
  1485. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")
  1486. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help//?\'>: LoadSta…'
  1487. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c82611790>
  1488. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c82443580>
  1489. got_signal = False
  1490. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id... url=\'qute://help//?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/\'\\\\) -> .*)")}.'
  1491.  
  1492.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  1493.         """Wait for a log message which doesn't exist yet.
  1494.    
  1495.         Called via wait_for.
  1496.         """
  1497.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1498.         message = kwargs.get('message', None)
  1499.         if message is not None:
  1500.             elided = quteutils.elide(repr(message), 100)
  1501.             self._log("\n----> Waiting for {} in the log".format(elided))
  1502.    
  1503.         spy = QSignalSpy(self.new_data)
  1504.         elapsed_timer = QElapsedTimer()
  1505.         elapsed_timer.start()
  1506.    
  1507.         while True:
  1508.             # Skip if there are pending messages causing a skip
  1509.             self._maybe_skip()
  1510.             got_signal = spy.wait(timeout)
  1511.             if not got_signal or elapsed_timer.hasExpired(timeout):
  1512.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  1513.                     timeout, kwargs)
  1514.                 if do_skip:
  1515.                     pytest.skip(msg)
  1516.                 else:
  1517. >                   raise WaitForTimeout(msg)
  1518. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}.
  1519.  
  1520. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  1521.  
  1522. During handling of the above exception, another exception occurred:
  1523.  
  1524. request = <FixtureRequest for <Function test_opening_a_link_with_qutehelpindexhtml>>
  1525.  
  1526.     @pytest.mark.usefixtures(*function_args)
  1527.     def scenario_wrapper(request):
  1528. >       _execute_scenario(feature, scenario, request, encoding)
  1529.  
  1530. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  1531. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1532. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  1533.     _execute_step_function(request, scenario, step, step_func)
  1534. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  1535.     return_value = step_func(**kwargs)
  1536. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1537.  
  1538. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1539. path = 'qute://help/'
  1540.  
  1541.     @bdd.then(bdd.parsers.parse("{path} should be loaded"))
  1542.     def path_should_be_loaded(quteproc, path):
  1543.         """Make sure the given path was loaded according to the log.
  1544.    
  1545.         This is usually the better check compared to "should be requested" as the
  1546.         page could be loaded from local cache.
  1547.         """
  1548. >       quteproc.wait_for_load_finished(path)
  1549. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/ to be loaded
  1550.  
  1551. tests/end2end/features/conftest.py:450: WaitForTimeout
  1552. ------------------------------ qutebrowser output ------------------------------
  1553. Log
  1554. -------------------------------- server output ---------------------------------
  1555. Log
  1556. --------------------------------- BDD scenario ---------------------------------
  1557. Scenario
  1558. ------------------------------ Captured log call -------------------------------
  1559. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1560. INFO     ipc:ipc.py:481 Opening in existing instance
  1561. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1562. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1563. INFO     ipc:ipc.py:481 Opening in existing instance
  1564. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1565. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1566. INFO     ipc:ipc.py:481 Opening in existing instance
  1567. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1568. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1569. INFO     ipc:ipc.py:481 Opening in existing instance
  1570. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1571. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1572. INFO     ipc:ipc.py:481 Opening in existing instance
  1573. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1574. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1575. INFO     ipc:ipc.py:481 Opening in existing instance
  1576. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open qute://help/index.html/.."], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1577.  
  1578. tests/end2end/features/test_qutescheme_bdd.py F
  1579.  
  1580. _________________ test_opening_a_link_with_qutehelpindexhtml_1 _________________
  1581.  
  1582. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1583. url = 'qute://help/'
  1584.  
  1585.     def wait_for_load_finished_url(self, url, *, timeout=None,
  1586.                                    load_status='success', after=None):
  1587.         """Wait until a URL has finished loading."""
  1588.         __tracebackhide__ = (lambda e: e.errisinstance(
  1589.             testprocess.WaitForTimeout))
  1590.    
  1591.         if timeout is None:
  1592.             if testutils.ON_CI:
  1593.                 timeout = 15000
  1594.             else:
  1595.                 timeout = 5000
  1596.    
  1597.         qurl = QUrl(url)
  1598.         if not qurl.isValid():
  1599.             raise ValueError("Invalid URL {}: {}".format(url,
  1600.                                                          qurl.errorString()))
  1601.    
  1602.         # We really need the same representation that the webview uses in
  1603.         # its __repr__
  1604.         url = utils.elide(qurl.toDisplayString(QUrl.EncodeUnicode), 100)
  1605.         assert url
  1606.    
  1607.         pattern = re.compile(
  1608.             r"(load status for <qutebrowser\.browser\..* "
  1609.             r"tab_id=\d+ url='{url}/?'>: LoadStatus\.{load_status}|fetch: "
  1610.             r"PyQt5\.QtCore\.QUrl\('{url}'\) -> .*)".format(
  1611.                 load_status=re.escape(load_status), url=re.escape(url)))
  1612.    
  1613.         try:
  1614. >           self.wait_for(message=pattern, timeout=timeout, after=after)
  1615.  
  1616. tests/end2end/fixtures/quteprocess.py:847:
  1617. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1618.  
  1619. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1620. timeout = 15000
  1621. kwargs = {'after': None, 'divisor': 1, 'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1622. __tracebackhide__ = <function QuteProc.wait_for.<locals>.<lambda> at 0x7f8c8245d3a0>
  1623. xfail = None
  1624.  
  1625.     def wait_for(self, timeout=None,  # pylint: disable=arguments-differ
  1626.                  **kwargs):
  1627.         """Extend wait_for to add divisor if a test is xfailing."""
  1628.         __tracebackhide__ = (lambda e:
  1629.                              e.errisinstance(testprocess.WaitForTimeout))
  1630.         xfail = self.request.node.get_closest_marker('xfail')
  1631.         if xfail and (not xfail.args or xfail.args[0]):
  1632.             kwargs['divisor'] = 10
  1633.         else:
  1634.             kwargs['divisor'] = 1
  1635. >       return super().wait_for(timeout=timeout, **kwargs)
  1636.  
  1637. tests/end2end/fixtures/quteprocess.py:603:
  1638. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1639.  
  1640. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1641. timeout = 15000, override_waited_for = False, do_skip = False, divisor = 1
  1642. after = None
  1643. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1644. __tracebackhide__ = <function Process.wait_for.<locals>.<lambda> at 0x7f8c8245d790>
  1645. key = 'message', @py_assert3 = None
  1646.  
  1647.     def wait_for(self, timeout=None, *, override_waited_for=False,
  1648.                  do_skip=False, divisor=1, after=None, **kwargs):
  1649.         """Wait until a given value is found in the data.
  1650.    
  1651.         Keyword arguments to this function get interpreted as attributes of the
  1652.         searched data. Every given argument is treated as a pattern which
  1653.         the attribute has to match against.
  1654.    
  1655.         Args:
  1656.             timeout: How long to wait for the message.
  1657.             override_waited_for: If set, gets triggered by previous messages
  1658.                                  again.
  1659.             do_skip: If set, call pytest.skip on a timeout.
  1660.             divisor: A factor to decrease the timeout by.
  1661.             after: If it's an existing line, ensure it's after the given one.
  1662.    
  1663.         Return:
  1664.             The matched line.
  1665.         """
  1666.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1667.    
  1668.         if timeout is None:
  1669.             if do_skip:
  1670.                 timeout = 2000
  1671.             elif testutils.ON_CI:
  1672.                 timeout = 15000
  1673.             else:
  1674.                 timeout = 5000
  1675.    
  1676.         timeout //= divisor
  1677.    
  1678.         if not kwargs:
  1679.             raise TypeError("No keyword arguments given!")
  1680.         for key in kwargs:
  1681.             assert key in self.KEYS
  1682.    
  1683.         existing = self._wait_for_existing(override_waited_for, after,
  1684.                                            **kwargs)
  1685.         if existing is not None:
  1686.             return existing
  1687.         else:
  1688. >           return self._wait_for_new(timeout=timeout, do_skip=do_skip,
  1689.                                       **kwargs)
  1690.  
  1691. tests/end2end/fixtures/testprocess.py:495:
  1692. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1693.  
  1694. self = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1695. timeout = 15000, do_skip = False
  1696. kwargs = {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}
  1697. __tracebackhide__ = <function Process._wait_for_new.<locals>.<lambda> at 0x7f8c8245d820>
  1698. message = re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")
  1699. elided = 're.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id=\\\\d+ url=\'qute://help//?\'>: LoadSta…'
  1700. spy = <PyQt5.QtTest.QSignalSpy object at 0x7f8c8245d8b0>
  1701. elapsed_timer = <PyQt5.QtCore.QElapsedTimer object at 0x7f8c8247f820>
  1702. got_signal = False
  1703. msg = 'Timed out after 15000ms waiting for {\'message\': re.compile("(load status for <qutebrowser\\\\.browser\\\\..* tab_id... url=\'qute://help//?\'>: LoadStatus\\\\.success|fetch: PyQt5\\\\.QtCore\\\\.QUrl\\\\(\'qute://help/\'\\\\) -> .*)")}.'
  1704.  
  1705.     def _wait_for_new(self, timeout, do_skip, **kwargs):
  1706.         """Wait for a log message which doesn't exist yet.
  1707.    
  1708.         Called via wait_for.
  1709.         """
  1710.         __tracebackhide__ = lambda e: e.errisinstance(WaitForTimeout)
  1711.         message = kwargs.get('message', None)
  1712.         if message is not None:
  1713.             elided = quteutils.elide(repr(message), 100)
  1714.             self._log("\n----> Waiting for {} in the log".format(elided))
  1715.    
  1716.         spy = QSignalSpy(self.new_data)
  1717.         elapsed_timer = QElapsedTimer()
  1718.         elapsed_timer.start()
  1719.    
  1720.         while True:
  1721.             # Skip if there are pending messages causing a skip
  1722.             self._maybe_skip()
  1723.             got_signal = spy.wait(timeout)
  1724.             if not got_signal or elapsed_timer.hasExpired(timeout):
  1725.                 msg = "Timed out after {}ms waiting for {!r}.".format(
  1726.                     timeout, kwargs)
  1727.                 if do_skip:
  1728.                     pytest.skip(msg)
  1729.                 else:
  1730. >                   raise WaitForTimeout(msg)
  1731. E                   end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': re.compile("(load status for <qutebrowser\\.browser\\..* tab_id=\\d+ url='qute://help//?'>: LoadStatus\\.success|fetch: PyQt5\\.QtCore\\.QUrl\\('qute://help/'\\) -> .*)")}.
  1732.  
  1733. tests/end2end/fixtures/testprocess.py:412: WaitForTimeout
  1734.  
  1735. During handling of the above exception, another exception occurred:
  1736.  
  1737. request = <FixtureRequest for <Function test_opening_a_link_with_qutehelpindexhtml_1>>
  1738.  
  1739.     @pytest.mark.usefixtures(*function_args)
  1740.     def scenario_wrapper(request):
  1741. >       _execute_scenario(feature, scenario, request, encoding)
  1742.  
  1743. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  1744. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1745. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  1746.     _execute_step_function(request, scenario, step, step_func)
  1747. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  1748.     return_value = step_func(**kwargs)
  1749. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1750.  
  1751. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1752. path = 'qute://help/'
  1753.  
  1754.     @bdd.then(bdd.parsers.parse("{path} should be loaded"))
  1755.     def path_should_be_loaded(quteproc, path):
  1756.         """Make sure the given path was loaded according to the log.
  1757.    
  1758.         This is usually the better check compared to "should be requested" as the
  1759.         page could be loaded from local cache.
  1760.         """
  1761. >       quteproc.wait_for_load_finished(path)
  1762. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out while waiting for qute://help/ to be loaded
  1763.  
  1764. tests/end2end/features/conftest.py:450: WaitForTimeout
  1765. ------------------------------ qutebrowser output ------------------------------
  1766. Log
  1767. -------------------------------- server output ---------------------------------
  1768. Log
  1769. --------------------------------- BDD scenario ---------------------------------
  1770. Scenario
  1771. ------------------------------ Captured log call -------------------------------
  1772. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1773. INFO     ipc:ipc.py:481 Opening in existing instance
  1774. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1775. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1776. INFO     ipc:ipc.py:481 Opening in existing instance
  1777. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1778. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1779. INFO     ipc:ipc.py:481 Opening in existing instance
  1780. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1781. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1782. INFO     ipc:ipc.py:481 Opening in existing instance
  1783. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1784. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1785. INFO     ipc:ipc.py:481 Opening in existing instance
  1786. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1787. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1788. INFO     ipc:ipc.py:481 Opening in existing instance
  1789. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open qute://help/index.html/../"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1790.  
  1791. tests/end2end/features/test_qutescheme_bdd.py F
  1792.  
  1793. ________________ test_opening_a_link_with_qutehelpimg_qtwebkit _________________
  1794.  
  1795. request = <FixtureRequest for <Function test_opening_a_link_with_qutehelpimg_qtwebkit>>
  1796.  
  1797.     @pytest.mark.usefixtures(*function_args)
  1798.     def scenario_wrapper(request):
  1799. >       _execute_scenario(feature, scenario, request, encoding)
  1800.  
  1801. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:177:
  1802. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1803. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:143: in _execute_scenario
  1804.     _execute_step_function(request, scenario, step, step_func)
  1805. .tox/py/lib/python3.9/site-packages/pytest_bdd/scenario.py:113: in _execute_step_function
  1806.     return_value = step_func(**kwargs)
  1807. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1808.  
  1809. quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f8c82815ca0>
  1810. server = <end2end.fixtures.webserver.WebserverProcess object at 0x7f8c9b80a700>
  1811. is_regex = None, pattern = '*Is a directory*', loglevel = None
  1812.  
  1813.     @bdd.then(bdd.parsers.re(r'(?P<is_regex>regex )?"(?P<pattern>[^"]+)" should '
  1814.                              r'be logged( with level (?P<loglevel>.*))?'))
  1815.     def should_be_logged(quteproc, server, is_regex, pattern, loglevel):
  1816.         """Expect the given pattern on regex in the log."""
  1817.         if is_regex:
  1818.             pattern = re.compile(pattern)
  1819.         else:
  1820.             pattern = pattern.replace('(port)', str(server.port))
  1821.    
  1822.         args = {
  1823.             'message': pattern,
  1824.         }
  1825.         if loglevel:
  1826.             args['loglevel'] = getattr(logging, loglevel.upper())
  1827.    
  1828. >       line = quteproc.wait_for(**args)
  1829. Error: E       end2end.fixtures.testprocess.WaitForTimeout: Timed out after 15000ms waiting for {'message': '*Is a directory*'}.
  1830.  
  1831. tests/end2end/features/conftest.py:511: WaitForTimeout
  1832. ------------------------------ qutebrowser output ------------------------------
  1833. Log
  1834. -------------------------------- server output ---------------------------------
  1835. Log
  1836. --------------------------------- BDD scenario ---------------------------------
  1837. Scenario
  1838. ------------------------------ Captured log call -------------------------------
  1839. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1840. INFO     ipc:ipc.py:481 Opening in existing instance
  1841. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":config-clear"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1842. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1843. INFO     ipc:ipc.py:481 Opening in existing instance
  1844. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"messages.timeout\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1845. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1846. INFO     ipc:ipc.py:481 Opening in existing instance
  1847. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"auto_save.interval\\" \\"0\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1848. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1849. INFO     ipc:ipc.py:481 Opening in existing instance
  1850. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":set -t \\"new_instance_open_target_window\\" \\"last-opened\\""], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1851. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1852. INFO     ipc:ipc.py:481 Opening in existing instance
  1853. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open -t about:blank"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1854. DEBUG    ipc:ipc.py:476 Connecting to /tmp/qutebrowser-basedir-3930hyuf/runtime/ipc-9feebb1ce6e5bc2de7b6f4647e566c98
  1855. INFO     ipc:ipc.py:481 Opening in existing instance
  1856. DEBUG    ipc:ipc.py:493 Writing: b'{"args": [":open qute://help/img/"], "target_arg": "", "version": "2.2.0", "protocol_version": 1, "cwd": "/__w/qutebrowser/qutebrowser"}\n'
  1857.  
  1858. tests/end2end/features/test_qutescheme_bdd.py s..ss....ss.s............. [  5%]
  1859. ..                                                                       [  5%]
  1860. tests/end2end/features/test_scroll_bdd.py ..................s........... [  5%]
  1861. .....................                                                    [  6%]