|  | package integration_test | 
|  |  | 
|  | import ( | 
|  | "io/ioutil" | 
|  | "os" | 
|  | "os/exec" | 
|  | "path/filepath" | 
|  | "strings" | 
|  |  | 
|  | . "github.com/onsi/ginkgo" | 
|  | . "github.com/onsi/gomega" | 
|  | ) | 
|  |  | 
|  | var _ = Describe("ginkgo convert", func() { | 
|  | var tmpDir string | 
|  |  | 
|  | readConvertedFileNamed := func(pathComponents ...string) string { | 
|  | pathToFile := filepath.Join(tmpDir, "convert_fixtures", filepath.Join(pathComponents...)) | 
|  | bytes, err := ioutil.ReadFile(pathToFile) | 
|  | ExpectWithOffset(1, err).NotTo(HaveOccurred()) | 
|  |  | 
|  | return string(bytes) | 
|  | } | 
|  |  | 
|  | readGoldMasterNamed := func(filename string) string { | 
|  | bytes, err := ioutil.ReadFile(filepath.Join("_fixtures", "convert_goldmasters", filename)) | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  |  | 
|  | return string(bytes) | 
|  | } | 
|  |  | 
|  | BeforeEach(func() { | 
|  | var err error | 
|  |  | 
|  | tmpDir, err = ioutil.TempDir("", "ginkgo-convert") | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  |  | 
|  | err = exec.Command("cp", "-r", filepath.Join("_fixtures", "convert_fixtures"), tmpDir).Run() | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  | }) | 
|  |  | 
|  | JustBeforeEach(func() { | 
|  | cwd, err := os.Getwd() | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  |  | 
|  | relPath, err := filepath.Rel(cwd, filepath.Join(tmpDir, "convert_fixtures")) | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  |  | 
|  | cmd := exec.Command(pathToGinkgo, "convert", relPath) | 
|  | cmd.Env = os.Environ() | 
|  | for i, env := range cmd.Env { | 
|  | if strings.HasPrefix(env, "PATH") { | 
|  | cmd.Env[i] = cmd.Env[i] + ":" + filepath.Dir(pathToGinkgo) | 
|  | break | 
|  | } | 
|  | } | 
|  | err = cmd.Run() | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  | }) | 
|  |  | 
|  | AfterEach(func() { | 
|  | err := os.RemoveAll(tmpDir) | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  | }) | 
|  |  | 
|  | It("rewrites xunit tests as ginkgo tests", func() { | 
|  | convertedFile := readConvertedFileNamed("xunit_test.go") | 
|  | goldMaster := readGoldMasterNamed("xunit_test.go") | 
|  | Ω(convertedFile).Should(Equal(goldMaster)) | 
|  | }) | 
|  |  | 
|  | It("rewrites all usages of *testing.T as mr.T()", func() { | 
|  | convertedFile := readConvertedFileNamed("extra_functions_test.go") | 
|  | goldMaster := readGoldMasterNamed("extra_functions_test.go") | 
|  | Ω(convertedFile).Should(Equal(goldMaster)) | 
|  | }) | 
|  |  | 
|  | It("rewrites tests in the package dir that belong to other packages", func() { | 
|  | convertedFile := readConvertedFileNamed("outside_package_test.go") | 
|  | goldMaster := readGoldMasterNamed("outside_package_test.go") | 
|  | Ω(convertedFile).Should(Equal(goldMaster)) | 
|  | }) | 
|  |  | 
|  | It("rewrites tests in nested packages", func() { | 
|  | convertedFile := readConvertedFileNamed("nested", "nested_test.go") | 
|  | goldMaster := readGoldMasterNamed("nested_test.go") | 
|  | Ω(convertedFile).Should(Equal(goldMaster)) | 
|  | }) | 
|  |  | 
|  | Context("ginkgo test suite files", func() { | 
|  | It("creates a ginkgo test suite file for the package you specified", func() { | 
|  | testsuite := readConvertedFileNamed("convert_fixtures_suite_test.go") | 
|  | goldMaster := readGoldMasterNamed("suite_test.go") | 
|  | Ω(testsuite).Should(Equal(goldMaster)) | 
|  | }) | 
|  |  | 
|  | It("converts go tests in deeply nested packages (some may not contain go files)", func() { | 
|  | testsuite := readConvertedFileNamed("nested_without_gofiles", "subpackage", "nested_subpackage_test.go") | 
|  | goldMaster := readGoldMasterNamed("nested_subpackage_test.go") | 
|  | Ω(testsuite).Should(Equal(goldMaster)) | 
|  | }) | 
|  |  | 
|  | It("creates ginkgo test suites for all nested packages", func() { | 
|  | testsuite := readConvertedFileNamed("nested", "nested_suite_test.go") | 
|  | goldMaster := readGoldMasterNamed("nested_suite_test.go") | 
|  | Ω(testsuite).Should(Equal(goldMaster)) | 
|  | }) | 
|  | }) | 
|  |  | 
|  | Context("with an existing test suite file", func() { | 
|  | BeforeEach(func() { | 
|  | goldMaster := readGoldMasterNamed("fixtures_suite_test.go") | 
|  | err := ioutil.WriteFile(filepath.Join(tmpDir, "convert_fixtures", "tmp_suite_test.go"), []byte(goldMaster), 0600) | 
|  | Ω(err).ShouldNot(HaveOccurred()) | 
|  | }) | 
|  |  | 
|  | It("gracefully handles existing test suite files", func() { | 
|  | //nothing should have gone wrong! | 
|  | }) | 
|  | }) | 
|  | }) |