github.com/pmcatominey/terraform@v0.7.0-rc2.0.20160708105029-1401a52a5cc5/helper/schema/field_reader_map_test.go (about)

     1  package schema
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  func TestMapFieldReader_impl(t *testing.T) {
     9  	var _ FieldReader = new(MapFieldReader)
    10  }
    11  
    12  func TestMapFieldReader(t *testing.T) {
    13  	testFieldReader(t, func(s map[string]*Schema) FieldReader {
    14  		return &MapFieldReader{
    15  			Schema: s,
    16  
    17  			Map: BasicMapReader(map[string]string{
    18  				"bool":   "true",
    19  				"int":    "42",
    20  				"float":  "3.1415",
    21  				"string": "string",
    22  
    23  				"list.#": "2",
    24  				"list.0": "foo",
    25  				"list.1": "bar",
    26  
    27  				"listInt.#": "2",
    28  				"listInt.0": "21",
    29  				"listInt.1": "42",
    30  
    31  				"map.%":   "2",
    32  				"map.foo": "bar",
    33  				"map.bar": "baz",
    34  
    35  				"set.#":  "2",
    36  				"set.10": "10",
    37  				"set.50": "50",
    38  
    39  				"setDeep.#":        "2",
    40  				"setDeep.10.index": "10",
    41  				"setDeep.10.value": "foo",
    42  				"setDeep.50.index": "50",
    43  				"setDeep.50.value": "bar",
    44  			}),
    45  		}
    46  	})
    47  }
    48  
    49  func TestMapFieldReader_extra(t *testing.T) {
    50  	r := &MapFieldReader{
    51  		Schema: map[string]*Schema{
    52  			"mapDel":   &Schema{Type: TypeMap},
    53  			"mapEmpty": &Schema{Type: TypeMap},
    54  		},
    55  
    56  		Map: BasicMapReader(map[string]string{
    57  			"mapDel": "",
    58  
    59  			"mapEmpty.%": "0",
    60  		}),
    61  	}
    62  
    63  	cases := map[string]struct {
    64  		Addr        []string
    65  		Out         interface{}
    66  		OutOk       bool
    67  		OutComputed bool
    68  		OutErr      bool
    69  	}{
    70  		"mapDel": {
    71  			[]string{"mapDel"},
    72  			map[string]interface{}{},
    73  			true,
    74  			false,
    75  			false,
    76  		},
    77  
    78  		"mapEmpty": {
    79  			[]string{"mapEmpty"},
    80  			map[string]interface{}{},
    81  			true,
    82  			false,
    83  			false,
    84  		},
    85  	}
    86  
    87  	for name, tc := range cases {
    88  		out, err := r.ReadField(tc.Addr)
    89  		if err != nil != tc.OutErr {
    90  			t.Fatalf("%s: err: %s", name, err)
    91  		}
    92  		if out.Computed != tc.OutComputed {
    93  			t.Fatalf("%s: err: %#v", name, out.Computed)
    94  		}
    95  
    96  		if s, ok := out.Value.(*Set); ok {
    97  			// If it is a set, convert to a list so its more easily checked.
    98  			out.Value = s.List()
    99  		}
   100  
   101  		if !reflect.DeepEqual(out.Value, tc.Out) {
   102  			t.Fatalf("%s: out: %#v", name, out.Value)
   103  		}
   104  		if out.Exists != tc.OutOk {
   105  			t.Fatalf("%s: outOk: %#v", name, out.Exists)
   106  		}
   107  	}
   108  }