Made the builder tests run in parallel
Этот коммит содержится в:
родитель
84e064bd56
коммит
55d43e1b59
4 изменённых файлов: 196 добавлений и 381 удалений
|
@ -4,57 +4,38 @@
|
||||||
package godog_test
|
package godog_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGodogBuildWithVendoredGodogAndMod(t *testing.T) {
|
func testWithVendoredGodogAndMod(t *testing.T) {
|
||||||
gopath := filepath.Join(os.TempDir(), "_gpc")
|
builderTC := builderTestCase{}
|
||||||
dir := filepath.Join(gopath, "src", "godogs")
|
|
||||||
err := buildTestPackage(dir, map[string]string{
|
gopath := filepath.Join(os.TempDir(), t.Name(), "_gpc")
|
||||||
|
defer os.RemoveAll(gopath)
|
||||||
|
|
||||||
|
builderTC.dir = filepath.Join(gopath, "src", "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"godogs_test.go": builderTestFile,
|
"godogs_test.go": builderTestFile,
|
||||||
"go.mod": builderModFile,
|
"go.mod": builderModFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(gopath)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(gopath)
|
|
||||||
|
|
||||||
pkg := filepath.Join(dir, "vendor", "github.com", "cucumber")
|
|
||||||
if err := os.MkdirAll(pkg, 0755); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
pkg := filepath.Join(builderTC.dir, "vendor", "github.com", "cucumber")
|
||||||
if err != nil {
|
err := os.MkdirAll(pkg, 0755)
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
|
wd, err := os.Getwd()
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
// symlink godog package
|
// symlink godog package
|
||||||
if err := os.Symlink(prevDir, filepath.Join(pkg, "godog")); err != nil {
|
err = os.Symlink(wd, filepath.Join(pkg, "godog"))
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.testCmdEnv = append(envVarsWithoutGopath(), "GOPATH="+gopath)
|
||||||
t.Fatal(err)
|
builderTC.run(t)
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = append(envVarsWithoutGopath(), "GOPATH="+gopath)
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,52 +3,29 @@
|
||||||
package godog_test
|
package godog_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGodogBuildWithVendoredGodogAndMod(t *testing.T) {
|
func testWithVendoredGodogAndMod(t *testing.T) {
|
||||||
gopath := filepath.Join(os.TempDir(), "_gpc")
|
builderTC := builderTestCase{}
|
||||||
dir := filepath.Join(gopath, "src", "godogs")
|
|
||||||
err := buildTestPackage(dir, map[string]string{
|
gopath := filepath.Join(os.TempDir(), t.Name(), "_gpc")
|
||||||
|
defer os.RemoveAll(gopath)
|
||||||
|
|
||||||
|
builderTC.dir = filepath.Join(gopath, "src", "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"godogs_test.go": builderTestFile,
|
"godogs_test.go": builderTestFile,
|
||||||
"go.mod": builderModFile,
|
"go.mod": builderModFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(gopath)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(gopath)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = exec.Command("go", "mod", "vendor").Run(); err != nil {
|
builderTC.goModCmds = make([]*exec.Cmd, 1)
|
||||||
t.Fatal(err)
|
builderTC.goModCmds[0] = exec.Command("go", "mod", "vendor")
|
||||||
}
|
builderTC.testCmdEnv = append(envVarsWithoutGopath(), "GOPATH="+gopath)
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.run(t)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = append(envVarsWithoutGopath(), "GOPATH="+gopath)
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package godog_test
|
package godog_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
@ -11,176 +10,73 @@ import (
|
||||||
"github.com/cucumber/godog"
|
"github.com/cucumber/godog"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGodogBuildWithModuleOutsideGopathAndHavingOnlyFeature(t *testing.T) {
|
func testOutsideGopathAndHavingOnlyFeature(t *testing.T) {
|
||||||
dir := filepath.Join(os.TempDir(), "godogs")
|
builderTC := builderTestCase{}
|
||||||
err := buildTestPackage(dir, map[string]string{
|
|
||||||
|
builderTC.dir = filepath.Join(os.TempDir(), t.Name(), "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(dir)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.goModCmds = make([]*exec.Cmd, 2)
|
||||||
t.Fatal(err)
|
builderTC.goModCmds[0] = exec.Command("go", "mod", "init", "godogs")
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
if out, err := exec.Command("go", "mod", "init", "godogs").CombinedOutput(); err != nil {
|
godogDependency := fmt.Sprintf("github.com/cucumber/godog@%s", godog.Version)
|
||||||
t.Log(string(out))
|
builderTC.goModCmds[1] = exec.Command("go", "mod", "edit", "-require", godogDependency)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if out, err := exec.Command("go", "mod", "edit", "-require", fmt.Sprintf("github.com/cucumber/godog@%s", godog.Version)).CombinedOutput(); err != nil {
|
builderTC.run(t)
|
||||||
t.Log(string(out))
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithModuleOutsideGopath(t *testing.T) {
|
func testOutsideGopath(t *testing.T) {
|
||||||
dir := filepath.Join(os.TempDir(), "godogs")
|
builderTC := builderTestCase{}
|
||||||
err := buildTestPackage(dir, map[string]string{
|
|
||||||
|
builderTC.dir = filepath.Join(os.TempDir(), t.Name(), "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"godogs_test.go": builderTestFile,
|
"godogs_test.go": builderTestFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(dir)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.goModCmds = make([]*exec.Cmd, 1)
|
||||||
t.Fatal(err)
|
builderTC.goModCmds[0] = exec.Command("go", "mod", "init", "godogs")
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
if out, err := exec.Command("go", "mod", "init", "godogs").CombinedOutput(); err != nil {
|
builderTC.run(t)
|
||||||
t.Log(string(out))
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithModuleWithXTestOutsideGopath(t *testing.T) {
|
func testOutsideGopathWithXTest(t *testing.T) {
|
||||||
dir := filepath.Join(os.TempDir(), "godogs")
|
builderTC := builderTestCase{}
|
||||||
err := buildTestPackage(dir, map[string]string{
|
|
||||||
|
builderTC.dir = filepath.Join(os.TempDir(), t.Name(), "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"godogs_test.go": builderXTestFile,
|
"godogs_test.go": builderXTestFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(dir)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.goModCmds = make([]*exec.Cmd, 1)
|
||||||
t.Fatal(err)
|
builderTC.goModCmds[0] = exec.Command("go", "mod", "init", "godogs")
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
if out, err := exec.Command("go", "mod", "init", "godogs").CombinedOutput(); err != nil {
|
builderTC.run(t)
|
||||||
t.Log(string(out))
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithModuleInsideGopath(t *testing.T) {
|
func testInsideGopath(t *testing.T) {
|
||||||
gopath := filepath.Join(os.TempDir(), "_gp")
|
builderTC := builderTestCase{}
|
||||||
dir := filepath.Join(gopath, "src", "godogs")
|
|
||||||
err := buildTestPackage(dir, map[string]string{
|
gopath := filepath.Join(os.TempDir(), t.Name(), "_gp")
|
||||||
|
defer os.RemoveAll(gopath)
|
||||||
|
|
||||||
|
builderTC.dir = filepath.Join(gopath, "src", "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"godogs_test.go": builderTestFile,
|
"godogs_test.go": builderTestFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(gopath)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(gopath)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.goModCmds = make([]*exec.Cmd, 1)
|
||||||
t.Fatal(err)
|
builderTC.goModCmds[0] = exec.Command("go", "mod", "init", "godogs")
|
||||||
}
|
builderTC.goModCmds[0].Env = os.Environ()
|
||||||
defer os.Chdir(prevDir)
|
builderTC.goModCmds[0].Env = append(builderTC.goModCmds[0].Env, "GOPATH="+gopath)
|
||||||
|
builderTC.goModCmds[0].Env = append(builderTC.goModCmds[0].Env, "GO111MODULE=on")
|
||||||
|
|
||||||
c := exec.Command("go", "mod", "init", "godogs")
|
builderTC.run(t)
|
||||||
c.Env = os.Environ()
|
|
||||||
c.Env = append(c.Env, "GOPATH="+gopath)
|
|
||||||
c.Env = append(c.Env, "GO111MODULE=on")
|
|
||||||
if out, err := c.CombinedOutput(); err != nil {
|
|
||||||
t.Log(string(out))
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
cmd.Env = append(cmd.Env, "GOPATH="+gopath)
|
|
||||||
cmd.Env = append(cmd.Env, "GO111MODULE=on")
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
287
builder_test.go
287
builder_test.go
|
@ -11,8 +11,27 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/cucumber/godog"
|
"github.com/cucumber/godog"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func Test_GodogBuild(t *testing.T) {
|
||||||
|
t.Run("WithSourceNotInGoPath", testWithSourceNotInGoPath)
|
||||||
|
t.Run("WithoutSourceNotInGoPath", testWithoutSourceNotInGoPath)
|
||||||
|
t.Run("WithoutTestSourceNotInGoPath", testWithoutTestSourceNotInGoPath)
|
||||||
|
t.Run("WithinGopath", testWithinGopath)
|
||||||
|
t.Run("WithVendoredGodogWithoutModule", testWithVendoredGodogWithoutModule)
|
||||||
|
t.Run("WithVendoredGodogAndMod", testWithVendoredGodogAndMod)
|
||||||
|
|
||||||
|
t.Run("WithModule", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
t.Run("OutsideGopathAndHavingOnlyFeature", testOutsideGopathAndHavingOnlyFeature)
|
||||||
|
t.Run("OutsideGopath", testOutsideGopath)
|
||||||
|
t.Run("OutsideGopathWithXTest", testOutsideGopathWithXTest)
|
||||||
|
t.Run("InsideGopath", testInsideGopath)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
var builderFeatureFile = `Feature: eat godogs
|
var builderFeatureFile = `Feature: eat godogs
|
||||||
In order to be happy
|
In order to be happy
|
||||||
As a hungry gopher
|
As a hungry gopher
|
||||||
|
@ -131,232 +150,174 @@ func buildTestPackage(dir string, files map[string]string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildTestCommand(t *testing.T, args ...string) *exec.Cmd {
|
func buildTestCommand(t *testing.T, wd, featureFile string) *exec.Cmd {
|
||||||
bin, err := filepath.Abs("godog.test")
|
testBin := filepath.Join(wd, "godog.test")
|
||||||
if err != nil {
|
testBin, err := filepath.Abs(testBin)
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
if build.Default.GOOS == "windows" {
|
if build.Default.GOOS == "windows" {
|
||||||
bin += ".exe"
|
testBin += ".exe"
|
||||||
}
|
|
||||||
if err = godog.Build(bin); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return exec.Command(bin, args...)
|
err = godog.Build(testBin)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
featureFilePath := filepath.Join(wd, featureFile)
|
||||||
|
return exec.Command(testBin, featureFilePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func envVarsWithoutGopath() []string {
|
func envVarsWithoutGopath() []string {
|
||||||
var env []string
|
var env []string
|
||||||
|
|
||||||
for _, def := range os.Environ() {
|
for _, def := range os.Environ() {
|
||||||
if strings.Index(def, "GOPATH=") == 0 {
|
if strings.Index(def, "GOPATH=") == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
env = append(env, def)
|
env = append(env, def)
|
||||||
}
|
}
|
||||||
|
|
||||||
return env
|
return env
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithSourceNotInGoPath(t *testing.T) {
|
func testWithSourceNotInGoPath(t *testing.T) {
|
||||||
dir := filepath.Join(os.TempDir(), "godogs")
|
dir := filepath.Join(os.TempDir(), t.Name(), "godogs")
|
||||||
err := buildTestPackage(dir, map[string]string{
|
files := map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"godogs_test.go": builderTestFile,
|
"godogs_test.go": builderTestFile,
|
||||||
"go.mod": builderModFile,
|
"go.mod": builderModFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(dir)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err := buildTestPackage(dir, files)
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
prevDir, err := os.Getwd()
|
||||||
if err != nil {
|
require.Nil(t, err)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
err = os.Chdir(dir)
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
defer os.Chdir(prevDir)
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
testCmd := buildTestCommand(t, "", "godogs.feature")
|
||||||
|
testCmd.Env = os.Environ()
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
var stdout, stderr bytes.Buffer
|
||||||
cmd.Stdout = &stdout
|
testCmd.Stdout = &stdout
|
||||||
cmd.Stderr = &stderr
|
testCmd.Stderr = &stderr
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
err = testCmd.Run()
|
||||||
t.Log(stdout.String())
|
require.Nil(t, err, "stdout:\n%s\nstderr:\n%s", stdout.String(), stderr.String())
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithoutSourceNotInGoPath(t *testing.T) {
|
func testWithoutSourceNotInGoPath(t *testing.T) {
|
||||||
dir := filepath.Join(os.TempDir(), "godogs")
|
builderTC := builderTestCase{}
|
||||||
err := buildTestPackage(dir, map[string]string{
|
|
||||||
|
builderTC.dir = filepath.Join(os.TempDir(), t.Name(), "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"go.mod": builderModFile,
|
"go.mod": builderModFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(dir)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.run(t)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithoutTestSourceNotInGoPath(t *testing.T) {
|
func testWithoutTestSourceNotInGoPath(t *testing.T) {
|
||||||
dir := filepath.Join(os.TempDir(), "godogs")
|
builderTC := builderTestCase{}
|
||||||
err := buildTestPackage(dir, map[string]string{
|
|
||||||
|
builderTC.dir = filepath.Join(os.TempDir(), t.Name(), "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
"godogs.feature": builderFeatureFile,
|
"godogs.feature": builderFeatureFile,
|
||||||
"godogs.go": builderMainCodeFile,
|
"godogs.go": builderMainCodeFile,
|
||||||
"go.mod": builderModFile,
|
"go.mod": builderModFile,
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(dir)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.run(t)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithinGopath(t *testing.T) {
|
func testWithinGopath(t *testing.T) {
|
||||||
gopath := filepath.Join(os.TempDir(), "_gp")
|
builderTC := builderTestCase{}
|
||||||
dir := filepath.Join(gopath, "src", "godogs")
|
|
||||||
err := buildTestPackage(dir, map[string]string{
|
gopath := filepath.Join(os.TempDir(), t.Name(), "_gp")
|
||||||
"godogs.feature": builderFeatureFile,
|
|
||||||
"godogs.go": builderMainCodeFile,
|
|
||||||
"godogs_test.go": builderTestFile,
|
|
||||||
"go.mod": builderModFile,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(gopath)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(gopath)
|
defer os.RemoveAll(gopath)
|
||||||
|
|
||||||
|
builderTC.dir = filepath.Join(gopath, "src", "godogs")
|
||||||
|
builderTC.files = map[string]string{
|
||||||
|
"godogs.feature": builderFeatureFile,
|
||||||
|
"godogs.go": builderMainCodeFile,
|
||||||
|
"godogs_test.go": builderTestFile,
|
||||||
|
"go.mod": builderModFile,
|
||||||
|
}
|
||||||
|
|
||||||
pkg := filepath.Join(gopath, "src", "github.com", "cucumber")
|
pkg := filepath.Join(gopath, "src", "github.com", "cucumber")
|
||||||
if err := os.MkdirAll(pkg, 0755); err != nil {
|
err := os.MkdirAll(pkg, 0755)
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
wd, err := os.Getwd()
|
||||||
if err != nil {
|
require.Nil(t, err)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// symlink godog package
|
// symlink godog package
|
||||||
if err := os.Symlink(prevDir, filepath.Join(pkg, "godog")); err != nil {
|
err = os.Symlink(wd, filepath.Join(pkg, "godog"))
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
builderTC.testCmdEnv = []string{"GOPATH=" + gopath}
|
||||||
t.Fatal(err)
|
builderTC.run(t)
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
cmd.Stderr = &stderr
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
cmd.Env = append(cmd.Env, "GOPATH="+gopath)
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
t.Log(stdout.String())
|
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGodogBuildWithVendoredGodogWithoutModule(t *testing.T) {
|
func testWithVendoredGodogWithoutModule(t *testing.T) {
|
||||||
gopath := filepath.Join(os.TempDir(), "_gp")
|
builderTC := builderTestCase{}
|
||||||
dir := filepath.Join(gopath, "src", "godogs")
|
|
||||||
err := buildTestPackage(dir, map[string]string{
|
gopath := filepath.Join(os.TempDir(), t.Name(), "_gp")
|
||||||
"godogs.feature": builderFeatureFile,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
os.RemoveAll(gopath)
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(gopath)
|
defer os.RemoveAll(gopath)
|
||||||
|
|
||||||
pkg := filepath.Join(dir, "vendor", "github.com", "cucumber")
|
builderTC.dir = filepath.Join(gopath, "src", "godogs")
|
||||||
if err := os.MkdirAll(pkg, 0755); err != nil {
|
builderTC.files = map[string]string{
|
||||||
t.Fatal(err)
|
"godogs.feature": builderFeatureFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
prevDir, err := os.Getwd()
|
pkg := filepath.Join(builderTC.dir, "vendor", "github.com", "cucumber")
|
||||||
if err != nil {
|
err := os.MkdirAll(pkg, 0755)
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
}
|
|
||||||
|
wd, err := os.Getwd()
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
// symlink godog package
|
// symlink godog package
|
||||||
if err := os.Symlink(prevDir, filepath.Join(pkg, "godog")); err != nil {
|
err = os.Symlink(wd, filepath.Join(pkg, "godog"))
|
||||||
t.Fatal(err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
builderTC.testCmdEnv = append(envVarsWithoutGopath(), "GOPATH="+gopath)
|
||||||
|
builderTC.run(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
type builderTestCase struct {
|
||||||
|
dir string
|
||||||
|
files map[string]string
|
||||||
|
goModCmds []*exec.Cmd
|
||||||
|
testCmdEnv []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bt builderTestCase) run(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
err := buildTestPackage(bt.dir, bt.files)
|
||||||
|
defer os.RemoveAll(bt.dir)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
for _, c := range bt.goModCmds {
|
||||||
|
c.Dir = bt.dir
|
||||||
|
out, err := c.CombinedOutput()
|
||||||
|
require.Nil(t, err, "%s", string(out))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chdir(dir); err != nil {
|
testCmd := buildTestCommand(t, bt.dir, "godogs.feature")
|
||||||
t.Fatal(err)
|
testCmd.Env = append(os.Environ(), bt.testCmdEnv...)
|
||||||
}
|
|
||||||
defer os.Chdir(prevDir)
|
|
||||||
|
|
||||||
cmd := buildTestCommand(t, "godogs.feature")
|
|
||||||
|
|
||||||
var stdout, stderr bytes.Buffer
|
var stdout, stderr bytes.Buffer
|
||||||
cmd.Stdout = &stdout
|
testCmd.Stdout = &stdout
|
||||||
cmd.Stderr = &stderr
|
testCmd.Stderr = &stderr
|
||||||
cmd.Env = append(envVarsWithoutGopath(), "GOPATH="+gopath)
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
err = testCmd.Run()
|
||||||
t.Log(stdout.String())
|
require.Nil(t, err, "stdout:\n%s\nstderr:\n%s", stdout.String(), stderr.String())
|
||||||
t.Log(stderr.String())
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче