blob: 9cb7ad51dc849bf279945fd36868a5c3d071f497 [file] [log] [blame]
// Copyright 2022 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.
package go_download_sdk_test
import (
"fmt"
"strings"
"testing"
"text/template"
"github.com/bazelbuild/rules_go/go/tools/bazel_testing"
)
type testcase struct {
Name, SDKVersion, expectedVersion string
}
var testCases = []testcase{
{
Name: "major_version",
SDKVersion: "1",
expectedVersion: "go1.16",
},
{
Name: "minor_version",
SDKVersion: "1.16",
expectedVersion: "go1.16",
},
{
Name: "patch_version",
SDKVersion: "1.16.0",
expectedVersion: "go1.16",
},
{
Name: "1_17_minor_version",
SDKVersion: "1.17",
expectedVersion: "go1.17",
},
{
Name: "1_17_patch_version",
SDKVersion: "1.17.1",
expectedVersion: "go1.17.1",
},
}
func TestMain(m *testing.M) {
mainFilesTmpl := template.Must(template.New("").Parse(`
-- WORKSPACE --
local_repository(
name = "io_bazel_rules_go",
path = "../io_bazel_rules_go",
)
load("@io_bazel_rules_go//go:deps.bzl", "go_download_sdk", "go_rules_dependencies", "go_register_toolchains")
go_rules_dependencies()
go_download_sdk(
name = "go_sdk",
version = "1.16",
)
go_download_sdk(
name = "go_sdk_1_17",
version = "1.17",
)
go_download_sdk(
name = "go_sdk_1_17_1",
version = "1.17.1",
)
go_register_toolchains()
-- main.go --
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Print(runtime.Version())
}
-- BUILD.bazel --
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_cross_binary")
go_binary(
name = "print_version",
srcs = ["main.go"],
)
{{range .TestCases}}
go_cross_binary(
name = "{{.Name}}",
target = ":print_version",
sdk_version = "{{.SDKVersion}}",
)
{{end}}
`))
tmplValues := struct{
TestCases []testcase
}{
TestCases: testCases,
}
mainFilesBuilder := &strings.Builder{}
if err := mainFilesTmpl.Execute(mainFilesBuilder, tmplValues); err != nil {
panic(err)
}
bazel_testing.TestMain(m, bazel_testing.Args{Main: mainFilesBuilder.String()})
}
func Test(t *testing.T) {
for _, test := range testCases {
t.Run(test.Name, func(t *testing.T) {
output, err := bazel_testing.BazelOutput("run", fmt.Sprintf("//:%s", test.Name))
if err != nil {
t.Fatal(err)
}
actualVersion := string(output)
if actualVersion != test.expectedVersion {
t.Fatal("actual", actualVersion, "vs expected", test.expectedVersion)
}
})
}
}