cmd/internal/testdir: parse past gofmt'd //go:build lines

Also gofmt a test file to make sure the parser works.

Fixes #62267.

Change-Id: I9b9f12b06bae7df626231000879b5ed7df3cd9ba
Reviewed-on: https://go-review.googlesource.com/c/go/+/522635
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
This commit is contained in:
Bryan C. Mills 2023-08-24 13:16:48 -04:00 committed by Gopher Robot
parent 65c133506f
commit 5374c1aaf5
2 changed files with 14 additions and 8 deletions

View file

@ -477,16 +477,20 @@ func (t test) run() error {
}
src := string(srcBytes)
// Execution recipe stops at first blank line.
action, _, ok := strings.Cut(src, "\n\n")
if !ok {
t.Fatalf("double newline ending execution recipe not found in GOROOT/test/%s", t.goFileName())
// Execution recipe is contained in a comment in
// the first non-empty line that is not a build constraint.
var action string
for actionSrc := src; action == "" && actionSrc != ""; {
var line string
line, actionSrc, _ = strings.Cut(actionSrc, "\n")
if constraint.IsGoBuild(line) || constraint.IsPlusBuild(line) {
continue
}
action = strings.TrimSpace(strings.TrimPrefix(line, "//"))
}
if firstLine, rest, ok := strings.Cut(action, "\n"); ok && strings.Contains(firstLine, "+build") {
// skip first line
action = rest
if action == "" {
t.Fatalf("execution recipe not found in GOROOT/test/%s", t.goFileName())
}
action = strings.TrimPrefix(action, "//")
// Check for build constraints only up to the actual code.
header, _, ok := strings.Cut(src, "\npackage")

View file

@ -1,4 +1,6 @@
//go:build linux && !ppc64 && gc && cgo
// +build linux,!ppc64,gc,cgo
// run
// Copyright 2015 The Go Authors. All rights reserved.