Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
cbor-gen
Commits
a77f48b5
Commit
a77f48b5
authored
Feb 17, 2021
by
Dirk McCormick
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test: add more test types for map/struct/array
parent
fd5c0318
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
596 additions
and
10 deletions
+596
-10
gen.go
gen.go
+2
-0
testing/cbor_gen.go
testing/cbor_gen.go
+2
-0
testing/cbor_map_gen.go
testing/cbor_map_gen.go
+512
-2
testing/roundtrip_test.go
testing/roundtrip_test.go
+68
-8
testing/types.go
testing/types.go
+12
-0
No files found.
gen.go
View file @
a77f48b5
...
...
@@ -57,6 +57,7 @@ package {{ .Package }}
import (
"fmt"
"io"
"sort"
{{ range .Imports }}{{ .Name }} "{{ .PkgPath }}"
{{ end }}
...
...
@@ -65,6 +66,7 @@ import (
var _ = xerrors.Errorf
var _ = cid.Undef
var _ = sort.Sort
`
)
}
...
...
testing/cbor_gen.go
View file @
a77f48b5
...
...
@@ -5,6 +5,7 @@ package testing
import
(
"fmt"
"io"
"sort"
cid
"github.com/ipfs/go-cid"
cbg
"github.com/whyrusleeping/cbor-gen"
...
...
@@ -13,6 +14,7 @@ import (
var
_
=
xerrors
.
Errorf
var
_
=
cid
.
Undef
var
_
=
sort
.
Sort
var
lengthBufSignedArray
=
[]
byte
{
129
}
...
...
testing/cbor_map_gen.go
View file @
a77f48b5
...
...
@@ -5,6 +5,7 @@ package testing
import
(
"fmt"
"io"
"sort"
cid
"github.com/ipfs/go-cid"
cbg
"github.com/whyrusleeping/cbor-gen"
...
...
@@ -13,6 +14,7 @@ import (
var
_
=
xerrors
.
Errorf
var
_
=
cid
.
Undef
var
_
=
sort
.
Sort
func
(
t
*
SimpleTypeTree
)
MarshalCBOR
(
w
io
.
Writer
)
error
{
if
t
==
nil
{
...
...
@@ -505,7 +507,7 @@ func (t *SimpleStructV1) MarshalCBOR(w io.Writer) error {
_
,
err
:=
w
.
Write
(
cbg
.
CborNull
)
return
err
}
if
_
,
err
:=
w
.
Write
([]
byte
{
16
4
});
err
!=
nil
{
if
_
,
err
:=
w
.
Write
([]
byte
{
16
7
});
err
!=
nil
{
return
err
}
...
...
@@ -596,6 +598,93 @@ func (t *SimpleStructV1) MarshalCBOR(w io.Writer) error {
}
}
// t.OldMap (map[string]testing.SimpleTypeOne) (map)
if
len
(
"OldMap"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
OldMap
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"OldMap"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"OldMap"
));
err
!=
nil
{
return
err
}
{
if
len
(
t
.
OldMap
)
>
4096
{
return
xerrors
.
Errorf
(
"cannot marshal t.OldMap map too large"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajMap
,
uint64
(
len
(
t
.
OldMap
)));
err
!=
nil
{
return
err
}
keys
:=
make
([]
string
,
0
,
len
(
t
.
OldMap
))
for
k
:=
range
t
.
OldMap
{
keys
=
append
(
keys
,
k
)
}
sort
.
Strings
(
keys
)
for
_
,
k
:=
range
keys
{
v
:=
t
.
OldMap
[
k
]
if
len
(
k
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field k was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
k
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
k
));
err
!=
nil
{
return
err
}
if
err
:=
v
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
}
}
// t.OldArray ([]testing.SimpleTypeOne) (slice)
if
len
(
"OldArray"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
OldArray
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"OldArray"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"OldArray"
));
err
!=
nil
{
return
err
}
if
len
(
t
.
OldArray
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Slice value in field t.OldArray was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajArray
,
uint64
(
len
(
t
.
OldArray
)));
err
!=
nil
{
return
err
}
for
_
,
v
:=
range
t
.
OldArray
{
if
err
:=
v
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
}
// t.OldStruct (testing.SimpleTypeOne) (struct)
if
len
(
"OldStruct"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
OldStruct
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"OldStruct"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"OldStruct"
));
err
!=
nil
{
return
err
}
if
err
:=
t
.
OldStruct
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
return
nil
}
...
...
@@ -703,6 +792,88 @@ func (t *SimpleStructV1) UnmarshalCBOR(r io.Reader) error {
}
}
// t.OldMap (map[string]testing.SimpleTypeOne) (map)
case
"OldMap"
:
maj
,
extra
,
err
=
cbg
.
CborReadHeaderBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
if
maj
!=
cbg
.
MajMap
{
return
fmt
.
Errorf
(
"expected a map (major type 5)"
)
}
if
extra
>
4096
{
return
fmt
.
Errorf
(
"t.OldMap: map too large"
)
}
t
.
OldMap
=
make
(
map
[
string
]
SimpleTypeOne
,
extra
)
for
i
,
l
:=
0
,
int
(
extra
);
i
<
l
;
i
++
{
var
k
string
{
sval
,
err
:=
cbg
.
ReadStringBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
k
=
string
(
sval
)
}
var
v
SimpleTypeOne
{
if
err
:=
v
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
xerrors
.
Errorf
(
"unmarshaling v: %w"
,
err
)
}
}
t
.
OldMap
[
k
]
=
v
}
// t.OldArray ([]testing.SimpleTypeOne) (slice)
case
"OldArray"
:
maj
,
extra
,
err
=
cbg
.
CborReadHeaderBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
if
extra
>
cbg
.
MaxLength
{
return
fmt
.
Errorf
(
"t.OldArray: array too large (%d)"
,
extra
)
}
if
maj
!=
cbg
.
MajArray
{
return
fmt
.
Errorf
(
"expected cbor array"
)
}
if
extra
>
0
{
t
.
OldArray
=
make
([]
SimpleTypeOne
,
extra
)
}
for
i
:=
0
;
i
<
int
(
extra
);
i
++
{
var
v
SimpleTypeOne
if
err
:=
v
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
err
}
t
.
OldArray
[
i
]
=
v
}
// t.OldStruct (testing.SimpleTypeOne) (struct)
case
"OldStruct"
:
{
if
err
:=
t
.
OldStruct
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
xerrors
.
Errorf
(
"unmarshaling t.OldStruct: %w"
,
err
)
}
}
default
:
// Field doesn't exist on this type, so ignore it
...
...
@@ -717,7 +888,7 @@ func (t *SimpleStructV2) MarshalCBOR(w io.Writer) error {
_
,
err
:=
w
.
Write
(
cbg
.
CborNull
)
return
err
}
if
_
,
err
:=
w
.
Write
([]
byte
{
1
68
});
err
!=
nil
{
if
_
,
err
:=
w
.
Write
([]
byte
{
1
74
});
err
!=
nil
{
return
err
}
...
...
@@ -893,6 +1064,181 @@ func (t *SimpleStructV2) MarshalCBOR(w io.Writer) error {
}
}
// t.OldMap (map[string]testing.SimpleTypeOne) (map)
if
len
(
"OldMap"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
OldMap
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"OldMap"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"OldMap"
));
err
!=
nil
{
return
err
}
{
if
len
(
t
.
OldMap
)
>
4096
{
return
xerrors
.
Errorf
(
"cannot marshal t.OldMap map too large"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajMap
,
uint64
(
len
(
t
.
OldMap
)));
err
!=
nil
{
return
err
}
keys
:=
make
([]
string
,
0
,
len
(
t
.
OldMap
))
for
k
:=
range
t
.
OldMap
{
keys
=
append
(
keys
,
k
)
}
sort
.
Strings
(
keys
)
for
_
,
k
:=
range
keys
{
v
:=
t
.
OldMap
[
k
]
if
len
(
k
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field k was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
k
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
k
));
err
!=
nil
{
return
err
}
if
err
:=
v
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
}
}
// t.NewMap (map[string]testing.SimpleTypeOne) (map)
if
len
(
"NewMap"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
NewMap
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"NewMap"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"NewMap"
));
err
!=
nil
{
return
err
}
{
if
len
(
t
.
NewMap
)
>
4096
{
return
xerrors
.
Errorf
(
"cannot marshal t.NewMap map too large"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajMap
,
uint64
(
len
(
t
.
NewMap
)));
err
!=
nil
{
return
err
}
keys
:=
make
([]
string
,
0
,
len
(
t
.
NewMap
))
for
k
:=
range
t
.
NewMap
{
keys
=
append
(
keys
,
k
)
}
sort
.
Strings
(
keys
)
for
_
,
k
:=
range
keys
{
v
:=
t
.
NewMap
[
k
]
if
len
(
k
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field k was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
k
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
k
));
err
!=
nil
{
return
err
}
if
err
:=
v
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
}
}
// t.OldArray ([]testing.SimpleTypeOne) (slice)
if
len
(
"OldArray"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
OldArray
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"OldArray"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"OldArray"
));
err
!=
nil
{
return
err
}
if
len
(
t
.
OldArray
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Slice value in field t.OldArray was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajArray
,
uint64
(
len
(
t
.
OldArray
)));
err
!=
nil
{
return
err
}
for
_
,
v
:=
range
t
.
OldArray
{
if
err
:=
v
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
}
// t.NewArray ([]testing.SimpleTypeOne) (slice)
if
len
(
"NewArray"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
NewArray
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"NewArray"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"NewArray"
));
err
!=
nil
{
return
err
}
if
len
(
t
.
NewArray
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Slice value in field t.NewArray was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajArray
,
uint64
(
len
(
t
.
NewArray
)));
err
!=
nil
{
return
err
}
for
_
,
v
:=
range
t
.
NewArray
{
if
err
:=
v
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
}
// t.OldStruct (testing.SimpleTypeOne) (struct)
if
len
(
"OldStruct"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
OldStruct
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"OldStruct"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"OldStruct"
));
err
!=
nil
{
return
err
}
if
err
:=
t
.
OldStruct
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
// t.NewStruct (testing.SimpleTypeOne) (struct)
if
len
(
"NewStruct"
)
>
cbg
.
MaxLength
{
return
xerrors
.
Errorf
(
"Value in field
\"
NewStruct
\"
was too long"
)
}
if
err
:=
cbg
.
WriteMajorTypeHeaderBuf
(
scratch
,
w
,
cbg
.
MajTextString
,
uint64
(
len
(
"NewStruct"
)));
err
!=
nil
{
return
err
}
if
_
,
err
:=
io
.
WriteString
(
w
,
string
(
"NewStruct"
));
err
!=
nil
{
return
err
}
if
err
:=
t
.
NewStruct
.
MarshalCBOR
(
w
);
err
!=
nil
{
return
err
}
return
nil
}
...
...
@@ -1071,6 +1417,170 @@ func (t *SimpleStructV2) UnmarshalCBOR(r io.Reader) error {
}
}
// t.OldMap (map[string]testing.SimpleTypeOne) (map)
case
"OldMap"
:
maj
,
extra
,
err
=
cbg
.
CborReadHeaderBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
if
maj
!=
cbg
.
MajMap
{
return
fmt
.
Errorf
(
"expected a map (major type 5)"
)
}
if
extra
>
4096
{
return
fmt
.
Errorf
(
"t.OldMap: map too large"
)
}
t
.
OldMap
=
make
(
map
[
string
]
SimpleTypeOne
,
extra
)
for
i
,
l
:=
0
,
int
(
extra
);
i
<
l
;
i
++
{
var
k
string
{
sval
,
err
:=
cbg
.
ReadStringBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
k
=
string
(
sval
)
}
var
v
SimpleTypeOne
{
if
err
:=
v
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
xerrors
.
Errorf
(
"unmarshaling v: %w"
,
err
)
}
}
t
.
OldMap
[
k
]
=
v
}
// t.NewMap (map[string]testing.SimpleTypeOne) (map)
case
"NewMap"
:
maj
,
extra
,
err
=
cbg
.
CborReadHeaderBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
if
maj
!=
cbg
.
MajMap
{
return
fmt
.
Errorf
(
"expected a map (major type 5)"
)
}
if
extra
>
4096
{
return
fmt
.
Errorf
(
"t.NewMap: map too large"
)
}
t
.
NewMap
=
make
(
map
[
string
]
SimpleTypeOne
,
extra
)
for
i
,
l
:=
0
,
int
(
extra
);
i
<
l
;
i
++
{
var
k
string
{
sval
,
err
:=
cbg
.
ReadStringBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
k
=
string
(
sval
)
}
var
v
SimpleTypeOne
{
if
err
:=
v
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
xerrors
.
Errorf
(
"unmarshaling v: %w"
,
err
)
}
}
t
.
NewMap
[
k
]
=
v
}
// t.OldArray ([]testing.SimpleTypeOne) (slice)
case
"OldArray"
:
maj
,
extra
,
err
=
cbg
.
CborReadHeaderBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
if
extra
>
cbg
.
MaxLength
{
return
fmt
.
Errorf
(
"t.OldArray: array too large (%d)"
,
extra
)
}
if
maj
!=
cbg
.
MajArray
{
return
fmt
.
Errorf
(
"expected cbor array"
)
}
if
extra
>
0
{
t
.
OldArray
=
make
([]
SimpleTypeOne
,
extra
)
}
for
i
:=
0
;
i
<
int
(
extra
);
i
++
{
var
v
SimpleTypeOne
if
err
:=
v
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
err
}
t
.
OldArray
[
i
]
=
v
}
// t.NewArray ([]testing.SimpleTypeOne) (slice)
case
"NewArray"
:
maj
,
extra
,
err
=
cbg
.
CborReadHeaderBuf
(
br
,
scratch
)
if
err
!=
nil
{
return
err
}
if
extra
>
cbg
.
MaxLength
{
return
fmt
.
Errorf
(
"t.NewArray: array too large (%d)"
,
extra
)
}
if
maj
!=
cbg
.
MajArray
{
return
fmt
.
Errorf
(
"expected cbor array"
)
}
if
extra
>
0
{
t
.
NewArray
=
make
([]
SimpleTypeOne
,
extra
)
}
for
i
:=
0
;
i
<
int
(
extra
);
i
++
{
var
v
SimpleTypeOne
if
err
:=
v
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
err
}
t
.
NewArray
[
i
]
=
v
}
// t.OldStruct (testing.SimpleTypeOne) (struct)
case
"OldStruct"
:
{
if
err
:=
t
.
OldStruct
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
xerrors
.
Errorf
(
"unmarshaling t.OldStruct: %w"
,
err
)
}
}
// t.NewStruct (testing.SimpleTypeOne) (struct)
case
"NewStruct"
:
{
if
err
:=
t
.
NewStruct
.
UnmarshalCBOR
(
br
);
err
!=
nil
{
return
xerrors
.
Errorf
(
"unmarshaling t.NewStruct: %w"
,
err
)
}
}
default
:
// Field doesn't exist on this type, so ignore it
...
...
testing/roundtrip_test.go
View file @
a77f48b5
...
...
@@ -166,11 +166,21 @@ func TestTimeIsh(t *testing.T) {
func
TestLessToMoreFieldsRoundTrip
(
t
*
testing
.
T
)
{
dummyCid
,
_
:=
cid
.
Parse
(
"bafkqaaa"
)
simpleTypeOne
:=
SimpleTypeOne
{
Foo
:
"foo"
,
Value
:
1
,
Binary
:
[]
byte
(
"bin"
),
Signed
:
-
1
,
NString
:
"namedstr"
,
}
obj
:=
&
SimpleStructV1
{
OldStr
:
"hello"
,
OldBytes
:
[]
byte
(
"bytes"
),
OldNum
:
10
,
OldPtr
:
&
dummyCid
,
OldMap
:
map
[
string
]
SimpleTypeOne
{
"first"
:
simpleTypeOne
},
OldArray
:
[]
SimpleTypeOne
{
simpleTypeOne
},
OldStruct
:
simpleTypeOne
,
}
buf
:=
new
(
bytes
.
Buffer
)
...
...
@@ -213,20 +223,61 @@ func TestLessToMoreFieldsRoundTrip(t *testing.T) {
if
nobj
.
NewPtr
!=
nil
{
t
.
Fatal
(
"expected field to be zero value"
)
}
if
!
cmp
.
Equal
(
obj
.
OldMap
,
nobj
.
OldMap
)
{
t
.
Fatal
(
"mismatch map marshal / unmarshal"
)
}
if
len
(
nobj
.
NewMap
)
!=
0
{
t
.
Fatal
(
"expected field to be zero value"
)
}
if
!
cmp
.
Equal
(
obj
.
OldArray
,
nobj
.
OldArray
)
{
t
.
Fatal
(
"mismatch array marshal / unmarshal"
)
}
if
len
(
nobj
.
NewArray
)
!=
0
{
t
.
Fatal
(
"expected field to be zero value"
)
}
if
!
cmp
.
Equal
(
obj
.
OldStruct
,
nobj
.
OldStruct
)
{
t
.
Fatal
(
"mismatch struct marshal / unmarshal"
)
}
if
!
cmp
.
Equal
(
nobj
.
NewStruct
,
SimpleTypeOne
{})
{
t
.
Fatal
(
"expected field to be zero value"
)
}
}
func
TestMoreToLessFieldsRoundTrip
(
t
*
testing
.
T
)
{
dummyCid1
,
_
:=
cid
.
Parse
(
"bafkqaaa"
)
dummyCid2
,
_
:=
cid
.
Parse
(
"bafkqaab"
)
simpleType1
:=
SimpleTypeOne
{
Foo
:
"foo"
,
Value
:
1
,
Binary
:
[]
byte
(
"bin"
),
Signed
:
-
1
,
NString
:
"namedstr"
,
}
simpleType2
:=
SimpleTypeOne
{
Foo
:
"bar"
,
Value
:
2
,
Binary
:
[]
byte
(
"bin2"
),
Signed
:
-
2
,
NString
:
"namedstr2"
,
}
obj
:=
&
SimpleStructV2
{
OldStr
:
"oldstr"
,
NewStr
:
"newstr"
,
OldBytes
:
[]
byte
(
"oldbytes"
),
NewBytes
:
[]
byte
(
"newbytes"
),
OldNum
:
10
,
NewNum
:
11
,
OldPtr
:
&
dummyCid1
,
NewPtr
:
&
dummyCid2
,
OldStr
:
"oldstr"
,
NewStr
:
"newstr"
,
OldBytes
:
[]
byte
(
"oldbytes"
),
NewBytes
:
[]
byte
(
"newbytes"
),
OldNum
:
10
,
NewNum
:
11
,
OldPtr
:
&
dummyCid1
,
NewPtr
:
&
dummyCid2
,
OldMap
:
map
[
string
]
SimpleTypeOne
{
"foo"
:
simpleType1
},
NewMap
:
map
[
string
]
SimpleTypeOne
{
"bar"
:
simpleType2
},
OldArray
:
[]
SimpleTypeOne
{
simpleType1
},
NewArray
:
[]
SimpleTypeOne
{
simpleType1
,
simpleType2
},
OldStruct
:
simpleType1
,
NewStruct
:
simpleType2
,
}
buf
:=
new
(
bytes
.
Buffer
)
...
...
@@ -254,4 +305,13 @@ func TestMoreToLessFieldsRoundTrip(t *testing.T) {
if
*
obj
.
OldPtr
!=
*
nobj
.
OldPtr
{
t
.
Fatal
(
"mismatch "
,
obj
.
OldPtr
,
" != "
,
nobj
.
OldPtr
)
}
if
!
cmp
.
Equal
(
obj
.
OldMap
,
nobj
.
OldMap
)
{
t
.
Fatal
(
"mismatch map marshal / unmarshal"
)
}
if
!
cmp
.
Equal
(
obj
.
OldArray
,
nobj
.
OldArray
)
{
t
.
Fatal
(
"mismatch array marshal / unmarshal"
)
}
if
!
cmp
.
Equal
(
obj
.
OldStruct
,
nobj
.
OldStruct
)
{
t
.
Fatal
(
"mismatch struct marshal / unmarshal"
)
}
}
testing/types.go
View file @
a77f48b5
...
...
@@ -49,6 +49,9 @@ type SimpleStructV1 struct {
OldBytes
[]
byte
OldNum
uint64
OldPtr
*
cid
.
Cid
OldMap
map
[
string
]
SimpleTypeOne
OldArray
[]
SimpleTypeOne
OldStruct
SimpleTypeOne
}
type
SimpleStructV2
struct
{
...
...
@@ -63,6 +66,15 @@ type SimpleStructV2 struct {
OldPtr
*
cid
.
Cid
NewPtr
*
cid
.
Cid
OldMap
map
[
string
]
SimpleTypeOne
NewMap
map
[
string
]
SimpleTypeOne
OldArray
[]
SimpleTypeOne
NewArray
[]
SimpleTypeOne
OldStruct
SimpleTypeOne
NewStruct
SimpleTypeOne
}
type
DeferredContainer
struct
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment