| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package serialize | 5 package serialize |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "bytes" | 8 "bytes" |
| 9 "fmt" | 9 "fmt" |
| 10 "io" | 10 "io" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 } | 23 } |
| 24 | 24 |
| 25 var ( | 25 var ( |
| 26 mp = ds.MkProperty | 26 mp = ds.MkProperty |
| 27 mpNI = ds.MkPropertyNI | 27 mpNI = ds.MkPropertyNI |
| 28 ) | 28 ) |
| 29 | 29 |
| 30 type dspmapTC struct { | 30 type dspmapTC struct { |
| 31 name string | 31 name string |
| 32 props ds.PropertyMap | 32 props ds.PropertyMap |
| 33 exp ds.PropertyMap |
| 33 } | 34 } |
| 34 | 35 |
| 35 var mkKey = ds.MakeKey | 36 var mkKey = ds.MakeKey |
| 36 | 37 |
| 37 func mkBuf(data []byte) Buffer { | 38 func mkBuf(data []byte) Buffer { |
| 38 return Invertible(bytes.NewBuffer(data)) | 39 return Invertible(bytes.NewBuffer(data)) |
| 39 } | 40 } |
| 40 | 41 |
| 41 // TODO(riannucci): dedup with datastore/key testing file | 42 // TODO(riannucci): dedup with datastore/key testing file |
| 42 func ShouldEqualKey(actual interface{}, expected ...interface{}) string { | 43 func ShouldEqualKey(actual interface{}, expected ...interface{}) string { |
| 43 if len(expected) != 1 { | 44 if len(expected) != 1 { |
| 44 return fmt.Sprintf("Assertion requires 1 expected value, got %d"
, len(expected)) | 45 return fmt.Sprintf("Assertion requires 1 expected value, got %d"
, len(expected)) |
| 45 } | 46 } |
| 46 if actual.(*ds.Key).Equal(expected[0].(*ds.Key)) { | 47 if actual.(*ds.Key).Equal(expected[0].(*ds.Key)) { |
| 47 return "" | 48 return "" |
| 48 } | 49 } |
| 49 return fmt.Sprintf("Expected: %q\nActual: %q", actual, expected[0]) | 50 return fmt.Sprintf("Expected: %q\nActual: %q", actual, expected[0]) |
| 50 } | 51 } |
| 51 | 52 |
| 52 func TestPropertyMapSerialization(t *testing.T) { | 53 func TestPropertyMapSerialization(t *testing.T) { |
| 53 t.Parallel() | 54 t.Parallel() |
| 54 | 55 |
| 56 now := time.Now().UTC() |
| 55 tests := []dspmapTC{ | 57 tests := []dspmapTC{ |
| 56 { | 58 { |
| 57 » » » "basic", | 59 » » » name: "basic", |
| 58 » » » ds.PropertyMap{ | 60 » » » props: ds.PropertyMap{ |
| 59 "R": {mp(false), mp(2.1), mpNI(3)}, | 61 "R": {mp(false), mp(2.1), mpNI(3)}, |
| 60 "S": {mp("hello"), mp("world")}, | 62 "S": {mp("hello"), mp("world")}, |
| 61 }, | 63 }, |
| 62 }, | 64 }, |
| 63 { | 65 { |
| 64 » » » "keys", | 66 » » » name: "keys", |
| 65 » » » ds.PropertyMap{ | 67 » » » props: ds.PropertyMap{ |
| 66 "DS": {mp(mkKey("appy", "ns", "Foo", 7)),
mp(mkKey("other", "", "Yot", "wheeep"))}, | 68 "DS": {mp(mkKey("appy", "ns", "Foo", 7)),
mp(mkKey("other", "", "Yot", "wheeep"))}, |
| 67 "blobstore": {mp(blobstore.Key("sup")), mp(blobs
tore.Key("nerds"))}, | 69 "blobstore": {mp(blobstore.Key("sup")), mp(blobs
tore.Key("nerds"))}, |
| 68 }, | 70 }, |
| 69 }, | 71 }, |
| 70 { | 72 { |
| 71 » » » "geo", | 73 » » » name: "geo", |
| 72 » » » ds.PropertyMap{ | 74 » » » props: ds.PropertyMap{ |
| 73 "G": {mp(ds.GeoPoint{Lat: 1, Lng: 2})}, | 75 "G": {mp(ds.GeoPoint{Lat: 1, Lng: 2})}, |
| 74 }, | 76 }, |
| 75 }, | 77 }, |
| 76 { | 78 { |
| 77 » » » "data", | 79 » » » name: "data", |
| 78 » » » ds.PropertyMap{ | 80 » » » props: ds.PropertyMap{ |
| 79 "S": {mp("sup"), mp("fool"), mp("nerd")
}, | 81 "S": {mp("sup"), mp("fool"), mp("nerd")
}, |
| 80 "D.Foo.Nerd": {mp([]byte("sup")), mp([]byte("foo
l"))}, | 82 "D.Foo.Nerd": {mp([]byte("sup")), mp([]byte("foo
l"))}, |
| 81 }, | 83 }, |
| 82 }, | 84 }, |
| 83 { | 85 { |
| 84 » » » "time", | 86 » » » name: "time", |
| 85 » » » ds.PropertyMap{ | 87 » » » props: ds.PropertyMap{ |
| 86 "T": { | 88 "T": { |
| 87 » » » » » mp(time.Now().UTC()), | 89 » » » » » mp(now), |
| 88 » » » » » mp(time.Now().Add(time.Second).UTC())}, | 90 » » » » » mp(now), |
| 91 » » » » }, |
| 92 » » » }, |
| 93 » » » exp: ds.PropertyMap{ |
| 94 » » » » "T": { |
| 95 » » » » » mp(timeToInt(now)), |
| 96 » » » » » mp(timeToInt(now)), |
| 97 » » » » }, |
| 89 }, | 98 }, |
| 90 }, | 99 }, |
| 91 { | 100 { |
| 92 » » » "empty vals", | 101 » » » name: "empty vals", |
| 93 » » » ds.PropertyMap{ | 102 » » » props: ds.PropertyMap{ |
| 94 "T": {mp(true), mp(true)}, | 103 "T": {mp(true), mp(true)}, |
| 95 "F": {mp(false), mp(false)}, | 104 "F": {mp(false), mp(false)}, |
| 96 "N": {mp(nil), mp(nil)}, | 105 "N": {mp(nil), mp(nil)}, |
| 97 "E": {}, | 106 "E": {}, |
| 98 }, | 107 }, |
| 99 }, | 108 }, |
| 100 } | 109 } |
| 101 | 110 |
| 102 Convey("PropertyMap serialization", t, func() { | 111 Convey("PropertyMap serialization", t, func() { |
| 103 Convey("round trip", func() { | 112 Convey("round trip", func() { |
| 104 for _, tc := range tests { | 113 for _, tc := range tests { |
| 105 tc := tc | 114 tc := tc |
| 106 Convey(tc.name, func() { | 115 Convey(tc.name, func() { |
| 107 data := ToBytesWithContext(tc.props) | 116 data := ToBytesWithContext(tc.props) |
| 108 dec, err := ReadPropertyMap(mkBuf(data),
WithContext, "", "") | 117 dec, err := ReadPropertyMap(mkBuf(data),
WithContext, "", "") |
| 109 So(err, ShouldBeNil) | 118 So(err, ShouldBeNil) |
| 110 » » » » » So(dec, ShouldResemble, tc.props) | 119 |
| 120 » » » » » exp := tc.exp |
| 121 » » » » » if exp == nil { |
| 122 » » » » » » exp = tc.props |
| 123 » » » » » } |
| 124 » » » » » So(dec, ShouldResemble, exp) |
| 111 }) | 125 }) |
| 112 } | 126 } |
| 113 }) | 127 }) |
| 114 }) | 128 }) |
| 115 } | 129 } |
| 116 | 130 |
| 117 func die(err error) { | 131 func die(err error) { |
| 118 if err != nil { | 132 if err != nil { |
| 119 panic(err) | 133 panic(err) |
| 120 } | 134 } |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 "__ancestor__": { | 519 "__ancestor__": { |
| 506 ToBytes(mp(fakeKey)), | 520 ToBytes(mp(fakeKey)), |
| 507 ToBytes(mp(fakeKey.Paren
t())), | 521 ToBytes(mp(fakeKey.Paren
t())), |
| 508 }, | 522 }, |
| 509 }) | 523 }) |
| 510 }) | 524 }) |
| 511 }) | 525 }) |
| 512 }) | 526 }) |
| 513 }) | 527 }) |
| 514 } | 528 } |
| OLD | NEW |