blob: 45de1e2888eec8adde8f6da8a4b2b7be760c65ac [file] [log] [blame]
# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""PMS tests."""
import pytest
from chromite.utils import pms
def test_reject_invalid_versions():
"""Check we reject invalid versions."""
assert not pms.version_valid("\n1.2")
assert not pms.version_valid("1.2\n")
assert not pms.version_valid("1.2\n1.3")
def test_versions_eq():
"""Check equal versions compared correctly."""
assert pms.version_eq("1", "1")
assert pms.version_eq("1.000", "1.0")
assert pms.version_eq(
"1_alpha1_beta2_pre3_rc4_p5", "1_alpha1_beta2_pre3_rc4_p5"
)
assert pms.version_eq("1.2.3.200702020000", "1.2.3.200702020000")
assert pms.version_eq("1.2.3_alpha", "1.2.3_alpha0-r0")
assert pms.version_eq("1.2.3_alpha4-r5", "1.2.3_alpha4-r5")
def test_versions_eq_invalid():
"""Check invalid versions throw correctly."""
with pytest.raises(ValueError) as e:
pms.version_eq("1\n", "1")
assert "Invalid version" in str(e)
with pytest.raises(ValueError) as e:
pms.version_eq("1", "1\n")
assert "Invalid version" in str(e)
def test_version_lt():
"""Test a variety of unequal versions using LT."""
# Version varieties.
assert pms.version_lt("1", "2")
assert pms.version_lt("1.0", "2.0")
assert pms.version_lt("1.1.1", "1.1.1.1")
assert pms.version_lt("1.034", "1.1")
assert pms.version_lt("1.0.1", "1.002")
assert pms.version_lt("0.0.1", "0.0.2")
assert pms.version_lt("1.2.3.200702020000", "1.2.3.200702020001")
# Letter components.
assert pms.version_lt("20004", "20004a")
assert pms.version_lt("1b", "1z")
# Suffix checks.
assert pms.version_lt("2.0_pre", "2.0")
assert pms.version_lt("2.0_alpha", "2.0_beta")
assert pms.version_lt("2.0_beta", "2.0_pre")
assert pms.version_lt("2.0_pre", "2.0_rc")
assert pms.version_lt("2.0_rc", "2.0_p")
assert pms.version_lt("2.0_pre", "2.0_pre1")
assert pms.version_lt("2.0_pre", "2.0_p1234")
assert pms.version_lt("2.0_rc", "2.0")
assert pms.version_lt("2.0", "2.0_p")
assert pms.version_lt("1_alpha_beta", "1_alpha")
assert pms.version_lt("1_alpha_beta", "1_alpha1")
assert pms.version_lt("1_alpha_beta", "1_beta")
assert pms.version_lt("1_alpha_beta", "1_alpha_beta1")
assert pms.version_lt("1_alpha_beta_pre", "1_alpha_beta")
assert pms.version_lt("1_alpha_beta", "1_alpha_beta_p")
assert pms.version_lt("2.0_rc", "2.0_rc_p")
# Revisions.
assert pms.version_lt("1.0", "1.0-r1")
assert pms.version_lt("1.0-r5", "1.0-r10")
def test_version_gt():
"""Test a few of the LT cases in reverse to do a quick GT check."""
assert pms.version_gt("1.1.1.1", "1.1.1")
assert pms.version_gt("2.0_p1234", "2.0_pre")
assert pms.version_gt("2.0", "2.0_rc")
assert pms.version_gt("1_alpha_beta_p", "1_alpha_beta")