Commit 39208939 authored by Andrew Gerrand's avatar Andrew Gerrand

go/build: better, self-contained tests

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/4576063
parent bee3b035
...@@ -11,7 +11,7 @@ GOFILES=\ ...@@ -11,7 +11,7 @@ GOFILES=\
path.go\ path.go\
syslist.go\ syslist.go\
CLEANFILES+=syslist.go cgotest/_obj CLEANFILES+=syslist.go pkgtest/_obj cmdtest/_obj cgotest/_obj
include ../../../Make.pkg include ../../../Make.pkg
......
...@@ -5,53 +5,64 @@ ...@@ -5,53 +5,64 @@
package build package build
import ( import (
"exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"testing" "testing"
) )
// TODO(adg): test building binaries
var buildPkgs = []string{ var buildPkgs = []string{
"path", "go/build/pkgtest",
"big", "go/build/cmdtest",
"go/build/cgotest", "go/build/cgotest",
} }
const cmdtestOutput = "3"
func TestBuild(t *testing.T) { func TestBuild(t *testing.T) {
for _, pkg := range buildPkgs { for _, pkg := range buildPkgs {
if runtime.GOARCH == "arm" && strings.Contains(pkg, "/cgo") { if runtime.GOARCH == "arm" && strings.Contains(pkg, "/cgo") {
// no cgo for arm, yet. // no cgo for arm, yet.
continue continue
} }
tree := Path[0] // Goroot
testBuild(t, tree, pkg)
}
}
func testBuild(t *testing.T, tree *Tree, pkg string) { tree := Path[0] // Goroot
dir := filepath.Join(tree.SrcDir(), pkg) dir := filepath.Join(tree.SrcDir(), pkg)
info, err := ScanDir(dir, true) info, err := ScanDir(dir, true)
if err != nil { if err != nil {
t.Error(err) t.Error("ScanDir:", err)
return continue
} }
s, err := Build(tree, pkg, info) s, err := Build(tree, pkg, info)
if err != nil { if err != nil {
t.Error(err) t.Error("Build:", err)
return continue
} }
for _, c := range s.Cmd {
t.Log("Run:", c) if err := s.Run(); err != nil {
err = c.Run() t.Error("Run:", err)
continue
}
if pkg == "go/build/cmdtest" {
bin := s.Output[0]
b, err := exec.Command(bin).CombinedOutput()
if err != nil { if err != nil {
t.Error(c, err) t.Errorf("exec: %s: %v", bin, err)
return continue
}
if string(b) != cmdtestOutput {
t.Errorf("cmdtest output: %s want: %s", b, cmdtestOutput)
} }
} }
if err := s.Clean(); err != nil {
t.Errorf("cleaning: %v", err) defer func(s *Script) {
t.Logf("Intermediate: %v", s.Intermediate) if err := s.Nuke(); err != nil {
t.Errorf("nuking: %v", err)
}
}(s)
} }
} }
// Copyright 2011 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 cgotest
/*
char* greeting = "hello, world";
*/
import "C"
var Greeting = C.GoString(C.greeting)
// Copyright 2009 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.
/*
A trivial example of wrapping a C library in Go.
For a more complex example and explanation,
see ../gmp/gmp.go.
*/
package stdio
/*
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
char* greeting = "hello, world";
*/
import "C"
import "unsafe"
type File C.FILE
// TODO(brainman): uncomment once stdout and stderr references are working on Windows.
//var Stdout = (*File)(C.stdout)
//var Stderr = (*File)(C.stderr)
// Test reference to library symbol.
// Stdout and stderr are too special to be a reliable test.
var myerr = C.sys_errlist
func (f *File) WriteString(s string) {
p := C.CString(s)
C.fputs(p, (*C.FILE)(f))
C.free(unsafe.Pointer(p))
f.Flush()
}
func (f *File) Flush() {
C.fflush((*C.FILE)(f))
}
var Greeting = C.GoString(C.greeting)
// Copyright 2011 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
import "go/build/pkgtest"
func main() {
pkgtest.Foo()
print(int(pkgtest.Sqrt(9)))
}
// Copyright 2011 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 pkgtest
func Foo() {}
func Sqrt(x float64) float64
// Copyright 2009 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.
// func Sqrt(x float64) float64
TEXT ·Sqrt(SB),7,$0
FMOVD x+0(FP),F0
FSQRT
FMOVDP F0,r+8(FP)
RET
// Copyright 2009 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.
// func Sqrt(x float64) float64
TEXT ·Sqrt(SB),7,$0
SQRTSD x+0(FP), X0
MOVSD X0, r+8(FP)
RET
// Copyright 2011 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.
// func Sqrt(x float64) float64
TEXT ·Sqrt(SB),7,$0
MOVD x+0(FP),F0
SQRTD F0,F0
MOVD F0,r+8(FP)
RET
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