summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-03-11 14:51:47 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-03-11 16:45:40 +0100
commit4709d46936b379605aca110c7dd336d1cff45db6 (patch)
tree3641c2f36be03c3cf6a549e591cfd3be432f9d36 /tests
parentdc5a63f70bbdaf342511344e70f45562ecbf5a9e (diff)
downloadqutebrowser-4709d46936b379605aca110c7dd336d1cff45db6.tar.gz
qutebrowser-4709d46936b379605aca110c7dd336d1cff45db6.zip
Add custom VersionNumber class
Qt's API is kind of painful, and we need some custom functionality anyways. Wrap QVersionNumber with our own class instead of piling up workarounds.
Diffstat (limited to 'tests')
-rw-r--r--tests/end2end/test_invocations.py2
-rw-r--r--tests/unit/utils/test_utils.py109
-rw-r--r--tests/unit/utils/test_version.py2
3 files changed, 104 insertions, 9 deletions
diff --git a/tests/end2end/test_invocations.py b/tests/end2end/test_invocations.py
index f3d74d1f0..38e40f9b7 100644
--- a/tests/end2end/test_invocations.py
+++ b/tests/end2end/test_invocations.py
@@ -657,7 +657,7 @@ def test_dark_mode(webengine_versions, quteproc_new, request,
quteproc_new.start(args)
ver = webengine_versions.webengine
- minor_version = f'{ver.majorVersion()}.{ver.minorVersion()}'
+ minor_version = str(ver.strip_patch())
expected = colors.get(minor_version, colors[None])
quteproc_new.open_path(f'data/darkmode/{filename}.html')
diff --git a/tests/unit/utils/test_utils.py b/tests/unit/utils/test_utils.py
index 4cf60943c..a64622dee 100644
--- a/tests/unit/utils/test_utils.py
+++ b/tests/unit/utils/test_utils.py
@@ -29,6 +29,7 @@ import re
import shlex
import math
import zipfile
+import operator
from PyQt5.QtCore import QUrl, QRect
from PyQt5.QtGui import QClipboard
@@ -44,19 +45,113 @@ from qutebrowser.utils import utils, version, usertypes
class TestVersionNumber:
- @pytest.mark.parametrize('args, expected', [
- ([5, 15, 2], 'VersionNumber(5, 15, 2)'),
- ([5, 15], 'VersionNumber(5, 15)'),
- ([5], 'VersionNumber(5)'),
+ @pytest.mark.parametrize('num, expected', [
+ (utils.VersionNumber(5, 15, 2), 'VersionNumber(5, 15, 2)'),
+ (utils.VersionNumber(5, 15), 'VersionNumber(5, 15)'),
+ (utils.VersionNumber(5), 'VersionNumber(5)'),
])
- def test_repr(self, args, expected):
- num = utils.VersionNumber(*args)
+ def test_repr(self, num, expected):
assert repr(num) == expected
+ @pytest.mark.parametrize('num, expected', [
+ (utils.VersionNumber(5, 15, 2), '5.15.2'),
+ (utils.VersionNumber(5, 15), '5.15'),
+ (utils.VersionNumber(5), '5'),
+ ])
+ def test_str(self, num, expected):
+ assert str(num) == expected
+
def test_not_normalized(self):
with pytest.raises(ValueError, match='Refusing to construct'):
utils.VersionNumber(5, 15, 0)
+ @pytest.mark.parametrize('num, expected', [
+ (utils.VersionNumber(5, 15, 2), utils.VersionNumber(5, 15)),
+ (utils.VersionNumber(5, 15), utils.VersionNumber(5, 15)),
+ (utils.VersionNumber(6), utils.VersionNumber(6)),
+ ])
+ def test_strip_patch(self, num, expected):
+ assert num.strip_patch() == expected
+
+ @pytest.mark.parametrize('s, expected', [
+ ('1x6.2', utils.VersionNumber(1)),
+ ('6', utils.VersionNumber(6)),
+ ('5.15', utils.VersionNumber(5, 15)),
+ ('5.15.3', utils.VersionNumber(5, 15, 3)),
+ ('5.15.3.dev1234', utils.VersionNumber(5, 15, 3)),
+ ])
+ def test_parse_valid(self, s, expected):
+ assert utils.VersionNumber.parse(s) == expected
+
+ @pytest.mark.parametrize('s, message', [
+ ('foo6', "Failed to parse foo6"),
+ ('.6', "Failed to parse .6"),
+ ('0x6.2', "Can't construct a null version"),
+ ])
+ def test_parse_invalid(self, s, message):
+ with pytest.raises(ValueError, match=message):
+ utils.VersionNumber.parse(s)
+
+ @pytest.mark.parametrize('lhs, op, rhs, outcome', [
+ # ==
+ (utils.VersionNumber(6), operator.eq, utils.VersionNumber(6), True),
+ (utils.VersionNumber(6), operator.eq, object(), False),
+
+ # !=
+ (utils.VersionNumber(6), operator.ne, utils.VersionNumber(5), True),
+ (utils.VersionNumber(6), operator.ne, object(), True),
+
+ # >=
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(5, 13, 5), True),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(5, 14, 2), False),
+ (utils.VersionNumber(5, 14, 3), operator.ge, utils.VersionNumber(5, 14, 2), True),
+ (utils.VersionNumber(5, 14, 3), operator.ge, utils.VersionNumber(5, 14, 3), True),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(5, 13), True),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(5, 14), True),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(5, 15), False),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(4), True),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(5), True),
+ (utils.VersionNumber(5, 14), operator.ge, utils.VersionNumber(6), False),
+
+ # >
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(5, 13, 5), True),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(5, 14, 2), False),
+ (utils.VersionNumber(5, 14, 3), operator.gt, utils.VersionNumber(5, 14, 2), True),
+ (utils.VersionNumber(5, 14, 3), operator.gt, utils.VersionNumber(5, 14, 3), False),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(5, 13), True),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(5, 14), False),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(5, 15), False),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(4), True),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(5), True),
+ (utils.VersionNumber(5, 14), operator.gt, utils.VersionNumber(6), False),
+
+ # <=
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(5, 13, 5), False),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(5, 14, 2), True),
+ (utils.VersionNumber(5, 14, 3), operator.le, utils.VersionNumber(5, 14, 2), False),
+ (utils.VersionNumber(5, 14, 3), operator.le, utils.VersionNumber(5, 14, 3), True),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(5, 13), False),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(5, 14), True),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(5, 15), True),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(4), False),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(5), False),
+ (utils.VersionNumber(5, 14), operator.le, utils.VersionNumber(6), True),
+
+ # <
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(5, 13, 5), False),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(5, 14, 2), True),
+ (utils.VersionNumber(5, 14, 3), operator.lt, utils.VersionNumber(5, 14, 2), False),
+ (utils.VersionNumber(5, 14, 3), operator.lt, utils.VersionNumber(5, 14, 3), False),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(5, 13), False),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(5, 14), False),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(5, 15), True),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(4), False),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(5), False),
+ (utils.VersionNumber(5, 14), operator.lt, utils.VersionNumber(6), True),
+ ])
+ def test_comparisons(self, lhs, op, rhs, outcome):
+ assert op(lhs, rhs) == outcome
+
ELLIPSIS = '\u2026'
@@ -784,7 +879,7 @@ class TestOpenFile:
info = version.DistributionInfo(
id='org.kde.Platform',
parsed=version.Distribution.kde_flatpak,
- version=utils.parse_version('5.12'),
+ version=utils.VersionNumber.parse('5.12'),
pretty='Unknown')
monkeypatch.setattr(version, 'distribution',
lambda: info)
diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py
index b7da60011..39b898d59 100644
--- a/tests/unit/utils/test_version.py
+++ b/tests/unit/utils/test_version.py
@@ -962,7 +962,7 @@ class TestWebEngineVersions:
])
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',
)