diff options
Diffstat (limited to 'tests/core/nogo/generics/generics_test.go')
-rw-r--r-- | tests/core/nogo/generics/generics_test.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/core/nogo/generics/generics_test.go b/tests/core/nogo/generics/generics_test.go new file mode 100644 index 00000000..562d52ed --- /dev/null +++ b/tests/core/nogo/generics/generics_test.go @@ -0,0 +1,85 @@ +// 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 generics_test + +import ( + "bytes" + "testing" + + "github.com/bazelbuild/rules_go/go/tools/bazel_testing" +) + +func TestMain(m *testing.M) { + bazel_testing.TestMain(m, bazel_testing.Args{ + Nogo: "@//:nogo", + Main: ` +-- BUILD.bazel -- +load("@io_bazel_rules_go//go:def.bzl", "go_library", "nogo") + +nogo( + name = "nogo", + visibility = ["//visibility:public"], + deps = ["@org_golang_x_tools//go/analysis/passes/buildssa"], +) + +go_library( + name = "src", + srcs = ["src.go"], + importpath = "src", +) + +-- src.go -- +package src + +type Set[T comparable] struct { + m map[T]struct{} +} + +func New[T comparable](s ...T) *Set[T] { + set := &Set[T]{} + set.Add(s...) + return set +} + +func (set *Set[T]) Add(s ...T) { + if set.m == nil { + set.m = make(map[T]struct{}) + } + for _, s := range s { + set.m[s] = struct{}{} + } +} + +func S(x ...string) *Set[string] { + return New[string](x...) +} +`, + }) +} + +func Test(t *testing.T) { + cmd := bazel_testing.BazelCmd("build", "//:src") + var stderr bytes.Buffer + cmd.Stderr = &stderr + + if err := cmd.Run(); err != nil { + t.Log("output:", stderr.String()) + t.Fatal("unexpected error:", err) + } + + if bytes.Contains(stderr.Bytes(), []byte("panic")) { + t.Errorf("found panic in Bazel output: \n%s", stderr.String()) + } +} |