Files
moxa/interp/build_test.go
Marc Vertes 151699ef9f feature: test subcommand to run test and benchmark functions
This change allows the interpreter to execute tests and benchmarks
functions provided by packages.

The test subcommand is similar to the "go test" command and
all the relevant flags have been kept.

The ability to evaluate a directory or a package has also been added.

A new method Symbol to access exported symbol values of an interpreted
package has been added. This method is used by the test subcommand.

An EvalTest method has been added to evaluate all Go files, including "*_test.go".

The testing packages from the standard library have been added to stdlib used
symbols.
2020-09-14 11:14:04 +02:00

117 lines
2.7 KiB
Go

package interp
import (
"go/build"
"testing"
)
type testBuild struct {
src string
res bool
}
func TestBuildTag(t *testing.T) {
// Assume a specific OS, arch and go version no matter the real underlying system
ctx := build.Context{
GOARCH: "amd64",
GOOS: "linux",
BuildTags: []string{"foo"},
ReleaseTags: []string{"go1.11"},
}
tests := []testBuild{
{"// +build linux", true},
{"// +build windows", false},
{"// +build go1.9", true},
{"// +build go1.11", true},
{"// +build go1.12", false},
{"// +build !go1.10", false},
{"// +build !go1.12", true},
{"// +build ignore", false},
{"// +build linux,amd64", true},
{"// +build linux,i386", false},
{"// +build linux,i386 go1.11", true},
{"// +build linux\n// +build amd64", true},
{"// +build linux\n\n\n// +build amd64", true},
{"// +build linux\n// +build i386", false},
{"// +build foo", true},
{"// +build !foo", false},
{"// +build bar", false},
}
i := New(Options{})
for _, test := range tests {
test := test
src := test.src + "\npackage x"
t.Run(test.src, func(t *testing.T) {
if r, _ := i.buildOk(&ctx, "", src); r != test.res {
t.Errorf("got %v, want %v", r, test.res)
}
})
}
}
func TestBuildFile(t *testing.T) {
// Assume a specific OS, arch and go pattern no matter the real underlying system
ctx := build.Context{
GOARCH: "amd64",
GOOS: "linux",
}
tests := []testBuild{
{"foo/bar_linux_amd64.go", false},
{"foo/bar.go", false},
{"bar.go", false},
{"bar_linux.go", false},
{"bar_maix.go", false},
{"bar_mlinux.go", false},
{"bar_aix_foo.go", false},
{"bar_aix_s390x.go", true},
{"bar_aix_amd64.go", true},
{"bar_linux_arm.go", true},
}
for _, test := range tests {
test := test
t.Run(test.src, func(t *testing.T) {
if r := skipFile(&ctx, test.src, NoTest); r != test.res {
t.Errorf("got %v, want %v", r, test.res)
}
})
}
}
func Test_goMinorVersion(t *testing.T) {
tests := []struct {
desc string
context build.Context
expected int
}{
{
desc: "stable",
context: build.Context{ReleaseTags: []string{
"go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9", "go1.10", "go1.11", "go1.12",
}},
expected: 12,
},
{
desc: "devel/beta/rc",
context: build.Context{ReleaseTags: []string{
"go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9", "go1.10", "go1.11", "go1.12", "go1.13",
}},
expected: 13,
},
}
for _, test := range tests {
test := test
t.Run(test.desc, func(t *testing.T) {
minor := goMinorVersion(&test.context)
if minor != test.expected {
t.Errorf("got %v, want %v", minor, test.expected)
}
})
}
}