From d6a430541c6c23f73174898ada59d3b756f85daa Mon Sep 17 00:00:00 2001
From: Albert Nigmatzianov <albertnigma@gmail.com>
Date: Thu, 2 Nov 2017 14:27:24 +0100
Subject: [PATCH] Edit ResetFlags and ResetCommands descriptions

---
 command.go      |  4 +--
 command_test.go | 75 +++++++++++++++++++------------------------------
 2 files changed, 31 insertions(+), 48 deletions(-)

diff --git a/command.go b/command.go
index 3a11e26..6cb6426 100644
--- a/command.go
+++ b/command.go
@@ -875,7 +875,7 @@ Simply type ` + c.Name() + ` help [path to command] for full details.`,
 	c.AddCommand(c.helpCommand)
 }
 
-// ResetCommands used for testing.
+// ResetCommands delete parent, subcommand and help command from c.
 func (c *Command) ResetCommands() {
 	c.parent = nil
 	c.commands = nil
@@ -1271,7 +1271,7 @@ func (c *Command) PersistentFlags() *flag.FlagSet {
 	return c.pflags
 }
 
-// ResetFlags is used in testing.
+// ResetFlags deletes all flags from command.
 func (c *Command) ResetFlags() {
 	c.flagErrorBuf = new(bytes.Buffer)
 	c.flagErrorBuf.Reset()
diff --git a/command_test.go b/command_test.go
index 2a6e217..edffc15 100644
--- a/command_test.go
+++ b/command_test.go
@@ -32,6 +32,18 @@ func resetCommandLineFlagSet() {
 	pflag.CommandLine = pflag.NewFlagSet(os.Args[0], pflag.ExitOnError)
 }
 
+func checkStringContains(t *testing.T, got, expected string) {
+	if !strings.Contains(got, expected) {
+		t.Errorf("Expected to contain: \n %v\nGot:\n %v\n", expected, got)
+	}
+}
+
+func checkStringOmits(t *testing.T, got, expected string) {
+	if strings.Contains(got, expected) {
+		t.Errorf("Expected to not contain: \n %v\nGot: %v", expected, got)
+	}
+}
+
 func TestSingleCommand(t *testing.T) {
 	var rootCmdArgs []string
 	rootCmd := &Command{
@@ -400,9 +412,7 @@ func TestChildFlagWithParentLocalFlag(t *testing.T) {
 		t.Errorf("Invalid flag should generate error")
 	}
 
-	if !strings.Contains(err.Error(), "unknown shorthand") {
-		t.Errorf("Wrong error message: %q", err.Error())
-	}
+	checkStringContains(t, err.Error(), "unknown shorthand")
 
 	if intFlagValue != 7 {
 		t.Errorf("Expected flag value: %v, got %v", 7, intFlagValue)
@@ -418,9 +428,7 @@ func TestFlagInvalidInput(t *testing.T) {
 		t.Errorf("Invalid flag value should generate error")
 	}
 
-	if !strings.Contains(err.Error(), "invalid syntax") {
-		t.Errorf("Wrong error message: %q", err)
-	}
+	checkStringContains(t, err.Error(), "invalid syntax")
 }
 
 func TestFlagBeforeCommand(t *testing.T) {
@@ -731,9 +739,7 @@ func TestHelpCommandExecuted(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	if !strings.Contains(output, rootCmd.Long) {
-		t.Errorf("Expected to contain: %q, got: %q", rootCmd.Long, output)
-	}
+	checkStringContains(t, output, rootCmd.Long)
 }
 
 func TestHelpCommandExecutedOnChild(t *testing.T) {
@@ -746,9 +752,7 @@ func TestHelpCommandExecutedOnChild(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	if !strings.Contains(output, childCmd.Long) {
-		t.Errorf("Expected to contain: %q, got: %q", childCmd.Long, output)
-	}
+	checkStringContains(t, output, childCmd.Long)
 }
 
 func TestSetHelpCommand(t *testing.T) {
@@ -782,9 +786,7 @@ func TestHelpFlagExecuted(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	if !strings.Contains(output, rootCmd.Long) {
-		t.Errorf("Expected to contain: %q, got: %q", rootCmd.Long, output)
-	}
+	checkStringContains(t, output, rootCmd.Long)
 }
 
 func TestHelpFlagExecutedOnChild(t *testing.T) {
@@ -797,9 +799,7 @@ func TestHelpFlagExecutedOnChild(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	if !strings.Contains(output, childCmd.Long) {
-		t.Errorf("Expected to contain: %q, got: %q", childCmd.Long, output)
-	}
+	checkStringContains(t, output, childCmd.Long)
 }
 
 // TestHelpFlagInHelp checks,
@@ -807,22 +807,17 @@ func TestHelpFlagExecutedOnChild(t *testing.T) {
 // that has no other flags.
 // Related to https://github.com/spf13/cobra/issues/302.
 func TestHelpFlagInHelp(t *testing.T) {
-	output := new(bytes.Buffer)
-	parent := &Command{Use: "parent", Run: func(*Command, []string) {}}
-	parent.SetOutput(output)
+	parentCmd := &Command{Use: "parent", Run: func(*Command, []string) {}}
 
-	child := &Command{Use: "child", Run: func(*Command, []string) {}}
-	parent.AddCommand(child)
+	childCmd := &Command{Use: "child", Run: func(*Command, []string) {}}
+	parentCmd.AddCommand(childCmd)
 
-	parent.SetArgs([]string{"help", "child"})
-	err := parent.Execute()
+	output, err := executeCommand(parentCmd, "help", "child")
 	if err != nil {
-		t.Fatal(err)
+		t.Errorf("Unexpected error: %v", err)
 	}
 
-	if !strings.Contains(output.String(), "[flags]") {
-		t.Errorf("\nExpecting to contain: %v\nGot: %v", "[flags]", output.String())
-	}
+	checkStringContains(t, output, "[flags]")
 }
 
 func TestFlagsInUsage(t *testing.T) {
@@ -832,10 +827,7 @@ func TestFlagsInUsage(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	expected := "[flags]"
-	if !strings.Contains(output, expected) {
-		t.Errorf("Expected to contain %q\ngot: %v", expected, output)
-	}
+	checkStringContains(t, output, "[flags]")
 }
 
 func TestHelpExecutedOnNonRunnableChild(t *testing.T) {
@@ -848,9 +840,7 @@ func TestHelpExecutedOnNonRunnableChild(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	if !strings.Contains(output, childCmd.Long) {
-		t.Errorf("Expected to contain: %q, got: %q", childCmd.Long, output)
-	}
+	checkStringContains(t, output, childCmd.Long)
 }
 
 func TestUsageIsNotPrintedTwice(t *testing.T) {
@@ -997,10 +987,7 @@ func TestDeprecatedCommand(t *testing.T) {
 		t.Errorf("Unexpected error: %v", err)
 	}
 
-	expected := deprecatedCmd.Deprecated
-	if !strings.Contains(output, expected) {
-		t.Errorf("Expected to contain: %q\nGot:%q", expected, output)
-	}
+	checkStringContains(t, output, deprecatedCmd.Deprecated)
 }
 
 func TestHooks(t *testing.T) {
@@ -1248,9 +1235,7 @@ func TestFlagOnPflagCommandLine(t *testing.T) {
 	c.AddCommand(&Command{Use: "child", Run: emptyRun})
 
 	output, _ := executeCommand(c, "--help")
-	if !strings.Contains(output, flagName) {
-		t.Errorf("Expected to contain: %q\nGot: %v", flagName, output)
-	}
+	checkStringContains(t, output, flagName)
 
 	resetCommandLineFlagSet()
 }
@@ -1406,9 +1391,7 @@ func TestUseDeprecatedFlags(t *testing.T) {
 	if err != nil {
 		t.Error("Unexpected error:", err)
 	}
-	if !strings.Contains(output, "This flag is deprecated") {
-		t.Errorf("Expected to contain deprecated message, but got %q", output)
-	}
+	checkStringContains(t, output, "This flag is deprecated")
 }
 
 func TestTraverseWithParentFlags(t *testing.T) {