@@ -17,6 +17,7 @@ limitations under the License.
1717package v1beta1_test
1818
1919import (
20+ "bytes"
2021 "context"
2122 "encoding/json"
2223 "reflect"
@@ -168,23 +169,56 @@ type ArrayOrStringHolder struct {
168169
169170func TestArrayOrString_UnmarshalJSON (t * testing.T ) {
170171 cases := []struct {
171- input string
172+ input map [ string ] interface {}
172173 result v1beta1.ArrayOrString
173174 }{
174- {"{\" val\" : \" 123\" }" , * v1beta1 .NewArrayOrString ("123" )},
175- {"{\" val\" : \" \" }" , * v1beta1 .NewArrayOrString ("" )},
176- {"{\" val\" :[]}" , v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {}}},
177- {"{\" val\" :[\" oneelement\" ]}" , v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {"oneelement" }}},
178- {"{\" val\" :[\" multiple\" , \" elements\" ]}" , * v1beta1 .NewArrayOrString ("multiple" , "elements" )},
175+ {
176+ input : map [string ]interface {}{"val" : "123" },
177+ result : * v1beta1 .NewArrayOrString ("123" ),
178+ },
179+ {
180+ input : map [string ]interface {}{"val" : "" },
181+ result : * v1beta1 .NewArrayOrString ("" ),
182+ },
183+ {
184+ input : map [string ]interface {}{"val" : nil },
185+ result : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : nil },
186+ },
187+ {
188+ input : map [string ]interface {}{"val" : []string {}},
189+ result : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {}},
190+ },
191+ {
192+ input : map [string ]interface {}{"val" : []string {"oneelement" }},
193+ result : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {"oneelement" }},
194+ },
195+ {
196+ input : map [string ]interface {}{"val" : []string {"multiple" , "elements" }},
197+ result : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {"multiple" , "elements" }},
198+ },
179199 }
180200
181201 for _ , c := range cases {
182- var result ArrayOrStringHolder
183- if err := json .Unmarshal ([]byte (c .input ), & result ); err != nil {
184- t .Errorf ("Failed to unmarshal input '%v': %v" , c .input , err )
185- }
186- if ! reflect .DeepEqual (result .AOrS , c .result ) {
187- t .Errorf ("Failed to unmarshal input '%v': expected %+v, got %+v" , c .input , c .result , result )
202+ for _ , opts := range []func (enc * json.Encoder ){
203+ // Default encoding
204+ func (enc * json.Encoder ) {},
205+ // Multiline encoding
206+ func (enc * json.Encoder ) { enc .SetIndent ("" , " " ) },
207+ } {
208+ b := new (bytes.Buffer )
209+ enc := json .NewEncoder (b )
210+ opts (enc )
211+ if err := enc .Encode (c .input ); err != nil {
212+ t .Fatalf ("error encoding json: %v" , err )
213+ }
214+
215+ var result ArrayOrStringHolder
216+ if err := json .Unmarshal (b .Bytes (), & result ); err != nil {
217+ t .Errorf ("Failed to unmarshal input '%v': %v" , c .input , err )
218+ }
219+ if ! reflect .DeepEqual (result .AOrS , c .result ) {
220+ t .Errorf ("expected %+v, got %+v" , c .result , result )
221+ }
188222 }
189223 }
190224}
0 commit comments