Commit adc93372 authored by Rémy Oudompheng's avatar Rémy Oudompheng

test: add a compiledir pattern in run.go

The compiledir pattern compiles all files xxx.dir/*.go
in lexicographic order (which is assumed to coincide with
the topological order of dependencies).

R=rsc
CC=golang-dev, remy
https://golang.org/cl/6440048
parent 09f1f5d7
// $G $D/$F.dir/bug0.go && $G $D/$F.dir/bug1.go || echo BUG: fails incorrectly // compiledir
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/bug0.go && $G $D/$F.dir/bug1.go || echo BUG: failed to compile // compiledir
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/p1.go && $G $D/$F.dir/p2.go // compiledir
// Copyright 2009 The Go Authors. All rights reserved. // Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/p1.go && $G $D/$F.dir/p2.go // compiledir
// Copyright 2010 The Go Authors. All rights reserved. // Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go // compiledir
// Copyright 2011 The Go Authors. All rights reserved. // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go // compiledir
// Copyright 2011 The Go Authors. All rights reserved. // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go // compiledir
// Copyright 2012 The Go Authors. All rights reserved. // Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go // compiledir
// Copyright 2011 The Go Authors. All rights reserved. // Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
......
...@@ -216,6 +216,10 @@ func (t *test) goFileName() string { ...@@ -216,6 +216,10 @@ func (t *test) goFileName() string {
return filepath.Join(t.dir, t.gofile) return filepath.Join(t.dir, t.gofile)
} }
func (t *test) goDirName() string {
return filepath.Join(t.dir, strings.Replace(t.gofile, ".go", ".dir", -1))
}
// run runs a test. // run runs a test.
func (t *test) run() { func (t *test) run() {
defer close(t.donec) defer close(t.donec)
...@@ -251,7 +255,7 @@ func (t *test) run() { ...@@ -251,7 +255,7 @@ func (t *test) run() {
case "cmpout": case "cmpout":
action = "run" // the run case already looks for <dir>/<test>.out files action = "run" // the run case already looks for <dir>/<test>.out files
fallthrough fallthrough
case "compile", "build", "run", "errorcheck", "runoutput": case "compile", "compiledir", "build", "run", "errorcheck", "runoutput":
t.action = action t.action = action
case "skip": case "skip":
t.action = "skip" t.action = "skip"
...@@ -301,6 +305,23 @@ func (t *test) run() { ...@@ -301,6 +305,23 @@ func (t *test) run() {
t.err = fmt.Errorf("%s\n%s", err, out) t.err = fmt.Errorf("%s\n%s", err, out)
} }
case "compiledir":
// Compile all files in the directory in lexicographic order.
longdir := filepath.Join(cwd, t.goDirName())
files, dirErr := ioutil.ReadDir(longdir)
if dirErr != nil {
t.err = dirErr
return
}
for _, gofile := range files {
afile := strings.Replace(gofile.Name(), ".go", "."+letter, -1)
out, err := runcmd("go", "tool", gc, "-e", "-o", afile, filepath.Join(longdir, gofile.Name()))
if err != nil {
t.err = fmt.Errorf("%s\n%s", err, out)
break
}
}
case "build": case "build":
out, err := runcmd("go", "build", "-o", "a.exe", long) out, err := runcmd("go", "build", "-o", "a.exe", long)
if err != nil { if err != nil {
......
...@@ -9,6 +9,13 @@ compile() { ...@@ -9,6 +9,13 @@ compile() {
$G $D/$F.go $G $D/$F.go
} }
compiledir() {
for gofile in $D/$F.dir/*.go
do
$G ${gofile} || return 1
done
}
build() { build() {
$G $D/$F.go && $L $F.$A $G $D/$F.go && $L $F.$A
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment