Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions build_defs/go.build_defs
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,7 @@ def go_test(name:str, srcs:list, resources:list=None, data:list|dict=None, deps:
cmds, tools = _go_binary_cmds(name, static=static, definitions=definitions, gcov=cgo, test=True)


test_cmd = f'$TEST {flags} 2>&1 | tee $TMP_DIR/test.results'
test_cmd = f'$TEST {flags} 2>&1 | tee -- "$TMP_DIR/test.results"'
worker_cmd = f'$(worker {worker})' if worker else ""
if worker_cmd:
test_cmd = f'{worker_cmd} && {test_cmd} '
Expand Down Expand Up @@ -1747,7 +1747,12 @@ def _go_binary_cmds(name, static=False, ldflags='', pkg_config='', definitions=N
elif isinstance(definitions, dict):
linkerdefs = [k if v is None else f'{k}={v}' for k, v in sorted(definitions.items())]
if test:
linkerdefs += ["testing.testBinary=1"]
# testing.testBinary and testing.testing are required by the Go test runtime.
# Match go test: testing/testing.go:692 (Go 1.25.3) relies on testing.testing=true when linking tests.
if "testing.testBinary=1" not in linkerdefs:
linkerdefs += ["testing.testBinary=1"]
if "testing.testing=true" not in linkerdefs:
linkerdefs += ["testing.testing=true"]

defs = ' '.join([f'-X "{linkerdef}"' for linkerdef in linkerdefs])

Expand Down
15 changes: 13 additions & 2 deletions test/build_defs/e2e.build_defs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,22 @@ subinclude("///e2e//build_defs:e2e")

_please_repo_e2e_test = please_repo_e2e_test

def please_repo_e2e_test(name, expected_output=None, plz_command, repo, labels=[]):
def please_repo_e2e_test(name, expected_output=None, plz_command, repo, labels=[], expect_stdout_contains=None, expect_stderr_contains=None):
plz_cmd = plz_command.replace("plz ", "plz -o please.PluginRepo:file://$TMP_DIR/$DATA_PLUGIN_REPO -o plugin.go.gotool:$TOOLS_GO -o plugin.go.pleasegotool:$TOOLS_PLEASE_GO ")
# Tee stdout and stderr to separate files while preserving the exit code.
wrapped_plz_command = f"( {plz_cmd} > >(tee stdout.log) 2> >(tee stderr.log >&2) ); STATUS=$?; exit $STATUS"

expect_output_contains = {}
if expect_stdout_contains:
expect_output_contains["stdout.log"] = expect_stdout_contains
if expect_stderr_contains:
expect_output_contains["stderr.log"] = expect_stderr_contains

return _please_repo_e2e_test(
name = name,
expected_output = expected_output,
plz_command = plz_command.replace("plz ", "plz -o please.PluginRepo:file://$TMP_DIR/$DATA_PLUGIN_REPO -o plugin.go.gotool:$TOOLS_GO -o plugin.go.pleasegotool:$TOOLS_PLEASE_GO "),
expect_output_contains = expect_output_contains if expect_output_contains else None,
plz_command = wrapped_plz_command,
repo = repo,
data = {
"PLUGIN_REPO": ["//test:export"],
Expand Down
8 changes: 8 additions & 0 deletions test/testing_definition/BUILD
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
subinclude("//build_defs:go")
subinclude("//test/build_defs:e2e")

go_test(
name = "testing_definition_test",
Expand All @@ -7,3 +8,10 @@ go_test(
"///third_party/go/github.com_stretchr_testify//assert",
],
)

please_repo_e2e_test(
name = "testing_definition_integration_test",
plz_command = "plz test --show_all_output //sample:testing_flag_test -- -test.v",
repo = "test_repo",
expect_stdout_contains = "testing.Testing() = true",
)
7 changes: 7 additions & 0 deletions test/testing_definition/test_repo/.plzconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[Parse]
BuildFileName = BUILD_FILE
PreloadSubincludes = ///go//build_defs:go

[Plugin "go"]
Target = //plugins:go
Stdlib = //third_party/go:std
4 changes: 4 additions & 0 deletions test/testing_definition/test_repo/plugins/BUILD_FILE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
plugin_repo(
name = "go",
revision = "master",
)
4 changes: 4 additions & 0 deletions test/testing_definition/test_repo/sample/BUILD_FILE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
go_test(
name = "testing_flag_test",
srcs = ["testing_flag_test.go"],
)
13 changes: 13 additions & 0 deletions test/testing_definition/test_repo/sample/testing_flag_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package sample

import (
"fmt"
"testing"
)

func TestTestingFlag(t *testing.T) {
fmt.Printf("testing.Testing() = %v\n", testing.Testing())
if !testing.Testing() {
t.Fatalf("expected testing.Testing() to be true")
}
}
3 changes: 3 additions & 0 deletions test/testing_definition/test_repo/third_party/go/BUILD_FILE
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
go_stdlib(
name = "std",
)