github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/command/flag_kv_test.go (about) 1 package command 2 3 import ( 4 "flag" 5 "io/ioutil" 6 "reflect" 7 "testing" 8 ) 9 10 func TestFlagKV_impl(t *testing.T) { 11 var _ flag.Value = new(FlagKV) 12 } 13 14 func TestFlagKV(t *testing.T) { 15 cases := []struct { 16 Input string 17 Output map[string]string 18 Error bool 19 }{ 20 { 21 "key=value", 22 map[string]string{"key": "value"}, 23 false, 24 }, 25 26 { 27 "key=", 28 map[string]string{"key": ""}, 29 false, 30 }, 31 32 { 33 "key=foo=bar", 34 map[string]string{"key": "foo=bar"}, 35 false, 36 }, 37 38 { 39 "map.key=foo", 40 map[string]string{"map.key": "foo"}, 41 false, 42 }, 43 44 { 45 "key", 46 nil, 47 true, 48 }, 49 } 50 51 for _, tc := range cases { 52 f := new(FlagKV) 53 err := f.Set(tc.Input) 54 if err != nil != tc.Error { 55 t.Fatalf("bad error. Input: %#v", tc.Input) 56 } 57 58 actual := map[string]string(*f) 59 if !reflect.DeepEqual(actual, tc.Output) { 60 t.Fatalf("bad: %#v", actual) 61 } 62 } 63 } 64 65 func TestFlagKVFile_impl(t *testing.T) { 66 var _ flag.Value = new(FlagKVFile) 67 } 68 69 func TestFlagKVFile(t *testing.T) { 70 inputLibucl := ` 71 foo = "bar" 72 ` 73 74 inputJson := `{ 75 "foo": "bar"}` 76 77 cases := []struct { 78 Input string 79 Output map[string]string 80 Error bool 81 }{ 82 { 83 inputLibucl, 84 map[string]string{"foo": "bar"}, 85 false, 86 }, 87 88 { 89 inputJson, 90 map[string]string{"foo": "bar"}, 91 false, 92 }, 93 94 { 95 `map.key = "foo"`, 96 map[string]string{"map.key": "foo"}, 97 false, 98 }, 99 } 100 101 path := testTempFile(t) 102 103 for _, tc := range cases { 104 if err := ioutil.WriteFile(path, []byte(tc.Input), 0644); err != nil { 105 t.Fatalf("err: %s", err) 106 } 107 108 f := new(FlagKVFile) 109 err := f.Set(path) 110 if err != nil != tc.Error { 111 t.Fatalf("bad error. Input: %#v, err: %s", tc.Input, err) 112 } 113 114 actual := map[string]string(*f) 115 if !reflect.DeepEqual(actual, tc.Output) { 116 t.Fatalf("bad: %#v", actual) 117 } 118 } 119 }