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  }