summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/scriptcmds_test.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-16 19:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-16 19:19:13 +0000
commitccd992355df7192993c666236047820244914598 (patch)
treef00fea65147227b7743083c6148396f74cd66935 /src/cmd/go/scriptcmds_test.go
parentInitial commit. (diff)
downloadgolang-1.21-ccd992355df7192993c666236047820244914598.tar.xz
golang-1.21-ccd992355df7192993c666236047820244914598.zip
Adding upstream version 1.21.8.upstream/1.21.8
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/cmd/go/scriptcmds_test.go')
-rw-r--r--src/cmd/go/scriptcmds_test.go109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/cmd/go/scriptcmds_test.go b/src/cmd/go/scriptcmds_test.go
new file mode 100644
index 0000000..db5e6ca
--- /dev/null
+++ b/src/cmd/go/scriptcmds_test.go
@@ -0,0 +1,109 @@
+// Copyright 2018 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_test
+
+import (
+ "cmd/go/internal/script"
+ "cmd/go/internal/script/scripttest"
+ "cmd/go/internal/work"
+ "errors"
+ "fmt"
+ "os"
+ "os/exec"
+ "strings"
+ "time"
+)
+
+func scriptCommands(interrupt os.Signal, waitDelay time.Duration) map[string]script.Cmd {
+ cmds := scripttest.DefaultCmds()
+
+ // Customize the "exec" interrupt signal and grace period.
+ var cancel func(cmd *exec.Cmd) error
+ if interrupt != nil {
+ cancel = func(cmd *exec.Cmd) error {
+ return cmd.Process.Signal(interrupt)
+ }
+ }
+
+ cmdExec := script.Exec(cancel, waitDelay)
+ cmds["exec"] = cmdExec
+
+ add := func(name string, cmd script.Cmd) {
+ if _, ok := cmds[name]; ok {
+ panic(fmt.Sprintf("command %q is already registered", name))
+ }
+ cmds[name] = cmd
+ }
+
+ add("cc", scriptCC(cmdExec))
+ cmdGo := scriptGo(cancel, waitDelay)
+ add("go", cmdGo)
+ add("stale", scriptStale(cmdGo))
+
+ return cmds
+}
+
+// scriptCC runs the C compiler along with platform specific options.
+func scriptCC(cmdExec script.Cmd) script.Cmd {
+ return script.Command(
+ script.CmdUsage{
+ Summary: "run the platform C compiler",
+ Args: "args...",
+ },
+ func(s *script.State, args ...string) (script.WaitFunc, error) {
+ b := work.NewBuilder(s.Getwd())
+ wait, err := cmdExec.Run(s, append(b.GccCmd(".", ""), args...)...)
+ if err != nil {
+ return wait, err
+ }
+ waitAndClean := func(s *script.State) (stdout, stderr string, err error) {
+ stdout, stderr, err = wait(s)
+ if closeErr := b.Close(); err == nil {
+ err = closeErr
+ }
+ return stdout, stderr, err
+ }
+ return waitAndClean, nil
+ })
+}
+
+// scriptGo runs the go command.
+func scriptGo(cancel func(*exec.Cmd) error, waitDelay time.Duration) script.Cmd {
+ return script.Program(testGo, cancel, waitDelay)
+}
+
+// scriptStale checks that the named build targets are stale.
+func scriptStale(cmdGo script.Cmd) script.Cmd {
+ return script.Command(
+ script.CmdUsage{
+ Summary: "check that build targets are stale",
+ Args: "target...",
+ },
+ func(s *script.State, args ...string) (script.WaitFunc, error) {
+ if len(args) == 0 {
+ return nil, script.ErrUsage
+ }
+ tmpl := "{{if .Error}}{{.ImportPath}}: {{.Error.Err}}" +
+ "{{else}}{{if not .Stale}}{{.ImportPath}} ({{.Target}}) is not stale{{end}}" +
+ "{{end}}"
+
+ wait, err := cmdGo.Run(s, append([]string{"list", "-e", "-f=" + tmpl}, args...)...)
+ if err != nil {
+ return nil, err
+ }
+
+ stdout, stderr, err := wait(s)
+ if len(stderr) != 0 {
+ s.Logf("%s", stderr)
+ }
+ if err != nil {
+ return nil, err
+ }
+ if out := strings.TrimSpace(stdout); out != "" {
+ return nil, errors.New(out)
+ }
+ return nil, nil
+ })
+}