xref: /aosp_15_r20/external/bazelbuild-rules_go/tests/runfiles/runfiles_bazel_test.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1// Copyright 2019 The Bazel Authors. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//    http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package runfiles_test
16
17import (
18	"regexp"
19	"testing"
20
21	"github.com/bazelbuild/rules_go/go/tools/bazel_testing"
22)
23
24func TestMain(m *testing.M) {
25	bazel_testing.TestMain(m, bazel_testing.Args{
26		Main: `
27-- other_repo/WORKSPACE --
28-- other_repo/pkg/BUILD.bazel --
29load("@io_bazel_rules_go//go:def.bzl", "go_library")
30
31go_library(
32    name = "external_source_lib",
33    srcs = ["external_source_lib.go"],
34    importpath = "example.com/runfiles/external_source_lib",
35    deps = [
36        "@io_bazel_rules_go//go/runfiles",
37    ],
38    visibility = ["//visibility:public"],
39)
40
41genrule(
42    name = "gen_source",
43    srcs = ["external_source_lib.go"],
44    outs = ["external_generated_lib.go"],
45    cmd = "cat $(location external_source_lib.go) | sed 's/external_source_lib/external_generated_lib/g' > $@",
46)
47
48go_library(
49    name = "external_generated_lib",
50    srcs = [":gen_source"],
51    importpath = "example.com/runfiles/external_generated_lib",
52    deps = [
53        "@io_bazel_rules_go//go/runfiles",
54    ],
55    visibility = ["//visibility:public"],
56)
57-- other_repo/pkg/external_source_lib.go --
58package external_source_lib
59
60import (
61	"fmt"
62	"runtime"
63
64	"github.com/bazelbuild/rules_go/go/runfiles"
65)
66
67func PrintRepo() {
68	_, file, _, _ := runtime.Caller(0)
69	fmt.Printf("%s: '%s'\n", file, runfiles.CurrentRepository())
70}
71-- pkg/BUILD.bazel --
72-- pkg/BUILD.bazel --
73load("@io_bazel_rules_go//go:def.bzl", "go_library")
74
75go_library(
76    name = "internal_source_lib",
77    srcs = ["internal_source_lib.go"],
78    importpath = "example.com/runfiles/internal_source_lib",
79    deps = [
80        "@io_bazel_rules_go//go/runfiles",
81    ],
82    visibility = ["//visibility:public"],
83)
84
85genrule(
86    name = "gen_source",
87    srcs = ["internal_source_lib.go"],
88    outs = ["internal_generated_lib.go"],
89    cmd = "cat $(location internal_source_lib.go) | sed 's/internal_source_lib/internal_generated_lib/g' > $@",
90)
91
92go_library(
93    name = "internal_generated_lib",
94    srcs = [":gen_source"],
95    importpath = "example.com/runfiles/internal_generated_lib",
96    deps = [
97        "@io_bazel_rules_go//go/runfiles",
98    ],
99    visibility = ["//visibility:public"],
100)
101-- pkg/internal_source_lib.go --
102package internal_source_lib
103
104import (
105	"fmt"
106	"runtime"
107
108	"github.com/bazelbuild/rules_go/go/runfiles"
109)
110
111func PrintRepo() {
112	_, file, _, _ := runtime.Caller(0)
113	fmt.Printf("%s: '%s'\n", file, runfiles.CurrentRepository())
114}
115-- BUILD.bazel --
116load("@io_bazel_rules_go//go:def.bzl", "go_binary")
117
118go_binary(
119    name = "main",
120    srcs = ["main.go"],
121    deps = [
122        "//pkg:internal_source_lib",
123        "//pkg:internal_generated_lib",
124        "@other_repo//pkg:external_source_lib",
125        "@other_repo//pkg:external_generated_lib",
126    ],
127)
128-- main.go --
129package main
130
131import (
132	"example.com/runfiles/internal_generated_lib"
133	"example.com/runfiles/internal_source_lib"
134	"example.com/runfiles/external_generated_lib"
135	"example.com/runfiles/external_source_lib"
136)
137
138func main() {
139	internal_source_lib.PrintRepo()
140	internal_generated_lib.PrintRepo()
141	external_source_lib.PrintRepo()
142	external_generated_lib.PrintRepo()
143}
144`,
145		WorkspaceSuffix: `
146local_repository(
147    name = "other_repo",
148    path = "other_repo",
149)
150`,
151	})
152}
153
154var expectedOutputLegacy = regexp.MustCompile(`^pkg/internal_source_lib.go: ''
155bazel-out/[^/]+/bin/pkg/internal_generated_lib.go: ''
156external/other_repo/pkg/external_source_lib.go: 'other_repo'
157bazel-out/[^/]+/bin/external/other_repo/pkg/external_generated_lib.go: 'other_repo'
158$`)
159
160func TestCurrentRepository(t *testing.T) {
161	out, err := bazel_testing.BazelOutput("run", "//:main")
162	if err != nil {
163		t.Fatal(err)
164	}
165	if !expectedOutputLegacy.Match(out) {
166		t.Fatalf("got: %q, want: %q", string(out), expectedOutputLegacy.String())
167	}
168}
169