github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/go/gover/mod_test.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package gover 6 7 import ( 8 "slices" 9 "strings" 10 "testing" 11 12 "golang.org/x/mod/module" 13 ) 14 15 func TestIsToolchain(t *testing.T) { test1(t, isToolchainTests, "IsToolchain", IsToolchain) } 16 17 var isToolchainTests = []testCase1[string, bool]{ 18 {"go", true}, 19 {"toolchain", true}, 20 {"anything", false}, 21 {"golang.org/toolchain", false}, 22 } 23 24 func TestModCompare(t *testing.T) { test3(t, modCompareTests, "ModCompare", ModCompare) } 25 26 var modCompareTests = []testCase3[string, string, string, int]{ 27 {"go", "1.2", "1.3", -1}, 28 {"go", "v1.2", "v1.3", 0}, // equal because invalid 29 {"go", "1.2", "1.2", 0}, 30 {"toolchain", "go1.2", "go1.3", -1}, 31 {"toolchain", "go1.2", "go1.2", 0}, 32 {"toolchain", "1.2", "1.3", -1}, // accepted but non-standard 33 {"toolchain", "v1.2", "v1.3", 0}, // equal because invalid 34 {"rsc.io/quote", "v1.2", "v1.3", -1}, 35 {"rsc.io/quote", "1.2", "1.3", 0}, // equal because invalid 36 } 37 38 func TestModIsValid(t *testing.T) { test2(t, modIsValidTests, "ModIsValid", ModIsValid) } 39 40 var modIsValidTests = []testCase2[string, string, bool]{ 41 {"go", "1.2", true}, 42 {"go", "v1.2", false}, 43 {"toolchain", "go1.2", true}, 44 {"toolchain", "v1.2", false}, 45 {"rsc.io/quote", "v1.2", true}, 46 {"rsc.io/quote", "1.2", false}, 47 } 48 49 func TestModSort(t *testing.T) { 50 test1(t, modSortTests, "ModSort", func(list []module.Version) []module.Version { 51 out := slices.Clone(list) 52 ModSort(out) 53 return out 54 }) 55 } 56 57 var modSortTests = []testCase1[[]module.Version, []module.Version]{ 58 { 59 mvl(`z v1.1; a v1.2; a v1.1; go 1.3; toolchain 1.3; toolchain 1.2; go 1.2`), 60 mvl(`a v1.1; a v1.2; go 1.2; go 1.3; toolchain 1.2; toolchain 1.3; z v1.1`), 61 }, 62 } 63 64 func mvl(s string) []module.Version { 65 var list []module.Version 66 for _, f := range strings.Split(s, ";") { 67 f = strings.TrimSpace(f) 68 path, vers, _ := strings.Cut(f, " ") 69 list = append(list, module.Version{Path: path, Version: vers}) 70 } 71 return list 72 }