blob: 9d13402c9210edfd327ede59df9618337cca7983 [file] [log] [blame]
# Copyright 2023 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
""
load("@rules_testing//lib:test_suite.bzl", "test_suite")
load("//python/private:semver.bzl", "semver") # buildifier: disable=bzl-visibility
_tests = []
def _test_semver_from_major(env):
actual = semver("3")
env.expect.that_int(actual.major).equals(3)
env.expect.that_int(actual.minor).equals(None)
env.expect.that_int(actual.patch).equals(None)
env.expect.that_str(actual.build).equals("")
_tests.append(_test_semver_from_major)
def _test_semver_from_major_minor_version(env):
actual = semver("4.9")
env.expect.that_int(actual.major).equals(4)
env.expect.that_int(actual.minor).equals(9)
env.expect.that_int(actual.patch).equals(None)
env.expect.that_str(actual.build).equals("")
_tests.append(_test_semver_from_major_minor_version)
def _test_semver_with_build_info(env):
actual = semver("1.2.3+mybuild")
env.expect.that_int(actual.major).equals(1)
env.expect.that_int(actual.minor).equals(2)
env.expect.that_int(actual.patch).equals(3)
env.expect.that_str(actual.build).equals("mybuild")
_tests.append(_test_semver_with_build_info)
def _test_semver_with_build_info_multiple_pluses(env):
actual = semver("1.2.3-rc0+build+info")
env.expect.that_int(actual.major).equals(1)
env.expect.that_int(actual.minor).equals(2)
env.expect.that_int(actual.patch).equals(3)
env.expect.that_str(actual.pre_release).equals("rc0")
env.expect.that_str(actual.build).equals("build+info")
_tests.append(_test_semver_with_build_info_multiple_pluses)
def _test_semver_alpha_beta(env):
actual = semver("1.2.3-alpha.beta")
env.expect.that_int(actual.major).equals(1)
env.expect.that_int(actual.minor).equals(2)
env.expect.that_int(actual.patch).equals(3)
env.expect.that_str(actual.pre_release).equals("alpha.beta")
_tests.append(_test_semver_alpha_beta)
def _test_semver_sort(env):
want = [
semver(item)
for item in [
# The items are sorted from lowest to highest version
"0.0.1",
"0.1.0-rc",
"0.1.0",
"0.9.11",
"0.9.12",
"1.0.0-alpha",
"1.0.0-alpha.1",
"1.0.0-alpha.beta",
"1.0.0-beta",
"1.0.0-beta.2",
"1.0.0-beta.11",
"1.0.0-rc.1",
"1.0.0-rc.2",
"1.0.0",
# Also handle missing minor and patch version strings
"2.0",
"3",
# Alphabetic comparison for different builds
"3.0.0+build0",
"3.0.0+build1",
]
]
actual = sorted(want, key = lambda x: x.key())
env.expect.that_collection(actual).contains_exactly(want).in_order()
for i, greater in enumerate(want[1:]):
smaller = actual[i]
if greater.key() <= smaller.key():
env.fail("Expected '{}' to be smaller than '{}', but got otherwise".format(
smaller.str(),
greater.str(),
))
_tests.append(_test_semver_sort)
def semver_test_suite(name):
"""Create the test suite.
Args:
name: the name of the test suite
"""
test_suite(name = name, basic_tests = _tests)