|  | 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>")) | 
|  | }) | 
|  | }) | 
|  | }) |