diff --git a/src/cmd/compile/script_test.go b/src/cmd/compile/script_test.go new file mode 100644 index 0000000000..962e4bb754 --- /dev/null +++ b/src/cmd/compile/script_test.go @@ -0,0 +1,62 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "cmd/internal/script/scripttest" + "internal/testenv" + "os" + "runtime" + "testing" +) + +var testCompiler string + +// TestMain allows this test binary to run as the compiler +// itself, which is helpful for running script tests. +// If COMPILE_TEST_EXEC_COMPILE is set, we treat the run +// as a 'go tool compile' invocation, otherwise behave +// as a normal test binary. +func TestMain(m *testing.M) { + // Are we being asked to run as the compiler? + // If so then kick off main. + if os.Getenv("COMPILE_TEST_EXEC_COMPILE") != "" { + main() + os.Exit(0) + } + + if testExe, err := os.Executable(); err == nil { + // on wasm, some phones, we expect an error from os.Executable() + testCompiler = testExe + } + + // Regular run, just execute tests. + os.Exit(m.Run()) +} + +func TestScript(t *testing.T) { + testenv.MustHaveGoBuild(t) + doReplacement := true + switch runtime.GOOS { + case "wasip1", "js": + // wasm doesn't support os.Executable, so we'll skip replacing + // the installed linker with our test binary. + doReplacement = false + } + repls := []scripttest.ToolReplacement{} + if doReplacement { + if testCompiler == "" { + t.Fatalf("testCompiler not set, can't replace") + } + repls = []scripttest.ToolReplacement{ + scripttest.ToolReplacement{ + ToolName: "compile", + ReplacementPath: testCompiler, + EnvVar: "COMPILE_TEST_EXEC_COMPILE=1", + }, + } + } + scripttest.RunToolScriptTest(t, repls, "testdata/script/*.txt") +} diff --git a/src/cmd/compile/testdata/script/script_test_basics.txt b/src/cmd/compile/testdata/script/script_test_basics.txt new file mode 100644 index 0000000000..ecc28951a1 --- /dev/null +++ b/src/cmd/compile/testdata/script/script_test_basics.txt @@ -0,0 +1,24 @@ + +# Test of the linker's script test harness. + +go build +[!cgo] skip +cc -c testdata/mumble.c + +-- go.mod -- +module main + +go 1.20 + +-- main.go -- +package main + +func main() { + println("Hi mom!") +} + +-- testdata/mumble.c -- + +int x; + +