# 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)