// Copyright 2019 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 runfiles_test import ( "regexp" "testing" "github.com/bazelbuild/rules_go/go/tools/bazel_testing" ) func TestMain(m *testing.M) { bazel_testing.TestMain(m, bazel_testing.Args{ Main: ` -- other_repo/WORKSPACE -- -- other_repo/pkg/BUILD.bazel -- load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "external_source_lib", srcs = ["external_source_lib.go"], importpath = "example.com/runfiles/external_source_lib", deps = [ "@io_bazel_rules_go//go/runfiles", ], visibility = ["//visibility:public"], ) genrule( name = "gen_source", srcs = ["external_source_lib.go"], outs = ["external_generated_lib.go"], cmd = "cat $(location external_source_lib.go) | sed 's/external_source_lib/external_generated_lib/g' > $@", ) go_library( name = "external_generated_lib", srcs = [":gen_source"], importpath = "example.com/runfiles/external_generated_lib", deps = [ "@io_bazel_rules_go//go/runfiles", ], visibility = ["//visibility:public"], ) -- other_repo/pkg/external_source_lib.go -- package external_source_lib import ( "fmt" "runtime" "github.com/bazelbuild/rules_go/go/runfiles" ) func PrintRepo() { _, file, _, _ := runtime.Caller(0) fmt.Printf("%s: '%s'\n", file, runfiles.CurrentRepository()) } -- pkg/BUILD.bazel -- -- pkg/BUILD.bazel -- load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "internal_source_lib", srcs = ["internal_source_lib.go"], importpath = "example.com/runfiles/internal_source_lib", deps = [ "@io_bazel_rules_go//go/runfiles", ], visibility = ["//visibility:public"], ) genrule( name = "gen_source", srcs = ["internal_source_lib.go"], outs = ["internal_generated_lib.go"], cmd = "cat $(location internal_source_lib.go) | sed 's/internal_source_lib/internal_generated_lib/g' > $@", ) go_library( name = "internal_generated_lib", srcs = [":gen_source"], importpath = "example.com/runfiles/internal_generated_lib", deps = [ "@io_bazel_rules_go//go/runfiles", ], visibility = ["//visibility:public"], ) -- pkg/internal_source_lib.go -- package internal_source_lib import ( "fmt" "runtime" "github.com/bazelbuild/rules_go/go/runfiles" ) func PrintRepo() { _, file, _, _ := runtime.Caller(0) fmt.Printf("%s: '%s'\n", file, runfiles.CurrentRepository()) } -- BUILD.bazel -- load("@io_bazel_rules_go//go:def.bzl", "go_binary") go_binary( name = "main", srcs = ["main.go"], deps = [ "//pkg:internal_source_lib", "//pkg:internal_generated_lib", "@other_repo//pkg:external_source_lib", "@other_repo//pkg:external_generated_lib", ], ) -- main.go -- package main import ( "example.com/runfiles/internal_generated_lib" "example.com/runfiles/internal_source_lib" "example.com/runfiles/external_generated_lib" "example.com/runfiles/external_source_lib" ) func main() { internal_source_lib.PrintRepo() internal_generated_lib.PrintRepo() external_source_lib.PrintRepo() external_generated_lib.PrintRepo() } `, WorkspaceSuffix: ` local_repository( name = "other_repo", path = "other_repo", ) `, }) } var expectedOutputLegacy = regexp.MustCompile(`^pkg/internal_source_lib.go: '' bazel-out/[^/]+/bin/pkg/internal_generated_lib.go: '' external/other_repo/pkg/external_source_lib.go: 'other_repo' bazel-out/[^/]+/bin/external/other_repo/pkg/external_generated_lib.go: 'other_repo' $`) func TestCurrentRepository(t *testing.T) { out, err := bazel_testing.BazelOutput("run", "//:main") if err != nil { t.Fatal(err) } if !expectedOutputLegacy.Match(out) { t.Fatalf("got: %q, want: %q", string(out), expectedOutputLegacy.String()) } }