summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/spf13/cobra/cobra/cmd/add_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/spf13/cobra/cobra/cmd/add_test.go')
-rw-r--r--vendor/github.com/spf13/cobra/cobra/cmd/add_test.go100
1 files changed, 100 insertions, 0 deletions
diff --git a/vendor/github.com/spf13/cobra/cobra/cmd/add_test.go b/vendor/github.com/spf13/cobra/cobra/cmd/add_test.go
new file mode 100644
index 000000000..dacbe838a
--- /dev/null
+++ b/vendor/github.com/spf13/cobra/cobra/cmd/add_test.go
@@ -0,0 +1,100 @@
+package cmd
+
+import (
+ "errors"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "testing"
+)
+
+// TestGoldenAddCmd initializes the project "github.com/spf13/testproject"
+// in GOPATH, adds "test" command
+// and compares the content of all files in cmd directory of testproject
+// with appropriate golden files.
+// Use -update to update existing golden files.
+func TestGoldenAddCmd(t *testing.T) {
+ projectName := "github.com/spf13/testproject"
+ project := NewProject(projectName)
+
+ // Initialize the project at first.
+ initializeProject(project)
+ defer os.RemoveAll(project.AbsPath())
+
+ // Then add the "test" command.
+ cmdName := "test"
+ cmdPath := filepath.Join(project.CmdPath(), cmdName+".go")
+ createCmdFile(project.License(), cmdPath, cmdName)
+
+ expectedFiles := []string{".", "root.go", "test.go"}
+ gotFiles := []string{}
+
+ // Check project file hierarchy and compare the content of every single file
+ // with appropriate golden file.
+ err := filepath.Walk(project.CmdPath(), func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ // Make path relative to project.CmdPath().
+ // E.g. path = "/home/user/go/src/github.com/spf13/testproject/cmd/root.go"
+ // then it returns just "root.go".
+ relPath, err := filepath.Rel(project.CmdPath(), path)
+ if err != nil {
+ return err
+ }
+ relPath = filepath.ToSlash(relPath)
+ gotFiles = append(gotFiles, relPath)
+ goldenPath := filepath.Join("testdata", filepath.Base(path)+".golden")
+
+ switch relPath {
+ // Know directories.
+ case ".":
+ return nil
+ // Known files.
+ case "root.go", "test.go":
+ if *update {
+ got, err := ioutil.ReadFile(path)
+ if err != nil {
+ return err
+ }
+ ioutil.WriteFile(goldenPath, got, 0644)
+ }
+ 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)
+ }
+}
+
+func TestValidateCmdName(t *testing.T) {
+ testCases := []struct {
+ input string
+ expected string
+ }{
+ {"cmdName", "cmdName"},
+ {"cmd_name", "cmdName"},
+ {"cmd-name", "cmdName"},
+ {"cmd______Name", "cmdName"},
+ {"cmd------Name", "cmdName"},
+ {"cmd______name", "cmdName"},
+ {"cmd------name", "cmdName"},
+ {"cmdName-----", "cmdName"},
+ {"cmdname-", "cmdname"},
+ }
+
+ for _, testCase := range testCases {
+ got := validateCmdName(testCase.input)
+ if testCase.expected != got {
+ t.Errorf("Expected %q, got %q", testCase.expected, got)
+ }
+ }
+}