helper/schema: improve InternalValidate for sets

This commit is contained in:
Mitchell Hashimoto 2014-08-20 21:13:18 -07:00
parent 9ab5577beb
commit e9cc09a886
2 changed files with 27 additions and 3 deletions

View File

@ -178,14 +178,15 @@ func (m schemaMap) InternalValidate() error {
return fmt.Errorf("%s: ComputedWhen can only be set with Computed", k) return fmt.Errorf("%s: ComputedWhen can only be set with Computed", k)
} }
if v.Type == TypeList { if v.Type == TypeList || v.Type == TypeSet {
if v.Elem == nil { if v.Elem == nil {
return fmt.Errorf("%s: Elem must be set for lists", k) return fmt.Errorf("%s: Elem must be set for lists", k)
} }
// TODO: test if v.Type == TypeList && v.Set != nil {
if v.Set != nil {
return fmt.Errorf("%s: Set can only be set for TypeSet", k) return fmt.Errorf("%s: Set can only be set for TypeSet", k)
} else if v.Type == TypeSet && v.Set == nil {
return fmt.Errorf("%s: Set must be set", k)
} }
switch t := v.Elem.(type) { switch t := v.Elem.(type) {

View File

@ -784,6 +784,29 @@ func TestSchemaMap_InternalValidate(t *testing.T) {
true, true,
}, },
// List element with Set set
{
map[string]*Schema{
"foo": &Schema{
Type: TypeList,
Elem: &Schema{Type: TypeInt},
Set: func(interface{}) int { return 0 },
},
},
true,
},
// Set element with no Set set
{
map[string]*Schema{
"foo": &Schema{
Type: TypeSet,
Elem: &Schema{Type: TypeInt},
},
},
true,
},
// Required but computed // Required but computed
{ {
map[string]*Schema{ map[string]*Schema{