// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gover import ( "slices" "strings" "testing" "golang.org/x/mod/module" ) func TestIsToolchain(t *testing.T) { test1(t, isToolchainTests, "IsToolchain", IsToolchain) } var isToolchainTests = []testCase1[string, bool]{ {"go", true}, {"toolchain", true}, {"anything", false}, {"golang.org/toolchain", false}, } func TestModCompare(t *testing.T) { test3(t, modCompareTests, "ModCompare", ModCompare) } var modCompareTests = []testCase3[string, string, string, int]{ {"go", "1.2", "1.3", -1}, {"go", "v1.2", "v1.3", 0}, // equal because invalid {"go", "1.2", "1.2", 0}, {"toolchain", "go1.2", "go1.3", -1}, {"toolchain", "go1.2", "go1.2", 0}, {"toolchain", "1.2", "1.3", -1}, // accepted but non-standard {"toolchain", "v1.2", "v1.3", 0}, // equal because invalid {"rsc.io/quote", "v1.2", "v1.3", -1}, {"rsc.io/quote", "1.2", "1.3", 0}, // equal because invalid } func TestModIsValid(t *testing.T) { test2(t, modIsValidTests, "ModIsValid", ModIsValid) } var modIsValidTests = []testCase2[string, string, bool]{ {"go", "1.2", true}, {"go", "v1.2", false}, {"toolchain", "go1.2", true}, {"toolchain", "v1.2", false}, {"rsc.io/quote", "v1.2", true}, {"rsc.io/quote", "1.2", false}, } func TestModSort(t *testing.T) { test1(t, modSortTests, "ModSort", func(list []module.Version) []module.Version { out := slices.Clone(list) ModSort(out) return out }) } var modSortTests = []testCase1[[]module.Version, []module.Version]{ { mvl(`z v1.1; a v1.2; a v1.1; go 1.3; toolchain 1.3; toolchain 1.2; go 1.2`), mvl(`a v1.1; a v1.2; go 1.2; go 1.3; toolchain 1.2; toolchain 1.3; z v1.1`), }, } func mvl(s string) []module.Version { var list []module.Version for _, f := range strings.Split(s, ";") { f = strings.TrimSpace(f) path, vers, _ := strings.Cut(f, " ") list = append(list, module.Version{Path: path, Version: vers}) } return list }