]> Sergey Matveev's repositories - btrtrc.git/commitdiff
bencode: Add tests for Unmarshalling trailing bytes, and extraneous 'e'
authorMatt Joiner <anacrolix@gmail.com>
Sun, 23 Aug 2015 06:13:30 +0000 (16:13 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 23 Aug 2015 06:13:30 +0000 (16:13 +1000)
bencode/decode_test.go

index b0714a746ed22b69e3b8f1e9352349cec4c0d24d..3102820eebb6a8425bc76418317aacb9b94a251f 100644 (file)
@@ -1,7 +1,13 @@
 package bencode
 
-import "testing"
-import "reflect"
+import (
+       "bytes"
+       "io"
+       "reflect"
+       "testing"
+
+       "github.com/stretchr/testify/require"
+)
 
 type random_decode_test struct {
        data     string
@@ -25,7 +31,7 @@ func TestRandomDecode(t *testing.T) {
                var value interface{}
                err := Unmarshal([]byte(test.data), &value)
                if err != nil {
-                       t.Error(err)
+                       t.Error(err, test.data)
                        continue
                }
                if !reflect.DeepEqual(test.expected, value) {
@@ -35,6 +41,32 @@ func TestRandomDecode(t *testing.T) {
        }
 }
 
+func TestLoneE(t *testing.T) {
+       var v int
+       err := Unmarshal([]byte("e"), &v)
+       se := err.(*SyntaxError)
+       require.EqualValues(t, 0, se.Offset)
+}
+
+func TestTrailingBytes(t *testing.T) {
+       var i int
+       err := Unmarshal([]byte("i6ei6e"), &i)
+       se := err.(*SyntaxError)
+       require.EqualValues(t, 3, se.Offset)
+       err = Unmarshal([]byte("i6ee"), &i)
+       require.EqualValues(t, 3, se.Offset)
+       se = err.(*SyntaxError)
+       d := NewDecoder(bytes.NewReader([]byte("i1ei2e")))
+       err = d.Decode(&i)
+       require.NoError(t, err)
+       require.EqualValues(t, 1, i)
+       err = d.Decode(&i)
+       require.NoError(t, err)
+       require.EqualValues(t, 2, i)
+       err = d.Decode(&i)
+       require.Equal(t, io.EOF, err)
+}
+
 func check_error(t *testing.T, err error) {
        if err != nil {
                t.Error(err)