mirror of
https://github.com/golang/go
synced 2024-11-25 00:07:56 -07:00
go/build: better, self-contained tests
R=golang-dev, r CC=golang-dev https://golang.org/cl/4576063
This commit is contained in:
parent
bee3b0358c
commit
39208939c6
@ -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 @@
|
|||||||
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)
|
|
||||||
if err != nil {
|
info, err := ScanDir(dir, true)
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
s, err := Build(tree, pkg, info)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, c := range s.Cmd {
|
|
||||||
t.Log("Run:", c)
|
|
||||||
err = c.Run()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(c, err)
|
t.Error("ScanDir:", err)
|
||||||
return
|
continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if err := s.Clean(); err != nil {
|
s, err := Build(tree, pkg, info)
|
||||||
t.Errorf("cleaning: %v", err)
|
if err != nil {
|
||||||
t.Logf("Intermediate: %v", s.Intermediate)
|
t.Error("Build:", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.Run(); err != nil {
|
||||||
|
t.Error("Run:", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if pkg == "go/build/cmdtest" {
|
||||||
|
bin := s.Output[0]
|
||||||
|
b, err := exec.Command(bin).CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("exec: %s: %v", bin, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if string(b) != cmdtestOutput {
|
||||||
|
t.Errorf("cmdtest output: %s want: %s", b, cmdtestOutput)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func(s *Script) {
|
||||||
|
if err := s.Nuke(); err != nil {
|
||||||
|
t.Errorf("nuking: %v", err)
|
||||||
|
}
|
||||||
|
}(s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
src/pkg/go/build/cgotest/cgotest.go
Normal file
12
src/pkg/go/build/cgotest/cgotest.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// 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)
|
@ -1,45 +0,0 @@
|
|||||||
// 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)
|
|
12
src/pkg/go/build/cmdtest/main.go
Normal file
12
src/pkg/go/build/cmdtest/main.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// 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)))
|
||||||
|
}
|
9
src/pkg/go/build/pkgtest/pkgtest.go
Normal file
9
src/pkg/go/build/pkgtest/pkgtest.go
Normal file
@ -0,0 +1,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
|
10
src/pkg/go/build/pkgtest/sqrt_386.s
Normal file
10
src/pkg/go/build/pkgtest/sqrt_386.s
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// 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
|
9
src/pkg/go/build/pkgtest/sqrt_amd64.s
Normal file
9
src/pkg/go/build/pkgtest/sqrt_amd64.s
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// 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
|
10
src/pkg/go/build/pkgtest/sqrt_arm.s
Normal file
10
src/pkg/go/build/pkgtest/sqrt_arm.s
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// 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
|
Loading…
Reference in New Issue
Block a user