summaryrefslogtreecommitdiff
path: root/src/cmd/go/testflag.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/testflag.go')
-rw-r--r--src/cmd/go/testflag.go35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/cmd/go/testflag.go b/src/cmd/go/testflag.go
index ecf5bf456..b2ca66b09 100644
--- a/src/cmd/go/testflag.go
+++ b/src/cmd/go/testflag.go
@@ -25,11 +25,14 @@ var usageMessage = `Usage of go test:
// These flags can be passed with or without a "test." prefix: -v or -test.v.
-bench="": passes -test.bench to test
- -benchtime=1: passes -test.benchtime to test
+ -benchmem=false: print memory allocation statistics for benchmarks
+ -benchtime=1s: passes -test.benchtime to test
-cpu="": passes -test.cpu to test
-cpuprofile="": passes -test.cpuprofile to test
-memprofile="": passes -test.memprofile to test
-memprofilerate=0: passes -test.memprofilerate to test
+ -blockprofile="": pases -test.blockprofile to test
+ -blockprofilerate=0: passes -test.blockprofilerate to test
-parallel=0: passes -test.parallel to test
-run="": passes -test.run to test
-short=false: passes -test.short to test
@@ -71,14 +74,18 @@ var testFlagDefn = []*testFlagSpec{
{name: "gccgoflags"},
{name: "tags"},
{name: "compiler"},
+ {name: "race", boolVar: &buildRace},
// passed to 6.out, adding a "test." prefix to the name if necessary: -v becomes -test.v.
{name: "bench", passToTest: true},
+ {name: "benchmem", boolVar: new(bool), passToTest: true},
{name: "benchtime", passToTest: true},
{name: "cpu", passToTest: true},
{name: "cpuprofile", passToTest: true},
{name: "memprofile", passToTest: true},
{name: "memprofilerate", passToTest: true},
+ {name: "blockprofile", passToTest: true},
+ {name: "blockprofilerate", passToTest: true},
{name: "parallel", passToTest: true},
{name: "run", passToTest: true},
{name: "short", boolVar: new(bool), passToTest: true},
@@ -117,7 +124,7 @@ func testFlags(args []string) (packageNames, passToTest []string) {
f, value, extraWord := testFlag(args, i)
if f == nil {
// This is a flag we do not know; we must assume
- // that any args we see after this might be flag
+ // that any args we see after this might be flag
// arguments, not package names.
inPkg = false
if packageNames == nil {
@@ -127,18 +134,28 @@ func testFlags(args []string) (packageNames, passToTest []string) {
passToTest = append(passToTest, args[i])
continue
}
+ var err error
switch f.name {
// bool flags.
- case "a", "c", "i", "n", "x", "v", "work":
+ case "a", "c", "i", "n", "x", "v", "work", "race":
setBoolFlag(f.boolVar, value)
case "p":
setIntFlag(&buildP, value)
case "gcflags":
- buildGcflags = strings.Fields(value)
+ buildGcflags, err = splitQuotedFields(value)
+ if err != nil {
+ fatalf("invalid flag argument for -%s: %v", f.name, err)
+ }
case "ldflags":
- buildLdflags = strings.Fields(value)
+ buildLdflags, err = splitQuotedFields(value)
+ if err != nil {
+ fatalf("invalid flag argument for -%s: %v", f.name, err)
+ }
case "gccgoflags":
- buildGccgoflags = strings.Fields(value)
+ buildGccgoflags, err = splitQuotedFields(value)
+ if err != nil {
+ fatalf("invalid flag argument for -%s: %v", f.name, err)
+ }
case "tags":
buildContext.BuildTags = strings.Fields(value)
case "compiler":
@@ -150,6 +167,8 @@ func testFlags(args []string) (packageNames, passToTest []string) {
testBench = true
case "timeout":
testTimeout = value
+ case "blockprofile", "cpuprofile", "memprofile":
+ testProfile = true
}
if extraWord {
i++
@@ -176,9 +195,7 @@ func testFlag(args []string, i int) (f *testFlagSpec, value string, extra bool)
}
name := arg[1:]
// If there's already "test.", drop it for now.
- if strings.HasPrefix(name, "test.") {
- name = name[5:]
- }
+ name = strings.TrimPrefix(name, "test.")
equals := strings.Index(name, "=")
if equals >= 0 {
value = name[equals+1:]