github.com/jmbataller/terraform@v0.6.8-0.20151125192640-b7a12e3a580c/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  }