blob: c92169cb32d50caa013d695f0a6a20b5b1e38494 [file] [log] [blame]
// 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
}