summaryrefslogtreecommitdiff
path: root/tests/unit/utils/test_version.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/utils/test_version.py')
-rw-r--r--tests/unit/utils/test_version.py116
1 files changed, 82 insertions, 34 deletions
diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py
index f846c91ac..a53b4bdce 100644
--- a/tests/unit/utils/test_version.py
+++ b/tests/unit/utils/test_version.py
@@ -40,6 +40,11 @@ from qutebrowser.utils import version, usertypes, utils, standarddir
from qutebrowser.misc import pastebin, objects, elf
from qutebrowser.browser import pdfjs
+try:
+ from qutebrowser.browser.webengine import webenginesettings
+except ImportError:
+ webenginesettings = None
+
@pytest.mark.parametrize('os_release, expected', [
# No file
@@ -314,9 +319,9 @@ def test_distribution(tmpdir, monkeypatch, os_release, expected):
id='arch', parsed=version.Distribution.arch, version=None,
pretty='Arch Linux'), False)
])
-def test_is_sandboxed(monkeypatch, distribution, expected):
+def test_is_flatpak(monkeypatch, distribution, expected):
monkeypatch.setattr(version, "distribution", lambda: distribution)
- assert version.is_sandboxed() == expected
+ assert version.is_flatpak() == expected
class GitStrSubprocessFake:
@@ -357,14 +362,14 @@ class TestGitStr:
@pytest.fixture
def commit_file_mock(self, mocker):
- """Fixture providing a mock for utils.read_file for git-commit-id.
+ """Fixture providing a mock for resources.read_file for git-commit-id.
On fixture teardown, it makes sure it got called with git-commit-id as
argument.
"""
mocker.patch('qutebrowser.utils.version.subprocess',
side_effect=AssertionError)
- m = mocker.patch('qutebrowser.utils.version.utils.read_file')
+ m = mocker.patch('qutebrowser.utils.version.resources.read_file')
yield m
m.assert_called_with('git-commit-id')
@@ -413,7 +418,7 @@ class TestGitStr:
"""Test with things raising OSError."""
m = mocker.patch('qutebrowser.utils.version.os')
m.path.join.side_effect = OSError
- mocker.patch('qutebrowser.utils.version.utils.read_file',
+ mocker.patch('qutebrowser.utils.version.resources.read_file',
side_effect=OSError)
with caplog.at_level(logging.ERROR, 'misc'):
assert version._git_str() is None
@@ -926,6 +931,25 @@ class TestWebEngineVersions:
def test_str(self, version, expected):
assert str(version) == expected
+ @pytest.mark.parametrize('version, expected', [
+ (
+ version.WebEngineVersions(
+ webengine=utils.VersionNumber(5, 15, 2),
+ chromium=None,
+ source='test'),
+ None,
+ ),
+ (
+ version.WebEngineVersions(
+ webengine=utils.VersionNumber(5, 15, 2),
+ chromium='87.0.4280.144',
+ source='test'),
+ 87,
+ ),
+ ])
+ def test_chromium_major(self, version, expected):
+ assert version.chromium_major == expected
+
def test_from_ua(self):
ua = websettings.UserAgent(
os_info='X11; Linux x86_64',
@@ -956,10 +980,13 @@ class TestWebEngineVersions:
('5.14.2', '77.0.3865.129'),
('5.15.1', '80.0.3987.163'),
('5.15.2', '83.0.4103.122'),
+ ('5.15.3', '87.0.4280.144'),
+ ('5.15.4', '87.0.4280.144'),
+ ('5.15.5', '87.0.4280.144'),
])
def test_from_pyqt(self, qt_version, chromium_version):
expected = version.WebEngineVersions(
- webengine=utils.parse_version(qt_version),
+ webengine=utils.VersionNumber.parse(qt_version),
chromium=chromium_version,
source='PyQt',
)
@@ -982,15 +1009,8 @@ class TestWebEngineVersions:
versions = version.WebEngineVersions.from_pyqt(pyqt_webengine_version)
- if pyqt_webengine_version == '5.15.3':
- # Transient situation - we expect to get QtWebEngine 5.15.3 soon,
- # so this will line up again.
- assert versions.chromium == '87.0.4280.144'
- pytest.xfail("Transient situation")
- else:
- from qutebrowser.browser.webengine import webenginesettings
- webenginesettings.init_user_agent()
- expected = webenginesettings.parsed_user_agent.upstream_browser_version
+ webenginesettings.init_user_agent()
+ expected = webenginesettings.parsed_user_agent.upstream_browser_version
assert versions.chromium == expected
@@ -1029,26 +1049,24 @@ class TestChromiumVersion:
@pytest.fixture(autouse=True)
def clear_parsed_ua(self, monkeypatch):
pytest.importorskip('PyQt5.QtWebEngineWidgets')
- if version.webenginesettings is not None:
+ if webenginesettings is not None:
# Not available with QtWebKit
- monkeypatch.setattr(version.webenginesettings, 'parsed_user_agent', None)
+ monkeypatch.setattr(webenginesettings, 'parsed_user_agent', None)
def test_fake_ua(self, monkeypatch, caplog):
ver = '77.0.3865.98'
- version.webenginesettings._init_user_agent_str(
- _QTWE_USER_AGENT.format(ver))
+ webenginesettings._init_user_agent_str(_QTWE_USER_AGENT.format(ver))
assert version.qtwebengine_versions().chromium == ver
def test_prefers_saved_user_agent(self, monkeypatch):
- version.webenginesettings._init_user_agent_str(_QTWE_USER_AGENT)
+ webenginesettings._init_user_agent_str(_QTWE_USER_AGENT.format('87'))
class FakeProfile:
def defaultProfile(self):
raise AssertionError("Should not be called")
- monkeypatch.setattr(version.webenginesettings, 'QWebEngineProfile',
- FakeProfile())
+ monkeypatch.setattr(webenginesettings, 'QWebEngineProfile', FakeProfile())
version.qtwebengine_versions()
@@ -1079,18 +1097,34 @@ class TestChromiumVersion:
import_fake.patch()
@pytest.fixture
- def patch_importlib_no_package(self, monkeypatch):
- """Simulate importlib not finding PyQtWebEngine-Qt."""
- try:
- import importlib.metadata as importlib_metadata
- except ImportError:
- importlib_metadata = pytest.importorskip("importlib_metadata")
-
- def _fake_version(name):
- assert name == 'PyQtWebEngine-Qt'
- raise importlib_metadata.PackageNotFoundError(name)
+ def importlib_patcher(self, monkeypatch):
+ """Patch the importlib module."""
+ def _patch(*, qt, qt5):
+ try:
+ import importlib.metadata as importlib_metadata
+ except ImportError:
+ importlib_metadata = pytest.importorskip("importlib_metadata")
+
+ def _fake_version(name):
+ if name == 'PyQtWebEngine-Qt':
+ outcome = qt
+ elif name == 'PyQtWebEngine-Qt5':
+ outcome = qt5
+ else:
+ raise utils.Unreachable(outcome)
+
+ if outcome is None:
+ raise importlib_metadata.PackageNotFoundError(name)
+ return outcome
+
+ monkeypatch.setattr(importlib_metadata, 'version', _fake_version)
+
+ return _patch
- monkeypatch.setattr(importlib_metadata, 'version', _fake_version)
+ @pytest.fixture
+ def patch_importlib_no_package(self, importlib_patcher):
+ """Simulate importlib not finding PyQtWebEngine-Qt[5]."""
+ importlib_patcher(qt=None, qt5=None)
@pytest.mark.parametrize('patches, sources', [
(['elf_fail'], ['importlib', 'PyQt', 'Qt']),
@@ -1114,6 +1148,21 @@ class TestChromiumVersion:
versions = version.qtwebengine_versions(avoid_init=True)
assert versions.source in sources
+ @pytest.mark.parametrize('qt, qt5, expected', [
+ (None, '5.15.4', utils.VersionNumber(5, 15, 4)),
+ ('5.15.3', None, utils.VersionNumber(5, 15, 3)),
+ ('5.15.3', '5.15.4', utils.VersionNumber(5, 15, 4)), # -Qt5 takes precedence
+ ])
+ def test_importlib(self, qt, qt5, expected, patch_elf_fail, importlib_patcher):
+ """Test the importlib version logic with different Qt packages.
+
+ With PyQtWebEngine 5.15.4, PyQtWebEngine-Qt was renamed to PyQtWebEngine-Qt5.
+ """
+ importlib_patcher(qt=qt, qt5=qt5)
+ versions = version.qtwebengine_versions(avoid_init=True)
+ assert versions.source == 'importlib'
+ assert versions.webengine == expected
+
@dataclasses.dataclass
class VersionParams:
@@ -1203,7 +1252,6 @@ def test_version_info(params, stubs, monkeypatch, config_stub):
if params.with_webkit:
patches['qWebKitVersion'] = lambda: 'WEBKIT VERSION'
patches['objects.backend'] = usertypes.Backend.QtWebKit
- patches['webenginesettings'] = None
substitutions['backend'] = 'new QtWebKit (WebKit WEBKIT VERSION)'
else:
monkeypatch.delattr(version, 'qtutils.qWebKitVersion', raising=False)