]> Sergey Matveev's repositories - btrtrc.git/blob - bencode/encode_test.go
bencode: gofmt
[btrtrc.git] / bencode / encode_test.go
1 package bencode
2
3 import "testing"
4 import "bytes"
5 import "fmt"
6
7 type random_encode_test struct {
8         value    interface{}
9         expected string
10 }
11
12 type random_struct struct {
13         ABC         int    `bencode:"abc"`
14         SkipThisOne string `bencode:"-"`
15         CDE         string
16 }
17
18 type dummy struct {
19         a, b, c int
20 }
21
22 func (d *dummy) MarshalBencode() ([]byte, error) {
23         var b bytes.Buffer
24         _, err := fmt.Fprintf(&b, "i%dei%dei%de", d.a+1, d.b+1, d.c+1)
25         if err != nil {
26                 return nil, err
27         }
28         return b.Bytes(), nil
29 }
30
31 var random_encode_tests = []random_encode_test{
32         {int(10), "i10e"},
33         {uint(10), "i10e"},
34         {"hello, world", "12:hello, world"},
35         {true, "i1e"},
36         {false, "i0e"},
37         {int8(-8), "i-8e"},
38         {int16(-16), "i-16e"},
39         {int32(32), "i32e"},
40         {int64(-64), "i-64e"},
41         {uint8(8), "i8e"},
42         {uint16(16), "i16e"},
43         {uint32(32), "i32e"},
44         {uint64(64), "i64e"},
45         {random_struct{123, "nono", "hello"}, "d3:CDE5:hello3:abci123ee"},
46         {map[string]string{"a": "b", "c": "d"}, "d1:a1:b1:c1:de"},
47         {[]byte{1, 2, 3, 4}, "4:\x01\x02\x03\x04"},
48         {[4]byte{1, 2, 3, 4}, "li1ei2ei3ei4ee"},
49         {nil, ""},
50         {[]byte{}, "0:"},
51         {"", "0:"},
52         {[]int{}, "le"},
53         {map[string]int{}, "de"},
54         {&dummy{1, 2, 3}, "i2ei3ei4e"},
55 }
56
57 func TestRandomEncode(t *testing.T) {
58         for _, test := range random_encode_tests {
59                 data, err := Marshal(test.value)
60                 if err != nil {
61                         t.Fatal(err)
62                 }
63                 if !bytes.Equal(data, []byte(test.expected)) {
64                         t.Errorf("got: %s, expected: %s\n",
65                                 string(data), string(test.expected))
66                 }
67         }
68 }