test godog build outside gopath
Этот коммит содержится в:
родитель
b3515b30db
коммит
064e523a0c
1 изменённых файлов: 214 добавлений и 0 удалений
214
builder_test.go
214
builder_test.go
|
@ -1,11 +1,225 @@
|
||||||
package godog
|
package godog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var builderFeatureFile = `Feature: eat godogs
|
||||||
|
In order to be happy
|
||||||
|
As a hungry gopher
|
||||||
|
I need to be able to eat godogs
|
||||||
|
|
||||||
|
Scenario: Eat 5 out of 12
|
||||||
|
Given there are 12 godogs
|
||||||
|
When I eat 5
|
||||||
|
Then there should be 7 remaining
|
||||||
|
`
|
||||||
|
|
||||||
|
var builderTestFile = `package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/DATA-DOG/godog"
|
||||||
|
)
|
||||||
|
|
||||||
|
func thereAreGodogs(available int) error {
|
||||||
|
Godogs = available
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func iEat(num int) error {
|
||||||
|
if Godogs < num {
|
||||||
|
return fmt.Errorf("you cannot eat %d godogs, there are %d available", num, Godogs)
|
||||||
|
}
|
||||||
|
Godogs -= num
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func thereShouldBeRemaining(remaining int) error {
|
||||||
|
if Godogs != remaining {
|
||||||
|
return fmt.Errorf("expected %d godogs to be remaining, but there is %d", remaining, Godogs)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func FeatureContext(s *godog.Suite) {
|
||||||
|
s.Step("^there are (\\d+) godogs$", thereAreGodogs)
|
||||||
|
s.Step("^I eat (\\d+)$", iEat)
|
||||||
|
s.Step("^there should be (\\d+) remaining$", thereShouldBeRemaining)
|
||||||
|
|
||||||
|
s.BeforeScenario(func(interface{}) {
|
||||||
|
Godogs = 0 // clean the state before every scenario
|
||||||
|
})
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
var builderMainCodeFile = `package main
|
||||||
|
|
||||||
|
// Godogs available to eat
|
||||||
|
var Godogs int
|
||||||
|
|
||||||
|
func main() { /* usual main func */ }
|
||||||
|
`
|
||||||
|
|
||||||
|
func buildTestPackage(dir, feat, src, testSrc string) error {
|
||||||
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(feat) > 0 {
|
||||||
|
if err := ioutil.WriteFile(filepath.Join(dir, "godogs.feature"), []byte(feat), 0644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(src) > 0 {
|
||||||
|
if err := ioutil.WriteFile(filepath.Join(dir, "godogs.go"), []byte(src), 0644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(testSrc) > 0 {
|
||||||
|
if err := ioutil.WriteFile(filepath.Join(dir, "godogs_test.go"), []byte(testSrc), 0644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGodogBuildWithSourceNotInGoPath(t *testing.T) {
|
||||||
|
dir := filepath.Join(os.TempDir(), "godogs")
|
||||||
|
err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, 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 {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Chdir(prevDir)
|
||||||
|
|
||||||
|
cmd := exec.Command("godog", "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 TestGodogBuildWithoutSourceNotInGoPath(t *testing.T) {
|
||||||
|
dir := filepath.Join(os.TempDir(), "godogs")
|
||||||
|
err := buildTestPackage(dir, 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 {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Chdir(prevDir)
|
||||||
|
|
||||||
|
cmd := exec.Command("godog", "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) {
|
||||||
|
dir := filepath.Join(os.TempDir(), "godogs")
|
||||||
|
err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, "")
|
||||||
|
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 {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Chdir(prevDir)
|
||||||
|
|
||||||
|
cmd := exec.Command("godog", "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 TestGodogBuildWithVendoredGodog(t *testing.T) {
|
||||||
|
dir := filepath.Join(os.TempDir(), "godogs")
|
||||||
|
err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, 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 {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Chdir(prevDir)
|
||||||
|
|
||||||
|
cmd := exec.Command("godog", "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)
|
||||||
|
}
|
||||||
|
fmt.Println(stdout.String())
|
||||||
|
}
|
||||||
|
|
||||||
func TestBuildTestRunner(t *testing.T) {
|
func TestBuildTestRunner(t *testing.T) {
|
||||||
bin := filepath.Join(os.TempDir(), "godog.test")
|
bin := filepath.Join(os.TempDir(), "godog.test")
|
||||||
if err := Build(bin); err != nil {
|
if err := Build(bin); err != nil {
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче