From cd2785071c0d97e7dff065491b12fb5d19a1fabc Mon Sep 17 00:00:00 2001 From: John McCabe Date: Wed, 28 Feb 2018 01:55:46 +0000 Subject: [PATCH] Test filename extension and subdirs_in_dir for subcommands This commit adds two regex based tests to ensure that the handle filename extension and handle subdirs in dir functions are prefixed by the root command when present in subcommands. Previously they had been prefixed incorrectly with the subcommand name. Signed-off-by: John McCabe --- bash_completions_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/bash_completions_test.go b/bash_completions_test.go index dd3a88ef..02a4f15b 100644 --- a/bash_completions_test.go +++ b/bash_completions_test.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "os/exec" + "regexp" "strings" "testing" ) @@ -21,6 +22,16 @@ func check(t *testing.T, found, expected string) { } } +func checkRegex(t *testing.T, found, pattern string) { + matched, err := regexp.MatchString(pattern, found) + if err != nil { + t.Errorf("Error thrown performing MatchString: \n %s\n", err) + } + if !matched { + t.Errorf("Expecting to match: \n %q\nGot:\n %q\n", pattern, found) + } +} + func runShellCheck(s string) error { excluded := []string{ "SC2034", // PREFIX appears unused. Verify it or export it. @@ -86,6 +97,11 @@ func TestBashCompletions(t *testing.T) { Run: emptyRun, } + echoCmd.Flags().String("filename", "", "Enter a filename") + echoCmd.MarkFlagFilename("filename", "json", "yaml", "yml") + echoCmd.Flags().String("config", "", "config to use (located in /config/PROFILE/)") + echoCmd.Flags().SetAnnotation("config", BashCompSubdirsInDir, []string{"config"}) + printCmd := &Command{ Use: "print [string to print]", Args: MinimumNArgs(1), @@ -148,10 +164,14 @@ func TestBashCompletions(t *testing.T) { check(t, output, `must_have_one_noun+=("three")`) // check for filename extension flags check(t, output, fmt.Sprintf(`flags_completion+=("__%s_handle_filename_extension_flag json|yaml|yml")`, rootCmd.Name())) + // check for filename extension flags in a subcommand + checkRegex(t, output, fmt.Sprintf(`_root_echo\(\)\n{[^}]*flags_completion\+=\("__%s_handle_filename_extension_flag json\|yaml\|yml"\)`, rootCmd.Name())) // check for custom flags check(t, output, `flags_completion+=("__complete_custom")`) // check for subdirs_in_dir flags check(t, output, fmt.Sprintf(`flags_completion+=("__%s_handle_subdirs_in_dir_flag themes")`, rootCmd.Name())) + // check for subdirs_in_dir flags in a subcommand + checkRegex(t, output, fmt.Sprintf(`_root_echo\(\)\n{[^}]*flags_completion\+=\("__%s_handle_subdirs_in_dir_flag config"\)`, rootCmd.Name())) checkOmit(t, output, deprecatedCmd.Name())