396 lines
15 KiB
Go
396 lines
15 KiB
Go
|
package integration_test
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"strings"
|
||
|
|
||
|
. "github.com/onsi/ginkgo"
|
||
|
"github.com/onsi/ginkgo/types"
|
||
|
. "github.com/onsi/gomega"
|
||
|
"github.com/onsi/gomega/gexec"
|
||
|
)
|
||
|
|
||
|
var _ = Describe("Subcommand", func() {
|
||
|
Describe("ginkgo bootstrap", func() {
|
||
|
var pkgPath string
|
||
|
BeforeEach(func() {
|
||
|
pkgPath = tmpPath("foo")
|
||
|
os.Mkdir(pkgPath, 0777)
|
||
|
})
|
||
|
|
||
|
It("should generate a bootstrap file, as long as one does not exist", func() {
|
||
|
session := startGinkgo(pkgPath, "bootstrap")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_suite_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_test"))
|
||
|
Ω(content).Should(ContainSubstring("func TestFoo(t *testing.T) {"))
|
||
|
Ω(content).Should(ContainSubstring("RegisterFailHandler"))
|
||
|
Ω(content).Should(ContainSubstring("RunSpecs"))
|
||
|
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`))
|
||
|
|
||
|
session = startGinkgo(pkgPath, "bootstrap")
|
||
|
Eventually(session).Should(gexec.Exit(1))
|
||
|
output = session.Out.Contents()
|
||
|
Ω(output).Should(ContainSubstring("foo_suite_test.go already exists"))
|
||
|
})
|
||
|
|
||
|
It("should import nodot declarations when told to", func() {
|
||
|
session := startGinkgo(pkgPath, "bootstrap", "--nodot")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_suite_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_test"))
|
||
|
Ω(content).Should(ContainSubstring("func TestFoo(t *testing.T) {"))
|
||
|
Ω(content).Should(ContainSubstring("RegisterFailHandler"))
|
||
|
Ω(content).Should(ContainSubstring("RunSpecs"))
|
||
|
|
||
|
Ω(content).Should(ContainSubstring("var It = ginkgo.It"))
|
||
|
Ω(content).Should(ContainSubstring("var Ω = gomega.Ω"))
|
||
|
|
||
|
Ω(content).Should(ContainSubstring("\t" + `"github.com/onsi/ginkgo"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `"github.com/onsi/gomega"`))
|
||
|
})
|
||
|
|
||
|
It("should generate an agouti bootstrap file when told to", func() {
|
||
|
session := startGinkgo(pkgPath, "bootstrap", "--agouti")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_suite_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_test"))
|
||
|
Ω(content).Should(ContainSubstring("func TestFoo(t *testing.T) {"))
|
||
|
Ω(content).Should(ContainSubstring("RegisterFailHandler"))
|
||
|
Ω(content).Should(ContainSubstring("RunSpecs"))
|
||
|
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `"github.com/sclevine/agouti"`))
|
||
|
})
|
||
|
|
||
|
It("should generate a bootstrap file using a template when told to", func() {
|
||
|
templateFile := filepath.Join(pkgPath, ".bootstrap")
|
||
|
ioutil.WriteFile(templateFile, []byte(`package {{.Package}}
|
||
|
|
||
|
import (
|
||
|
{{.GinkgoImport}}
|
||
|
{{.GomegaImport}}
|
||
|
|
||
|
"testing"
|
||
|
"binary"
|
||
|
)
|
||
|
|
||
|
func Test{{.FormattedName}}(t *testing.T) {
|
||
|
// This is a {{.Package}} test
|
||
|
}`), 0666)
|
||
|
session := startGinkgo(pkgPath, "bootstrap", "--template", templateFile)
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_suite_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_test"))
|
||
|
Ω(content).Should(ContainSubstring(`. "github.com/onsi/ginkgo"`))
|
||
|
Ω(content).Should(ContainSubstring(`. "github.com/onsi/gomega"`))
|
||
|
Ω(content).Should(ContainSubstring(`"binary"`))
|
||
|
Ω(content).Should(ContainSubstring("// This is a foo_test test"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Describe("nodot", func() {
|
||
|
It("should update the declarations in the bootstrap file", func() {
|
||
|
pkgPath := tmpPath("foo")
|
||
|
os.Mkdir(pkgPath, 0777)
|
||
|
|
||
|
session := startGinkgo(pkgPath, "bootstrap", "--nodot")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
byteContent, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
|
||
|
content := string(byteContent)
|
||
|
content = strings.Replace(content, "var It =", "var MyIt =", -1)
|
||
|
content = strings.Replace(content, "var Ω = gomega.Ω\n", "", -1)
|
||
|
|
||
|
err = ioutil.WriteFile(filepath.Join(pkgPath, "foo_suite_test.go"), []byte(content), os.ModePerm)
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
|
||
|
session = startGinkgo(pkgPath, "nodot")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
byteContent, err = ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
|
||
|
Ω(byteContent).Should(ContainSubstring("var MyIt = ginkgo.It"))
|
||
|
Ω(byteContent).ShouldNot(ContainSubstring("var It = ginkgo.It"))
|
||
|
Ω(byteContent).Should(ContainSubstring("var Ω = gomega.Ω"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Describe("ginkgo generate", func() {
|
||
|
var pkgPath string
|
||
|
|
||
|
BeforeEach(func() {
|
||
|
pkgPath = tmpPath("foo_bar")
|
||
|
os.Mkdir(pkgPath, 0777)
|
||
|
})
|
||
|
|
||
|
Context("with no arguments", func() {
|
||
|
It("should generate a test file named after the package", func() {
|
||
|
session := startGinkgo(pkgPath, "generate")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_bar_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_bar_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("FooBar", func() {`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`))
|
||
|
|
||
|
session = startGinkgo(pkgPath, "generate")
|
||
|
Eventually(session).Should(gexec.Exit(1))
|
||
|
output = session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_bar_test.go already exists"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with an argument of the form: foo", func() {
|
||
|
It("should generate a test file named after the argument", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "baz_buzz")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("baz_buzz_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with an argument of the form: foo.go", func() {
|
||
|
It("should generate a test file named after the argument", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "baz_buzz.go")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("baz_buzz_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`))
|
||
|
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with an argument of the form: foo_test", func() {
|
||
|
It("should generate a test file named after the argument", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "baz_buzz_test")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("baz_buzz_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with an argument of the form: foo_test.go", func() {
|
||
|
It("should generate a test file named after the argument", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "baz_buzz_test.go")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("baz_buzz_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with multiple arguments", func() {
|
||
|
It("should generate a test file named after the argument", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "baz", "buzz")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("baz_test.go"))
|
||
|
Ω(output).Should(ContainSubstring("buzz_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("Baz", func() {`))
|
||
|
|
||
|
content, err = ioutil.ReadFile(filepath.Join(pkgPath, "buzz_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring(`var _ = Describe("Buzz", func() {`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with nodot", func() {
|
||
|
It("should not import ginkgo or gomega", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "--nodot")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_bar_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_bar_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).ShouldNot(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`))
|
||
|
Ω(content).ShouldNot(ContainSubstring("\t" + `. "github.com/onsi/gomega"`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with agouti", func() {
|
||
|
It("should generate an agouti test file", func() {
|
||
|
session := startGinkgo(pkgPath, "generate", "--agouti")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("foo_bar_test.go"))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_bar_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package foo_bar_test"))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `. "github.com/sclevine/agouti/matchers"`))
|
||
|
Ω(content).Should(ContainSubstring("\t" + `"github.com/sclevine/agouti"`))
|
||
|
Ω(content).Should(ContainSubstring("page, err = agoutiDriver.NewPage()"))
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Describe("ginkgo bootstrap/generate", func() {
|
||
|
var pkgPath string
|
||
|
BeforeEach(func() {
|
||
|
pkgPath = tmpPath("some crazy-thing")
|
||
|
os.Mkdir(pkgPath, 0777)
|
||
|
})
|
||
|
|
||
|
Context("when the working directory is empty", func() {
|
||
|
It("generates correctly named bootstrap and generate files with a package name derived from the directory", func() {
|
||
|
session := startGinkgo(pkgPath, "bootstrap")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package some_crazy_thing_test"))
|
||
|
Ω(content).Should(ContainSubstring("SomeCrazyThing Suite"))
|
||
|
|
||
|
session = startGinkgo(pkgPath, "generate")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
content, err = ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package some_crazy_thing_test"))
|
||
|
Ω(content).Should(ContainSubstring("SomeCrazyThing"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("when the working directory contains a file with a package name", func() {
|
||
|
BeforeEach(func() {
|
||
|
Ω(ioutil.WriteFile(filepath.Join(pkgPath, "foo.go"), []byte("package main\n\nfunc main() {}"), 0777)).Should(Succeed())
|
||
|
})
|
||
|
|
||
|
It("generates correctly named bootstrap and generate files with the package name", func() {
|
||
|
session := startGinkgo(pkgPath, "bootstrap")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
content, err := ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_suite_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package main_test"))
|
||
|
Ω(content).Should(ContainSubstring("SomeCrazyThing Suite"))
|
||
|
|
||
|
session = startGinkgo(pkgPath, "generate")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
content, err = ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_test.go"))
|
||
|
Ω(err).ShouldNot(HaveOccurred())
|
||
|
Ω(content).Should(ContainSubstring("package main_test"))
|
||
|
Ω(content).Should(ContainSubstring("SomeCrazyThing"))
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Describe("ginkgo blur", func() {
|
||
|
It("should unfocus tests", func() {
|
||
|
pathToTest := tmpPath("focused")
|
||
|
copyIn("focused_fixture", pathToTest)
|
||
|
|
||
|
session := startGinkgo(pathToTest, "--noColor")
|
||
|
Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(ContainSubstring("6 Passed"))
|
||
|
Ω(output).Should(ContainSubstring("5 Skipped"))
|
||
|
|
||
|
session = startGinkgo(pathToTest, "blur")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
|
||
|
session = startGinkgo(pathToTest, "--noColor")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output = session.Out.Contents()
|
||
|
Ω(output).Should(ContainSubstring("11 Passed"))
|
||
|
Ω(output).Should(ContainSubstring("0 Skipped"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Describe("ginkgo version", func() {
|
||
|
It("should print out the version info", func() {
|
||
|
session := startGinkgo("", "version")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := session.Out.Contents()
|
||
|
|
||
|
Ω(output).Should(MatchRegexp(`Ginkgo Version \d+\.\d+\.\d+`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Describe("ginkgo help", func() {
|
||
|
It("should print out usage information", func() {
|
||
|
session := startGinkgo("", "help")
|
||
|
Eventually(session).Should(gexec.Exit(0))
|
||
|
output := string(session.Err.Contents())
|
||
|
|
||
|
Ω(output).Should(MatchRegexp(`Ginkgo Version \d+\.\d+\.\d+`))
|
||
|
Ω(output).Should(ContainSubstring("ginkgo watch"))
|
||
|
Ω(output).Should(ContainSubstring("-succinct"))
|
||
|
Ω(output).Should(ContainSubstring("-nodes"))
|
||
|
Ω(output).Should(ContainSubstring("ginkgo generate"))
|
||
|
Ω(output).Should(ContainSubstring("ginkgo help <COMMAND>"))
|
||
|
})
|
||
|
})
|
||
|
})
|