get.porter.sh/porter@v1.3.0/pkg/exec/builder/flags_test.go (about) 1 package builder 2 3 import ( 4 "os" 5 "sort" 6 "testing" 7 8 yaml "get.porter.sh/porter/pkg/yaml" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 var testStep = TestStep{} 14 15 func TestFlags_UnmarshalYAML(t *testing.T) { 16 b, err := os.ReadFile("testdata/flags-input.yaml") 17 require.NoError(t, err, "could not read the input file") 18 19 var flags Flags 20 err = yaml.Unmarshal(b, &flags) 21 require.NoError(t, err, "could not unmarshal the flags") 22 23 assert.Contains(t, flags, NewFlag("int", "1")) 24 assert.Contains(t, flags, NewFlag("bool", "true")) 25 assert.Contains(t, flags, NewFlag("string", "abc")) 26 assert.Contains(t, flags, NewFlag("empty")) 27 assert.Contains(t, flags, NewFlag("repeated", "FOO=BAR", "STUFF=THINGS")) 28 } 29 30 func TestFlags_Sort(t *testing.T) { 31 flags := Flags{ 32 NewFlag("b", "1"), 33 NewFlag("a", "2"), 34 NewFlag("c", "3"), 35 } 36 37 sort.Sort(flags) 38 39 assert.Equal(t, "a", flags[0].Name) 40 assert.Equal(t, "b", flags[1].Name) 41 assert.Equal(t, "c", flags[2].Name) 42 } 43 44 func TestFlag_ToSlice(t *testing.T) { 45 t.Run("short flag", func(t *testing.T) { 46 f := NewFlag("f", "abc") 47 args := f.ToSlice(testStep.GetDashes()) 48 assert.Equal(t, []string{"-f", "abc"}, args) 49 }) 50 51 t.Run("long flag", func(t *testing.T) { 52 f := NewFlag("full", "abc") 53 args := f.ToSlice(testStep.GetDashes()) 54 assert.Equal(t, []string{"--full", "abc"}, args) 55 }) 56 57 t.Run("valueless flag", func(t *testing.T) { 58 f := NewFlag("l") 59 args := f.ToSlice(testStep.GetDashes()) 60 assert.Equal(t, []string{"-l"}, args) 61 }) 62 63 dashes := Dashes{ 64 Long: "---", 65 Short: "-", 66 } 67 t.Run("flag with non-default dashes", func(t *testing.T) { 68 f := NewFlag("full", "abc") 69 args := f.ToSlice(dashes) 70 assert.Equal(t, []string{"---full", "abc"}, args) 71 }) 72 } 73 74 func TestFlags_ToSlice(t *testing.T) { 75 flags := Flags{ 76 NewFlag("bull", "2"), 77 NewFlag("a", "1"), 78 } 79 80 args := flags.ToSlice(testStep.GetDashes()) 81 82 // Flags should be sorted and sliced up on a platter 83 assert.Equal(t, []string{"-a", "1", "--bull", "2"}, args) 84 } 85 86 func TestFlags_NonStringKeys(t *testing.T) { 87 flags := Flags{} 88 err := yaml.Unmarshal([]byte(` 89 yes: ["y", "true"] 90 true: ["y", "yes"] 91 nil: ["no", "nah"] 92 1.0: ["true", "yes"] 93 1: ["yes"] 94 `), &flags) 95 assert.NoError(t, err) 96 assert.Equal(t, 5, len(flags)) 97 }