github.1git.de/docker/cli@v26.1.3+incompatible/cli-plugins/hooks/template_test.go (about) 1 package hooks 2 3 import ( 4 "testing" 5 6 "github.com/spf13/cobra" 7 "gotest.tools/v3/assert" 8 ) 9 10 func TestParseTemplate(t *testing.T) { 11 type testFlag struct { 12 name string 13 value string 14 } 15 testCases := []struct { 16 template string 17 flags []testFlag 18 args []string 19 expectedOutput []string 20 }{ 21 { 22 template: "", 23 expectedOutput: []string{""}, 24 }, 25 { 26 template: "a plain template message", 27 expectedOutput: []string{"a plain template message"}, 28 }, 29 { 30 template: TemplateReplaceFlagValue("tag"), 31 flags: []testFlag{ 32 { 33 name: "tag", 34 value: "my-tag", 35 }, 36 }, 37 expectedOutput: []string{"my-tag"}, 38 }, 39 { 40 template: TemplateReplaceFlagValue("test-one") + " " + TemplateReplaceFlagValue("test2"), 41 flags: []testFlag{ 42 { 43 name: "test-one", 44 value: "value", 45 }, 46 { 47 name: "test2", 48 value: "value2", 49 }, 50 }, 51 expectedOutput: []string{"value value2"}, 52 }, 53 { 54 template: TemplateReplaceArg(0) + " " + TemplateReplaceArg(1), 55 args: []string{"zero", "one"}, 56 expectedOutput: []string{"zero one"}, 57 }, 58 { 59 template: "You just pulled " + TemplateReplaceArg(0), 60 args: []string{"alpine"}, 61 expectedOutput: []string{"You just pulled alpine"}, 62 }, 63 { 64 template: "one line\nanother line!", 65 expectedOutput: []string{"one line", "another line!"}, 66 }, 67 } 68 69 for _, tc := range testCases { 70 testCmd := &cobra.Command{ 71 Use: "pull", 72 Args: cobra.ExactArgs(len(tc.args)), 73 } 74 for _, f := range tc.flags { 75 _ = testCmd.Flags().String(f.name, "", "") 76 err := testCmd.Flag(f.name).Value.Set(f.value) 77 assert.NilError(t, err) 78 } 79 err := testCmd.Flags().Parse(tc.args) 80 assert.NilError(t, err) 81 82 out, err := ParseTemplate(tc.template, testCmd) 83 assert.NilError(t, err) 84 assert.DeepEqual(t, out, tc.expectedOutput) 85 } 86 }