Skip to content

Commit 79e591b

Browse files
wlynchtekton-robot
authored andcommitted
Params: sanity check unmarshalling works with multiline json.
This doesn't add any new behavior, but adds additional testing to make sure that we can safely unmarshal data regardless of whether it is formatted with indents / multilines.
1 parent 1d0bce5 commit 79e591b

File tree

1 file changed

+46
-12
lines changed

1 file changed

+46
-12
lines changed

pkg/apis/pipeline/v1beta1/param_types_test.go

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package v1beta1_test
1818

1919
import (
20+
"bytes"
2021
"context"
2122
"encoding/json"
2223
"reflect"
@@ -168,23 +169,56 @@ type ArrayOrStringHolder struct {
168169

169170
func 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

Comments
 (0)