From c234e16a5f3518ce6b7aa7c9ca1fe8c703619463 Mon Sep 17 00:00:00 2001
From: Dominik Roos <roos@anapaya.net>
Date: Mon, 2 Jan 2023 11:29:46 +0100
Subject: [PATCH] add regression test

---
 completions_test.go | 64 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/completions_test.go b/completions_test.go
index abac12e4..2364ed2e 100644
--- a/completions_test.go
+++ b/completions_test.go
@@ -3115,3 +3115,67 @@ func TestCompletionCobraFlags(t *testing.T) {
 		})
 	}
 }
+
+func TestArgsNotDetectedAsFlagsCompletionInGo(t *testing.T) {
+	// Regression test that ensures the bug described in
+	// https://github.com/spf13/cobra/issues/1816 does not occur anymore.
+
+	root := Command{
+		Use: "root",
+		ValidArgsFunction: func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
+			return []string{"service", "1-123", "11-123"}, ShellCompDirectiveNoFileComp
+		},
+	}
+
+	completion := `service
+1-123
+11-123
+:4
+Completion ended with directive: ShellCompDirectiveNoFileComp
+`
+
+	testcases := []struct {
+		desc           string
+		args           []string
+		expectedOutput string
+	}{
+		{
+			desc:           "empty",
+			args:           []string{""},
+			expectedOutput: completion,
+		},
+		{
+			desc:           "service only",
+			args:           []string{"service", ""},
+			expectedOutput: completion,
+		},
+		{
+			desc:           "service last",
+			args:           []string{"1-123", "service", ""},
+			expectedOutput: completion,
+		},
+		{
+			desc:           "two digit prefixed dash last",
+			args:           []string{"service", "11-123", ""},
+			expectedOutput: completion,
+		},
+		{
+			desc:           "one digit prefixed dash last",
+			args:           []string{"service", "1-123", ""},
+			expectedOutput: completion,
+		},
+	}
+	for _, tc := range testcases {
+		t.Run(tc.desc, func(t *testing.T) {
+			args := []string{ShellCompNoDescRequestCmd}
+			args = append(args, tc.args...)
+			output, err := executeCommand(&root, args...)
+			switch {
+			case err == nil && output != tc.expectedOutput:
+				t.Errorf("expected: %q, got: %q", tc.expectedOutput, output)
+			case err != nil:
+				t.Errorf("Unexpected error %q", err)
+			}
+		})
+	}
+}