]> Sergey Matveev's repositories - btrtrc.git/blobdiff - bencode/decode_test.go
bencode: Support unmarshalling strings into slices of kind Uint8
[btrtrc.git] / bencode / decode_test.go
index fa5212b9f704620899a7c3cd55eacf88e94ad768..7366102d6baff6e9116907d1ce915e2f826fc2bb 100644 (file)
@@ -147,3 +147,23 @@ func TestIgnoreUnmarshalTypeError(t *testing.T) {
        require.Nil(t, Unmarshal([]byte("d6:Ignorei42ee"), &s))
        assert.EqualValues(t, 42, s.Ignore)
 }
+
+// Test unmarshalling []byte into something that has the same kind but
+// different type.
+func TestDecodeCustomSlice(t *testing.T) {
+       type flag byte
+       var fs3, fs2 []flag
+       // We do a longer slice then a shorter slice to see if the buffers are
+       // shared.
+       d := NewDecoder(bytes.NewBufferString("3:\x01\x10\xff2:\x04\x0f"))
+       require.NoError(t, d.Decode(&fs3))
+       require.NoError(t, d.Decode(&fs2))
+       assert.EqualValues(t, []flag{1, 16, 255}, fs3)
+       assert.EqualValues(t, []flag{4, 15}, fs2)
+}
+
+func TestUnmarshalUnusedBytes(t *testing.T) {
+       var i int
+       require.EqualValues(t, ErrUnusedTrailingBytes{1}, Unmarshal([]byte("i42ee"), &i))
+       assert.EqualValues(t, 42, i)
+}