OSDN Git Service

fix commands
[bytom/shuttle.git] / vendor / github.com / bytom / vendor / github.com / spf13 / cobra / cobra / cmd / golden_test.go
diff --git a/vendor/github.com/bytom/vendor/github.com/spf13/cobra/cobra/cmd/golden_test.go b/vendor/github.com/bytom/vendor/github.com/spf13/cobra/cobra/cmd/golden_test.go
new file mode 100644 (file)
index 0000000..59a5a1c
--- /dev/null
@@ -0,0 +1,77 @@
+package cmd
+
+import (
+       "bytes"
+       "errors"
+       "flag"
+       "fmt"
+       "io/ioutil"
+       "os/exec"
+)
+
+var update = flag.Bool("update", false, "update .golden files")
+
+func init() {
+       // Mute commands.
+       addCmd.SetOutput(new(bytes.Buffer))
+       initCmd.SetOutput(new(bytes.Buffer))
+}
+
+// compareFiles compares the content of files with pathA and pathB.
+// If contents are equal, it returns nil.
+// If not, it returns which files are not equal
+// and diff (if system has diff command) between these files.
+func compareFiles(pathA, pathB string) error {
+       contentA, err := ioutil.ReadFile(pathA)
+       if err != nil {
+               return err
+       }
+       contentB, err := ioutil.ReadFile(pathB)
+       if err != nil {
+               return err
+       }
+       if !bytes.Equal(contentA, contentB) {
+               output := new(bytes.Buffer)
+               output.WriteString(fmt.Sprintf("%q and %q are not equal!\n\n", pathA, pathB))
+
+               diffPath, err := exec.LookPath("diff")
+               if err != nil {
+                       // Don't execute diff if it can't be found.
+                       return nil
+               }
+               diffCmd := exec.Command(diffPath, "-u", pathA, pathB)
+               diffCmd.Stdout = output
+               diffCmd.Stderr = output
+
+               output.WriteString("$ diff -u " + pathA + " " + pathB + "\n")
+               if err := diffCmd.Run(); err != nil {
+                       output.WriteString("\n" + err.Error())
+               }
+               return errors.New(output.String())
+       }
+       return nil
+}
+
+// checkLackFiles checks if all elements of expected are in got.
+func checkLackFiles(expected, got []string) error {
+       lacks := make([]string, 0, len(expected))
+       for _, ev := range expected {
+               if !stringInStringSlice(ev, got) {
+                       lacks = append(lacks, ev)
+               }
+       }
+       if len(lacks) > 0 {
+               return fmt.Errorf("Lack %v file(s): %v", len(lacks), lacks)
+       }
+       return nil
+}
+
+// stringInStringSlice checks if s is an element of slice.
+func stringInStringSlice(s string, slice []string) bool {
+       for _, v := range slice {
+               if s == v {
+                       return true
+               }
+       }
+       return false
+}