# 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() -> None:
    """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() -> None:
    """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() -> None:
    """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() -> None:
    """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() -> None:
    """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")
