forked from toolshed/abra
build: go 1.24
We were running behind and there were quite some deprecations to update. This was mostly in the upstream copy/pasta package but seems quite minimal.
This commit is contained in:
51
vendor/gotest.tools/v3/internal/source/bazel.go
vendored
Normal file
51
vendor/gotest.tools/v3/internal/source/bazel.go
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
package source
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// These Bazel env vars are documented here:
|
||||
// https://bazel.build/reference/test-encyclopedia
|
||||
|
||||
// Signifies test executable is being driven by `bazel test`.
|
||||
//
|
||||
// Due to Bazel's compilation and sandboxing strategy,
|
||||
// some care is required to handle resolving the original *.go source file.
|
||||
var inBazelTest = os.Getenv("BAZEL_TEST") == "1"
|
||||
|
||||
// The name of the target being tested (ex: //some_package:some_package_test)
|
||||
var bazelTestTarget = os.Getenv("TEST_TARGET")
|
||||
|
||||
// Absolute path to the base of the runfiles tree
|
||||
var bazelTestSrcdir = os.Getenv("TEST_SRCDIR")
|
||||
|
||||
// The local repository's workspace name (ex: __main__)
|
||||
var bazelTestWorkspace = os.Getenv("TEST_WORKSPACE")
|
||||
|
||||
func bazelSourcePath(filename string) (string, error) {
|
||||
// Use the env vars to resolve the test source files,
|
||||
// which must be provided as test data in the respective go_test target.
|
||||
filename = filepath.Join(bazelTestSrcdir, bazelTestWorkspace, filename)
|
||||
|
||||
_, err := os.Stat(filename)
|
||||
if os.IsNotExist(err) {
|
||||
return "", fmt.Errorf(bazelMissingSourceMsg, filename, bazelTestTarget)
|
||||
}
|
||||
return filename, nil
|
||||
}
|
||||
|
||||
var bazelMissingSourceMsg = `
|
||||
the test source file does not exist: %s
|
||||
It appears that you are running this test under Bazel (target: %s).
|
||||
Check that your test source files are added as test data in your go_test targets.
|
||||
|
||||
Example:
|
||||
go_test(
|
||||
name = "your_package_test",
|
||||
srcs = ["your_test.go"],
|
||||
deps = ["@tools_gotest_v3//assert"],
|
||||
data = glob(["*_test.go"])
|
||||
)"
|
||||
`
|
23
vendor/gotest.tools/v3/internal/source/source.go
vendored
23
vendor/gotest.tools/v3/internal/source/source.go
vendored
@ -10,6 +10,7 @@ import (
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
@ -35,6 +36,19 @@ func CallExprArgs(stackIndex int) ([]ast.Expr, error) {
|
||||
}
|
||||
debug("call stack position: %s:%d", filename, line)
|
||||
|
||||
// Normally, `go` will compile programs with absolute paths in
|
||||
// the debug metadata. However, in the name of reproducibility,
|
||||
// Bazel uses a compilation strategy that results in relative paths
|
||||
// (otherwise, since Bazel uses a random tmp dir for compile and sandboxing,
|
||||
// the resulting binaries would change across compiles/test runs).
|
||||
if inBazelTest && !filepath.IsAbs(filename) {
|
||||
var err error
|
||||
filename, err = bazelSourcePath(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
fileset := token.NewFileSet()
|
||||
astFile, err := parser.ParseFile(fileset, filename, nil, parser.AllErrors)
|
||||
if err != nil {
|
||||
@ -58,7 +72,7 @@ func getNodeAtLine(fileset *token.FileSet, astFile ast.Node, lineNum int) (ast.N
|
||||
return node, err
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
return nil, errors.New("failed to find expression")
|
||||
}
|
||||
|
||||
func scanToLine(fileset *token.FileSet, node ast.Node, lineNum int) ast.Node {
|
||||
@ -78,11 +92,8 @@ func scanToLine(fileset *token.FileSet, node ast.Node, lineNum int) ast.Node {
|
||||
|
||||
func getCallExprArgs(fileset *token.FileSet, astFile ast.Node, line int) ([]ast.Expr, error) {
|
||||
node, err := getNodeAtLine(fileset, astFile, line)
|
||||
switch {
|
||||
case err != nil:
|
||||
if err != nil {
|
||||
return nil, err
|
||||
case node == nil:
|
||||
return nil, fmt.Errorf("failed to find an expression")
|
||||
}
|
||||
|
||||
debug("found node: %s", debugFormatNode{node})
|
||||
@ -90,7 +101,7 @@ func getCallExprArgs(fileset *token.FileSet, astFile ast.Node, line int) ([]ast.
|
||||
visitor := &callExprVisitor{}
|
||||
ast.Walk(visitor, node)
|
||||
if visitor.expr == nil {
|
||||
return nil, errors.New("failed to find call expression")
|
||||
return nil, errors.New("failed to find an expression")
|
||||
}
|
||||
debug("callExpr: %s", debugFormatNode{visitor.expr})
|
||||
return visitor.expr.Args, nil
|
||||
|
Reference in New Issue
Block a user