mirror of https://go.googlesource.com/go
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
// 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)
|
|
}
|
|
}
|