added support for string type
[govpp.git] / vendor / github.com / lunixbochs / struc / field_test.go
1 package struc
2
3 import (
4         "bytes"
5         "testing"
6 )
7
8 type badFloat struct {
9         BadFloat int `struc:"float64"`
10 }
11
12 func TestBadFloatField(t *testing.T) {
13         buf := bytes.NewReader([]byte("00000000"))
14         err := Unpack(buf, &badFloat{})
15         if err == nil {
16                 t.Fatal("failed to error on bad float unpack")
17         }
18 }
19
20 type emptyLengthField struct {
21         Strlen int `struc:"sizeof=Str"`
22         Str    []byte
23 }
24
25 func TestEmptyLengthField(t *testing.T) {
26         var buf bytes.Buffer
27         s := &emptyLengthField{0, []byte("test")}
28         o := &emptyLengthField{}
29         if err := Pack(&buf, s); err != nil {
30                 t.Fatal(err)
31         }
32         if err := Unpack(&buf, o); err != nil {
33                 t.Fatal(err)
34         }
35         if !bytes.Equal(s.Str, o.Str) {
36                 t.Fatal("empty length field encode failed")
37         }
38 }
39
40 type fixedSlicePad struct {
41         Field []byte `struc:"[4]byte"`
42 }
43
44 func TestFixedSlicePad(t *testing.T) {
45         var buf bytes.Buffer
46         ref := []byte{0, 0, 0, 0}
47         s := &fixedSlicePad{}
48         if err := Pack(&buf, s); err != nil {
49                 t.Fatal(err)
50         }
51         if !bytes.Equal(buf.Bytes(), ref) {
52                 t.Fatal("implicit fixed slice pack failed")
53         }
54         if err := Unpack(&buf, s); err != nil {
55                 t.Fatal(err)
56         }
57         if !bytes.Equal(s.Field, ref) {
58                 t.Fatal("implicit fixed slice unpack failed")
59         }
60 }
61
62 type sliceCap struct {
63         Len   int `struc:"sizeof=Field"`
64         Field []byte
65 }
66
67 func TestSliceCap(t *testing.T) {
68         var buf bytes.Buffer
69         tmp := &sliceCap{0, []byte("1234")}
70         if err := Pack(&buf, tmp); err != nil {
71                 t.Fatal(err)
72         }
73         tmp.Field = make([]byte, 0, 4)
74         if err := Unpack(&buf, tmp); err != nil {
75                 t.Fatal(err)
76         }
77 }