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.
// 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.
// 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.
// 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.
// 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.
// 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.
// 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.
// 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.
// Use of this source code is governed by a BSD-style
......
......@@ -216,6 +216,10 @@ func (t *test) goFileName() string {
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.
func (t *test) run() {
defer close(t.donec)
......@@ -251,7 +255,7 @@ func (t *test) run() {
case "cmpout":
action = "run" // the run case already looks for <dir>/<test>.out files
fallthrough
case "compile", "build", "run", "errorcheck", "runoutput":
case "compile", "compiledir", "build", "run", "errorcheck", "runoutput":
t.action = action
case "skip":
t.action = "skip"
......@@ -301,6 +305,23 @@ func (t *test) run() {
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":
out, err := runcmd("go", "build", "-o", "a.exe", long)
if err != nil {
......
......@@ -9,6 +9,13 @@ compile() {
$G $D/$F.go
}
compiledir() {
for gofile in $D/$F.dir/*.go
do
$G ${gofile} || return 1
done
}
build() {
$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