diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-03-11 14:51:47 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-03-11 16:45:40 +0100 |
commit | 4709d46936b379605aca110c7dd336d1cff45db6 (patch) | |
tree | 3641c2f36be03c3cf6a549e591cfd3be432f9d36 /tests | |
parent | dc5a63f70bbdaf342511344e70f45562ecbf5a9e (diff) | |
download | qutebrowser-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.py | 2 | ||||
-rw-r--r-- | tests/unit/utils/test_utils.py | 109 | ||||
-rw-r--r-- | tests/unit/utils/test_version.py | 2 |
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', ) |