summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/help_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/help_test.go')
-rw-r--r--src/cmd/go/help_test.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/cmd/go/help_test.go b/src/cmd/go/help_test.go
new file mode 100644
index 0000000..de3b966
--- /dev/null
+++ b/src/cmd/go/help_test.go
@@ -0,0 +1,63 @@
+// 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 (
+ "flag"
+ "go/format"
+ "internal/diff"
+ "internal/testenv"
+ "os"
+ "strings"
+ "testing"
+)
+
+var fixDocs = flag.Bool("fixdocs", false, "if true, update alldocs.go")
+
+func TestDocsUpToDate(t *testing.T) {
+ testenv.MustHaveGoBuild(t)
+ if !*fixDocs {
+ t.Parallel()
+ }
+
+ // We run 'go help documentation' as a subprocess instead of
+ // calling help.Help directly because it may be sensitive to
+ // init-time configuration
+ cmd := testenv.Command(t, testGo, "help", "documentation")
+ // Unset GO111MODULE so that the 'go get' section matches
+ // the default 'go get' implementation.
+ cmd.Env = append(cmd.Environ(), "GO111MODULE=")
+ cmd.Stderr = new(strings.Builder)
+ out, err := cmd.Output()
+ if err != nil {
+ t.Fatalf("%v: %v\n%s", cmd, err, cmd.Stderr)
+ }
+
+ alldocs, err := format.Source(out)
+ if err != nil {
+ t.Fatalf("format.Source($(%v)): %v", cmd, err)
+ }
+
+ const srcPath = `alldocs.go`
+ old, err := os.ReadFile(srcPath)
+ if err != nil {
+ t.Fatalf("error reading %s: %v", srcPath, err)
+ }
+ diff := diff.Diff(srcPath, old, "go help documentation | gofmt", alldocs)
+ if diff == nil {
+ t.Logf("%s is up to date.", srcPath)
+ return
+ }
+
+ if *fixDocs {
+ if err := os.WriteFile(srcPath, alldocs, 0666); err != nil {
+ t.Fatal(err)
+ }
+ t.Logf("wrote %d bytes to %s", len(alldocs), srcPath)
+ } else {
+ t.Logf("\n%s", diff)
+ t.Errorf("%s is stale. To update, run 'go generate cmd/go'.", srcPath)
+ }
+}