Commit Graph

193 Commits

Author SHA1 Message Date
toofar 3bc30e748d Merge pull request #8243 from feat/e2e_screenshots 2024-10-05 11:30:57 +13:00
toofar a05cbe4f30 Adjust permission tests for changes to 6.8 permission storage feature
Qt have updated their permission storage feature so it respects our
the setting our basedir feature uses, so now all the tests that use
"Given I have a fresh instance" are passing.

The remaining failing ones do pass if I make them run in a fresh
instance, but I am leaving them as xfail because a) opening a new
instance is slow b) the new upstream behaviour causes a regression in
the qutebrowser behavior (you don't get re-prompted where you would have
been previously) so I feel like it is correct for some tests to be
failing! We have to set AskEveryTime at some point and we can address
them then.
2024-09-06 19:53:06 +12:00
toofar 4ba0e00bbd Ignore no dictionary errors on CI
The message is:

    The following paths were searched for Qt WebEngine dictionaries:
      /tmp/qutebrowser-basedir-qrhbqblr/data/qtwebengine_dictionaries
    but could not find it.
    Spellchecking can not be enabled.

Tests are failing on "Logged unexpected errors".
2024-09-06 18:13:21 +12:00
toofar a3238eb494 upload e2e failure screenshots as artifacts
This commit takes a screenshot of the active browser window when an
end2end test fails. When running on CI a zip file of screenshots will be
attached to the run summary as an artifact. When run locally screenshots
will be left in /$TMPDIR/pytest-screenshots/.

The screenshot is of the Xvfb screen that the tests are running under.
If there are multiple windows open it will likely only show the active
window because a) we aren't running with a window manager b) the Xvfb
display is, by default, the same size as the browser window.

I'm not sure if xvfb is used on the Window runs in CI. We could fall
back to trying to take screenshots if not running under xvfb but I'm a
bit wary of an automatic feature that takes screenshots of people's
desktops when running locally. Even if they just to to /tmp/ it might be
surprising. We can change it later if it turns out we need to try to
take screenshots in more cases.

I'm using pillow ImageGrab, the same as pyvirtualdisplay.smartdisplay. I'm
getting the display number from the pytest-xvfb plugin and formatting it
appropriately (pyvirtualdisplay has an already formatted one which is used by
the smartdisplay, but that's not accessible).

Pillow is now a requirement for running the tests. I thought about making
it gracefully not required but I'm not sure how to inform the user with
a warning from pytest, or if they would even want one. Maybe we could
add a config thing to allow not taking screenshots?

I had to bump the colordepth config for pytest-xvfb otherwise pillow
complained that the default 16bit color depth wasn't supported as it
only supports 24bit, see https://github.com/python-pillow/Pillow/blob/1138ea5370cbda5eb328ec949
8c314d376c81265/src/display.c#L898

I'm saving screenshots to a temp dir because I don't want to put them in
my workdir when running locally. I want to clear the directory for each
run so that you don't get confused by looking at old images. I'm not
100% sure about the lifecycle of the process classes though. Eg if we
have two processes they might both try to create the output directory.
I'm using pytest.session.stash to save the directory so perhaps the
lifecycle of the stash will handle that? Not sure.

Ideally the images would be uploaded somewhere where we could click
through and open them in the browser without having to download a zip
file, but I'm not sure how to achieve that.

It would be nice to print in the test logs that a screenshot was saved
and where to. Just so you could copy paste the filename instead of
having to match the sanitized filename against failing test names. But I
don't know how to log stuff from this stage in the pytest lifecycle.

TODO:
* I'm not sure that the screenshot captures the whole browser window?
  Maybe the browser windows is bigger than the X11 display?

Closes: #7625
2024-08-18 12:42:29 +12:00
toofar 68755ed850 Change Qt6.8 failing permission test xfail to "skip"
The "Async question interrupted by async one" test was failing on CI but
not locally. Not sure why, changing the tests to skip instead of xfail.
The downside is that we won't bet a notification when upstream fixes the
issues, hopefully they mark the QTBUG as closed and we see it that way.
I think we do have to do something else to deal with this persistent
permission thing anyway, assuming they don't change it to be
off-by-default, so I'm sure we'll be looking in this area again!

They'll at the very least be re-enabled when we get a PyQt 6.8.
2024-06-23 20:11:25 +12:00
toofar 9ffa98535f Ignore QSaveFile::commit warning message in tests
The test (`test_failing_flush()`) is deliberately trying to write to a
close file. This is a new error in Qt 6.8 it seems.

Ignore just the specific file for this test in case it pops up somewhere
else later.
2024-06-23 20:11:25 +12:00
toofar 39f8ce5130 XFail permission tests that have changed behavior on 6.8
WebEngine now has it's own mechanism to remember permission, and it's
turned on by default. We can't disable it until PyQt picks up the new
`QWebEngineProfile::setPersistentPermissionsPolicy()`. So the first test
that prompts for a permission will persist that setting and later ones
will fail because they don't get the prompt they expect.

For now lets set them to xfail while we figure out what to do with
permission persisting for actual users. That we we can reduce the noise
in the test results!

The WebEngine permissions persistence mechanism doesn't seem to
respect whatever we are doing to separate storage per-basedir. Testing
with a temp basedir like so:

    python3 -m qutebrowser -T https://web-push-book.gauntface.com/demos/notification-examples/

I see this file has been created under my home directory:

    $ cat ~/.local/share/qutebrowser/qutebrowser/QtWebEngine/Default/permissions.json
    {"Notifications":{"https://web-push-book.gauntface.com/":true}}

I've raised an issue upstream about that here: https://bugreports.qt.io/browse/QTBUG-126595

We've got two things to think about regarding how to deal with this new
on-by-default feature:

1. what do we do for the tests? We can Disable the feature (if on new
   enough PyQt) or add a test setup step that ... restarts the browser
   and deletes the permissions.json. That's not great
2. what do we do for real users? See below

By default I would recommend disabling the webengine one since we
already have our own. BUT we can't actually disable it until PyQt
updates with the new APIs, which can take a while, and it's pretty
likely people will be using the new Qt version before PyQt updates. So
it would be best to figure out what we can do before that! Can we make
it respect the basedir data path? Can we make it write to some fake file
we throwaway? chmod +i?

Hopefully Qt makes the permission JSON respect the data path we set and
then at the very least we can remove the JSON file after a permission is
set. It'll still be a change in behavior for users on Qt 6.8 and PyQt
6.7 though as it'll likely remember permissions within a browser
instance by default, which isn't the case for our implementation
currently.

Related to: https://github.com/qutebrowser/qutebrowser/issues/8242#issuecomment-2175949686
2024-06-23 20:11:25 +12:00
toofar fe81422f94 Ignore QItemSelectionModel no-op message.
This starts happening reliably with the "Using session completion" end
to end test after the previous change where I made it so we don't set
the completion widget model to none, just call `deleteLater()` on the old
one. The relevant part of the test is:

        And I run :session-save hello
        # This loads a completion model with one entry
        When I run :cmd-set-text -s :session-load
        # This one selects the entry, which clears the model because the
        # session completion only applies to the first word after the
        # command, which we've just selected.
        And I run :completion-item-focus next
        # This does nothing, since we have no completion model loaded,
        # not sure why it is in the test, presumably making sure no
        # exception is thrown.
        And I run :completion-item-focus next

The log message is reliable in the test but it's a bit flaky to
reproduce manually. I've reproduced it via `for f in 1 2;do qute-send -i
/tmp/qutebrowser-basedir-npzdpupy/runtime/ipc-8075cf54f63b8e1bc05db34f41292c38
":completion-item-focus next" ;done` if I manually go through the
scenario a few times. Possibly it would reproduce easier if I pin it to
one process using `taskset`.

I think the reason for this is that the model is marked for deletion in
the next event loop, then a signal goes out, then the selection model is
marked for deletion on the next event loop. And possibly this only
happens between the model and the selection model being deleted?
2024-06-09 18:16:01 +12:00
Florian Bruhin f72b862da5 tests: Re-add pytest-benchmark warning ignore
This was fixed but never released...
2024-05-24 17:07:52 +02:00
Florian Bruhin f1c18360a2 tests: Remove warning ignores for fixed issues 2024-05-23 08:12:30 +02:00
Florian Bruhin 9bf0393923 tests: Don't make QSslSocket error fail tests
Bleeding environment fails tests/unit/browser/webkit/test_certificateerror.py on Qt 5, maybe due to OpenSSL 3.x
2024-05-16 09:31:42 +02:00
toofar b812ec2628 Ignore more 6.7 DIR_APP_DICTIONARIOES log messages
In the bleeding edge CI tests I'm seeing:

  IGNORED: Path override failed for key base::DIR_APP_DICTIONARIES and path '/__w/qutebrowser/qutebrowser/.tox/bleeding/lib/python3.11/sitePath override failed for key base::DIR_APP_DICTIONARIES and path '/__w/qutebrowser/qutebrowser/.tox/bleeding/lib/python3.11/site-packages/PyQt6/Qt6/libexec/qtwebengine_dictionaries'
  INVALID: -packages/PyQt6/Qt6/libexec/qtwebengine_dictionaries'

Where the second line looks like maybe spill over from the first one
that is for some reason being printed twice and interleaved! Maybe
different processes or threads?

I did a regex for "line ending with this and with no spaces in it" which
is hopefully safe enough to not pick up a wrong line accidentally.
2024-04-06 11:29:31 +13:00
Florian Bruhin a45cfb89cb tests: Add new ignored error messages 2024-03-25 23:05:25 +01:00
toofar e6a0d2bf2f Ignore new 6.6.2 notifications related error messages
The seem to be non-fatal considering the test scenarios they are coming from
are still passing.
2024-02-20 18:45:33 +13:00
Florian Bruhin ae2e679dfc tests: Ignore some more irrelevant messages 2023-09-06 16:38:46 +02:00
Florian Bruhin 080ce36451 tests: Update warning ignores 2023-06-16 11:50:07 +02:00
Florian Bruhin 15e7d5c6b1 py312: Ignore pytest-benchmark deprecation warning
See #7727 and https://github.com/ionelmc/pytest-benchmark/issues/240
2023-06-09 15:02:30 +02:00
Florian Bruhin 2c61ec38b8 py312: Ignore pytest ast warnings
See https://github.com/pytest-dev/pytest/issues/10977
and #7727
2023-06-08 17:41:10 +02:00
Florian Bruhin e7723c9f25 Fix regex 2023-05-31 15:49:41 +02:00
Florian Bruhin 68e61a239d ci: Ignore spurious QPainter messages 2023-05-31 12:08:10 +02:00
Florian Bruhin 49048489c3 Revert "pytest: Ignore Python 3.12 addDuration warning"
This reverts commit ee40046faf.
2023-04-14 21:02:47 +02:00
Florian Bruhin ee40046faf pytest: Ignore Python 3.12 addDuration warning
See https://github.com/pytest-dev/pytest/issues/10875
2023-04-11 16:29:50 +02:00
Florian Bruhin 72c38a8e19 tests: Remove old pytest-instafail/hypothesis filterwarnings 2023-04-03 08:22:45 +02:00
Florian Bruhin 8227b91d28 tests: Update FIXME comment
PyQt insists using the deprecated signal overload, seemingly nothing we can do
to change that:
https://www.riverbankcomputing.com/pipermail/pyqt/2023-March/045215.html

See #7624
2023-03-17 20:08:54 +01:00
Florian Bruhin 2d45f6f002 tests: Ignore more Qt 6.5 / debug build messages
See #7624
2023-03-17 17:27:29 +01:00
toofar 2d66466194 Merge branch 'master' into qt6-v2
Just a few conflicts around CI and dependencies.
2022-11-20 15:48:00 +13:00
Florian Bruhin 1f5ad8abfb Remove pytest-bdd deprecation ignore 2022-11-08 16:20:46 +01:00
Florian Bruhin 1387c999fa Skip problematic QtWebKit tests with OpenSSL 3
See https://github.com/cherrypy/cheroot/issues/517 and #7467
2022-11-08 16:17:31 +01:00
Florian Bruhin bc225557a5 Adjust warnings and changelog URLs for new pytest 2022-10-31 08:19:25 +01:00
Florian Bruhin ef486aa263 Remove unneeded old log ignores 2022-08-23 18:31:41 +02:00
Florian Bruhin de593e6a8c tests: Add some marks for Qt 5 / Qt 6 2022-08-23 18:31:41 +02:00
Florian Bruhin c5a51eb0bc Drop Qt < 5.15
Fixes #7091

TODO: Add changelog
2022-08-23 18:31:41 +02:00
Florian Bruhin 323b64c669 ignore hypothesis warnings 2022-04-26 17:14:38 +02:00
Florian Bruhin 9fbaba228c Ignore certifi deprecation warning
See https://github.com/certifi/python-certifi/issues/170
2022-04-26 17:14:38 +02:00
Florian Bruhin 7535ae3fd8 Ignore Python 3.10 distutils deprecation warning
See https://github.com/ionelmc/python-hunter/issues/97
2021-05-05 20:04:48 +02:00
Florian Bruhin e0657a550a tests: Ignore new Python 3.10.0a7 ImportWarnings
https://github.com/pypa/setuptools/pull/2517
https://github.com/pypa/setuptools/pull/2523
(something in tox/virtualenv probably uses an older setuptools...)

https://github.com/benjaminp/six/pull/352 (not released yet)
2021-04-07 22:30:23 +02:00
Florian Bruhin 40c72f849d flatpak: Skip download dispatcher tests 2021-03-31 13:10:09 +02:00
Florian Bruhin 54a0dc1e38 notifications: Replace @qtwebengine_py_5_15 by @pyqtwebengine>=5.15 2021-03-25 15:41:56 +01:00
Florian Bruhin 2f592f7ce6 Merge remote-tracking branch 'origin/pr/5457' into dev 2021-03-24 14:12:36 +01:00
Florian Bruhin 0a38fff4c6 Simplify test_greasemonkey via js_tester fixture 2021-03-09 18:42:19 +01:00
Florian Bruhin 4b8c9336a3 Add marker to pytest.ini 2021-01-27 14:28:05 +01:00
Florian Bruhin 62687b1f82 tests: Ignore SixMetaPathImporter warning
Seems to be raised when importing six (via tldextract/requests/urllib)
on Python 3.10: https://github.com/benjaminp/six/issues/341

See #6068
2021-01-26 20:44:22 +01:00
Florian Bruhin 8760dc1b17 tests: Disable hypothesis fixture health checks 2021-01-11 11:12:53 +01:00
freddii c8004e4653 fixed typing mistake 2020-12-28 20:21:32 +01:00
Florian Bruhin 3126ce6686 tests: Warn about processes which don't exit cleanly 2020-11-10 18:57:23 +01:00
Florian Bruhin cc8de06082 ci: Update Python/Qt versions 2020-11-04 18:30:04 +01:00
Florian Bruhin 160831c5bd old qt: Remove conditional and old tests 2020-11-04 18:30:04 +01:00
Florian Bruhin 2b8b71a82d tests: Ignore 'could not de-queue request' error globally
See #5787
2020-10-11 16:23:29 +02:00
Florian Bruhin 3abfd78c25 Fix some a/an spelling mistakes 2020-09-06 16:37:59 +02:00
Florian Bruhin e02e262a04 tests: Skip pdf.js disabled test on QtWebKit with PDF image plugin
Since Qt 5.15, QtWebEngine comes with Qt PDF as TP:
https://wiki.qt.io/New_Features_in_Qt_5.15#Technology_Preview_Modules

This also includes a new PDF image plugin in
/usr/lib/qt/plugins/imageformats/libqpdf.so. Due to that, QtWebKit now displays the
PDF's first page as image rather than triggering a download.

See https://github.com/qtwebkit/qtwebkit/issues/1013

Thus, detect this condition (both QtWebKit and QtWebEngine installed) and skip the test
in that scenario.
2020-08-05 15:01:21 +02:00