1# Copyright (c) 2018 Ultimaker B.V.
2# Uranium is released under the terms of the LGPLv3 or higher.
3
4from UM.Version import Version
5from unittest import TestCase
6import pytest
7
8major_versions = [Version("1"), Version(b"1"), Version(1), Version([1]), Version(["1"]), Version("1."), Version("MOD-1"), Version("1B"), Version(Version("1"))]
9major_minor_versions = [Version("1.2"), Version("1-2"), Version("1_2"), Version(b"1.2"), Version("1.2BETA"), Version([1, 2]), Version(["1", "2"]), Version([1, "2"]), Version([1, b"2"])]
10major_minor_revision_versions = [Version("1.2.3"), Version("1.2.3BETA"), Version("1_2-3"), Version(b"1.2.3"), Version([1, 2, 3]), Version(["1", "2", "3"]), Version([1, "2", 3]), Version("MOD-1.2.3"), Version(["1", 2, b"3"])]
11
12
13def check_version_equals(first_version: Version, second_version: Version):
14    assert first_version == second_version
15    assert first_version.getMajor() == second_version.getMajor()
16    assert first_version.getMinor() == second_version.getMinor()
17    assert first_version.getRevision() == second_version.getRevision()
18
19
20@pytest.mark.parametrize("first_version", major_versions)
21@pytest.mark.parametrize("second_version", major_versions)
22def test_major_equals(first_version, second_version):
23    check_version_equals(first_version, second_version)
24
25
26@pytest.mark.parametrize("first_version", major_minor_versions)
27@pytest.mark.parametrize("second_version", major_minor_versions)
28def test_major_and_minor_equals(first_version, second_version):
29    check_version_equals(first_version, second_version)
30
31
32@pytest.mark.parametrize("first_version", major_minor_revision_versions)
33@pytest.mark.parametrize("second_version", major_minor_revision_versions)
34def test_major_minor_revision_equals(first_version, second_version):
35    check_version_equals(first_version, second_version)
36
37
38@pytest.mark.parametrize("first_version", major_versions)
39@pytest.mark.parametrize("second_version", major_minor_versions)
40def test_check_version_smaller(first_version, second_version):
41    assert first_version < second_version
42
43    # Just to be on the really safe side
44    assert first_version != second_version
45    assert not first_version > second_version
46
47
48@pytest.mark.parametrize("first_version", major_minor_versions)
49@pytest.mark.parametrize("second_version", major_minor_revision_versions)
50def test_check_version_smaller_2(first_version, second_version):
51    assert first_version < second_version
52
53    # Just to be on the really safe side
54    assert first_version != second_version
55    assert not first_version > second_version
56
57
58def test_versionPostfix():
59    version = Version("1.2.3-alpha.4")
60    assert version.getPostfixType() == "alpha"
61    assert version.getPostfixVersion() == 4
62    assert version.hasPostFix()
63    assert not Version("").hasPostFix()
64
65    assert version <= Version("1.2.3-alpha.5")
66    assert version < Version("1.2.3-alpha.5")
67
68
69def test_versionWeirdCompares():
70    version = Version("1.2.3-alpha.4")
71    assert not version == 12
72
73
74def test_wrongType():
75    version = Version(None)
76    assert version == Version("0")
77
78def test_compareStrings():
79    version_string = "1.0.0"
80    version = Version(version_string)
81    assert version == version_string
82    assert version >= version_string
83
84    assert version < "2.0.0"
85    assert version <= "2.0.0"
86    assert "0" < version
87
88    assert Version("1.0.0") > Version("1.0.0-alpha.7")
89
90    # Defend people from ignoring the typing.
91    assert not version > None
92    assert not version < None