|
|
@@ -473,10 +473,17 @@ var marshalingTests = []struct {
|
|
|
{"Any with message and indent", marshalerAllOptions, anySimple, anySimplePrettyJSON},
|
|
|
{"Any with WKT", marshaler, anyWellKnown, anyWellKnownJSON},
|
|
|
{"Any with WKT and indent", marshalerAllOptions, anyWellKnown, anyWellKnownPrettyJSON},
|
|
|
- {"Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}, `{"dur":"3s"}`},
|
|
|
- {"Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3, Nanos: 1e6}}, `{"dur":"3.001s"}`},
|
|
|
- {"Duration beyond float64 precision", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 100000000, Nanos: 1}}, `{"dur":"100000000.000000001s"}`},
|
|
|
- {"negative Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: -123, Nanos: -456}}, `{"dur":"-123.000000456s"}`},
|
|
|
+ {"Duration empty", marshaler, &durpb.Duration{}, `"0s"`},
|
|
|
+ {"Duration with secs", marshaler, &durpb.Duration{Seconds: 3}, `"3s"`},
|
|
|
+ {"Duration with -secs", marshaler, &durpb.Duration{Seconds: -3}, `"-3s"`},
|
|
|
+ {"Duration with nanos", marshaler, &durpb.Duration{Nanos: 1e6}, `"0.001s"`},
|
|
|
+ {"Duration with -nanos", marshaler, &durpb.Duration{Nanos: -1e6}, `"-0.001s"`},
|
|
|
+ {"Duration with large secs", marshaler, &durpb.Duration{Seconds: 1e10, Nanos: 1}, `"10000000000.000000001s"`},
|
|
|
+ {"Duration with 6-digit nanos", marshaler, &durpb.Duration{Nanos: 1e4}, `"0.000010s"`},
|
|
|
+ {"Duration with 3-digit nanos", marshaler, &durpb.Duration{Nanos: 1e6}, `"0.001s"`},
|
|
|
+ {"Duration with -secs -nanos", marshaler, &durpb.Duration{Seconds: -123, Nanos: -450}, `"-123.000000450s"`},
|
|
|
+ {"Duration max value", marshaler, &durpb.Duration{Seconds: 315576000000, Nanos: 999999999}, `"315576000000.999999999s"`},
|
|
|
+ {"Duration min value", marshaler, &durpb.Duration{Seconds: -315576000000, Nanos: -999999999}, `"-315576000000.999999999s"`},
|
|
|
{"Struct", marshaler, &pb.KnownTypes{St: &stpb.Struct{
|
|
|
Fields: map[string]*stpb.Value{
|
|
|
"one": {Kind: &stpb.Value_StringValue{"loneliest number"}},
|
|
|
@@ -549,15 +556,17 @@ func TestMarshalIllegalTime(t *testing.T) {
|
|
|
pb proto.Message
|
|
|
fail bool
|
|
|
}{
|
|
|
- {&pb.KnownTypes{Dur: &durpb.Duration{Seconds: 1, Nanos: 0}}, false},
|
|
|
- {&pb.KnownTypes{Dur: &durpb.Duration{Seconds: -1, Nanos: 0}}, false},
|
|
|
- {&pb.KnownTypes{Dur: &durpb.Duration{Seconds: 1, Nanos: -1}}, true},
|
|
|
- {&pb.KnownTypes{Dur: &durpb.Duration{Seconds: -1, Nanos: 1}}, true},
|
|
|
- {&pb.KnownTypes{Dur: &durpb.Duration{Seconds: 1, Nanos: 1000000000}}, true},
|
|
|
- {&pb.KnownTypes{Dur: &durpb.Duration{Seconds: -1, Nanos: -1000000000}}, true},
|
|
|
- {&pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 1, Nanos: 1}}, false},
|
|
|
- {&pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 1, Nanos: -1}}, true},
|
|
|
- {&pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 1, Nanos: 1000000000}}, true},
|
|
|
+ {&durpb.Duration{Seconds: 1, Nanos: 0}, false},
|
|
|
+ {&durpb.Duration{Seconds: -1, Nanos: 0}, false},
|
|
|
+ {&durpb.Duration{Seconds: 1, Nanos: -1}, true},
|
|
|
+ {&durpb.Duration{Seconds: -1, Nanos: 1}, true},
|
|
|
+ {&durpb.Duration{Seconds: 315576000001}, true},
|
|
|
+ {&durpb.Duration{Seconds: -315576000001}, true},
|
|
|
+ {&durpb.Duration{Seconds: 1, Nanos: 1000000000}, true},
|
|
|
+ {&durpb.Duration{Seconds: -1, Nanos: -1000000000}, true},
|
|
|
+ {&tspb.Timestamp{Seconds: 1, Nanos: 1}, false},
|
|
|
+ {&tspb.Timestamp{Seconds: 1, Nanos: -1}, true},
|
|
|
+ {&tspb.Timestamp{Seconds: 1, Nanos: 1000000000}, true},
|
|
|
}
|
|
|
for _, tt := range tests {
|
|
|
_, err := marshaler.MarshalToString(tt.pb)
|
|
|
@@ -607,8 +616,7 @@ func TestMarshalAnyJSONPBMarshaler(t *testing.T) {
|
|
|
t.Errorf("an unexpected error occurred when marshalling Any to JSON: %v", err)
|
|
|
}
|
|
|
// same as expected above, but pretty-printed w/ indentation
|
|
|
- expected =
|
|
|
-`{
|
|
|
+ expected = `{
|
|
|
"@type": "type.googleapis.com/` + dynamicMessageName + `",
|
|
|
"baz": [
|
|
|
0,
|
|
|
@@ -623,7 +631,6 @@ func TestMarshalAnyJSONPBMarshaler(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
func TestMarshalWithCustomValidation(t *testing.T) {
|
|
|
msg := dynamicMessage{RawJson: `{ "foo": "bar", "baz": [0, 1, 2, 3] }`, Dummy: &dynamicMessage{}}
|
|
|
|