From 642c3c7a0edbb0242be3f380808df5474e377291 Mon Sep 17 00:00:00 2001 From: jharshman Date: Wed, 30 Jan 2019 00:33:51 -0800 Subject: [PATCH] vgo - compare generated files against golden files --- cobra/cmd/init_test.go | 86 ++++-------------------------------------- 1 file changed, 8 insertions(+), 78 deletions(-) diff --git a/cobra/cmd/init_test.go b/cobra/cmd/init_test.go index f61a139..f96b657 100644 --- a/cobra/cmd/init_test.go +++ b/cobra/cmd/init_test.go @@ -1,19 +1,16 @@ package cmd import ( - "errors" - "io/ioutil" + "fmt" "os" "path/filepath" "testing" - - "github.com/spf13/viper" ) func TestGoldenInitCmd(t *testing.T) { wd, _ := os.Getwd() project := &Project{ - AbsolutePath: wd, + AbsolutePath: fmt.Sprintf("%s/testproject", wd), PkgName: "github.com/spf13/testproject", Legal: getLicense(), Viper: true, @@ -25,80 +22,13 @@ func TestGoldenInitCmd(t *testing.T) { t.Fatal(err) } - //expectedFiles := []string{"LICENSE", "main.go", "cmd/root.go"} - //for _, f := range expectedFiles { - // // read each file and compare with corresponding golden file - //} -} - -// TestGoldenInitCmd initializes the project "github.com/spf13/testproject" -// in GOPATH and compares the content of files in initialized project with -// appropriate golden files ("testdata/*.golden"). -// Use -update to update existing golden files. -func TTestGoldenInitCmd(t *testing.T) { - projectName := "github.com/spf13/testproject" - project := NewProject(projectName) - defer os.RemoveAll(project.AbsPath()) - - viper.Set("author", "NAME HERE ") - viper.Set("license", "apache") - viper.Set("year", 2017) - defer viper.Set("author", nil) - defer viper.Set("license", nil) - defer viper.Set("year", nil) - - os.Args = []string{"cobra", "init", projectName} - if err := rootCmd.Execute(); err != nil { - t.Fatal("Error by execution:", err) - } - - expectedFiles := []string{".", "cmd", "LICENSE", "main.go", "cmd/root.go"} - gotFiles := []string{} - - // Check project file hierarchy and compare the content of every single file - // with appropriate golden file. - err := filepath.Walk(project.AbsPath(), func(path string, info os.FileInfo, err error) error { + expectedFiles := []string{"LICENSE", "main.go", "cmd/root.go"} + for _, f := range expectedFiles { + generatedFile := fmt.Sprintf("%s/%s", project.AbsolutePath, f) + goldenFile := fmt.Sprintf("testdata/%s.golden", filepath.Base(f)) + err := compareFiles(generatedFile, goldenFile) if err != nil { - return err + t.Fatal(err) } - - // Make path relative to project.AbsPath(). - // E.g. path = "/home/user/go/src/github.com/spf13/testproject/cmd/root.go" - // then it returns just "cmd/root.go". - relPath, err := filepath.Rel(project.AbsPath(), path) - if err != nil { - return err - } - relPath = filepath.ToSlash(relPath) - gotFiles = append(gotFiles, relPath) - goldenPath := filepath.Join("testdata", filepath.Base(path)+".golden") - - switch relPath { - // Known directories. - case ".", "cmd": - return nil - // Known files. - case "LICENSE", "main.go", "cmd/root.go": - if *update { - got, err := ioutil.ReadFile(path) - if err != nil { - return err - } - if err := ioutil.WriteFile(goldenPath, got, 0644); err != nil { - t.Fatal("Error while updating file:", err) - } - } - return compareFiles(path, goldenPath) - } - // Unknown file. - return errors.New("unknown file: " + path) - }) - if err != nil { - t.Fatal(err) - } - - // Check if some files lack. - if err := checkLackFiles(expectedFiles, gotFiles); err != nil { - t.Fatal(err) } }