summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/lunixbochs/struc/field_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/lunixbochs/struc/field_test.go')
-rw-r--r--vendor/github.com/lunixbochs/struc/field_test.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/vendor/github.com/lunixbochs/struc/field_test.go b/vendor/github.com/lunixbochs/struc/field_test.go
new file mode 100644
index 0000000..45a07b2
--- /dev/null
+++ b/vendor/github.com/lunixbochs/struc/field_test.go
@@ -0,0 +1,77 @@
+package struc
+
+import (
+ "bytes"
+ "testing"
+)
+
+type badFloat struct {
+ BadFloat int `struc:"float64"`
+}
+
+func TestBadFloatField(t *testing.T) {
+ buf := bytes.NewReader([]byte("00000000"))
+ err := Unpack(buf, &badFloat{})
+ if err == nil {
+ t.Fatal("failed to error on bad float unpack")
+ }
+}
+
+type emptyLengthField struct {
+ Strlen int `struc:"sizeof=Str"`
+ Str []byte
+}
+
+func TestEmptyLengthField(t *testing.T) {
+ var buf bytes.Buffer
+ s := &emptyLengthField{0, []byte("test")}
+ o := &emptyLengthField{}
+ if err := Pack(&buf, s); err != nil {
+ t.Fatal(err)
+ }
+ if err := Unpack(&buf, o); err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(s.Str, o.Str) {
+ t.Fatal("empty length field encode failed")
+ }
+}
+
+type fixedSlicePad struct {
+ Field []byte `struc:"[4]byte"`
+}
+
+func TestFixedSlicePad(t *testing.T) {
+ var buf bytes.Buffer
+ ref := []byte{0, 0, 0, 0}
+ s := &fixedSlicePad{}
+ if err := Pack(&buf, s); err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(buf.Bytes(), ref) {
+ t.Fatal("implicit fixed slice pack failed")
+ }
+ if err := Unpack(&buf, s); err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(s.Field, ref) {
+ t.Fatal("implicit fixed slice unpack failed")
+ }
+}
+
+type sliceCap struct {
+ Len int `struc:"sizeof=Field"`
+ Field []byte
+}
+
+func TestSliceCap(t *testing.T) {
+ var buf bytes.Buffer
+ tmp := &sliceCap{0, []byte("1234")}
+ if err := Pack(&buf, tmp); err != nil {
+ t.Fatal(err)
+ }
+ tmp.Field = make([]byte, 0, 4)
+ if err := Unpack(&buf, tmp); err != nil {
+ t.Fatal(err)
+ }
+}