aboutsummaryrefslogtreecommitdiff
path: root/bencode/decode_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'bencode/decode_test.go')
-rw-r--r--bencode/decode_test.go163
1 files changed, 73 insertions, 90 deletions
diff --git a/bencode/decode_test.go b/bencode/decode_test.go
index e83f6a8..a39dc9f 100644
--- a/bencode/decode_test.go
+++ b/bencode/decode_test.go
@@ -6,19 +6,21 @@ import (
func TestDecodeString(t *testing.T) {
tests := []struct {
- in string
- out string
- end int
+ in string
+ start int
+ out string
+ n int
}{
- {in: "0:", out: "", end: 1},
- {in: "5:hello", out: "hello", end: 6},
- {in: "7:goodbye", out: "goodbye", end: 8},
- {in: "11:hello world", out: "hello world", end: 13},
- {in: "20:1-5%3~]+=\\| []>.,`??", out: "1-5%3~]+=\\| []>.,`??", end: 22},
+ {in: "0:", start: 0, out: "", n: 2},
+ {in: "5:hello", start: 0, out: "hello", n: 7},
+ {in: "7:goodbye", start: 0, out: "goodbye", n: 9},
+ {in: "11:hello world", start: 0, out: "hello world", n: 14},
+ {in: "20:1-5%3~]+=\\| []>.,`??", start: 0, out: "1-5%3~]+=\\| []>.,`??", n: 23},
+ {in: "123412347:goodbye", start: 8, out: "goodbye", n: 9},
}
for _, tt := range tests {
- r1, end, err := DecodeString([]byte(tt.in), 0)
+ r1, n, err := DecodeString([]byte(tt.in), tt.start)
if err != nil {
t.Errorf("DecodeString(%q) failed with error %q", tt.in, err)
}
@@ -27,17 +29,19 @@ func TestDecodeString(t *testing.T) {
t.Errorf("DecodeString(%q) => %q, expected %q", tt.in, r1, tt.out)
}
- if end != tt.end {
- t.Errorf("DecodeString(%q) ended at %d, expected %d", tt.in, end, tt.end)
+ if n != tt.n {
+ t.Errorf("DecodeString(%q) read %d, expected %d", tt.in, n, tt.n)
}
- r2, err := Decode([]byte(tt.in))
- if err != nil {
- t.Errorf("DecodeString(%q) failed with error %q", tt.in, err)
- }
+ if tt.start == 0 {
+ r2, err := Decode([]byte(tt.in))
+ if err != nil {
+ t.Errorf("Decode(%q) failed with error %q", tt.in, err)
+ }
- if r2 != tt.out {
- t.Errorf("DecodeString(%q) => %q, expected %q", tt.in, r2, tt.out)
+ if r2 != tt.out {
+ t.Errorf("Decode(%q) => %q, expected %q", tt.in, r2, tt.out)
+ }
}
}
@@ -45,19 +49,21 @@ func TestDecodeString(t *testing.T) {
func TestDecodeInt(t *testing.T) {
tests := []struct {
- in string
- out int64
- end int
+ in string
+ start int
+ out int64
+ n int
}{
- {in: "i0e", out: int64(0), end: 2},
- {in: "i5e", out: int64(5), end: 2},
- {in: "i-5e", out: int64(-5), end: 3},
- {in: "i1234567890e", out: int64(1234567890), end: 11},
- {in: "i-1234567890e", out: int64(-1234567890), end: 12},
+ {in: "i0e", start: 0, out: int64(0), n: 3},
+ {in: "i5e", start: 0, out: int64(5), n: 3},
+ {in: "i-5e", start: 0, out: int64(-5), n: 4},
+ {in: "i1234567890e", start: 0, out: int64(1234567890), n: 12},
+ {in: "i-1234567890e", start: 0, out: int64(-1234567890), n: 13},
+ {in: "asdfasdfi-5e", start: 8, out: int64(-5), n: 4},
}
for _, tt := range tests {
- r1, end, err := DecodeInt([]byte(tt.in), 0)
+ r1, n, err := DecodeInt([]byte(tt.in), tt.start)
if err != nil {
t.Errorf("DecodeInt(%q) failed with error %q", tt.in, err)
}
@@ -66,17 +72,19 @@ func TestDecodeInt(t *testing.T) {
t.Errorf("DecodeInt(%q) => %d, expected %d", tt.in, r1, tt.out)
}
- if end != tt.end {
- t.Errorf("DecodeInt(%q) ended at %d, expected %d", tt.in, end, tt.end)
+ if n != tt.n {
+ t.Errorf("DecodeInt(%q) read %d, expected %d", tt.in, n, tt.n)
}
- r2, err := Decode([]byte(tt.in))
- if err != nil {
- t.Errorf("DecodeInt(%q) failed with error %q", tt.in, err)
- }
+ if tt.start == 0 {
+ r2, err := Decode([]byte(tt.in))
+ if err != nil {
+ t.Errorf("Decode(%q) failed with error %q", tt.in, err)
+ }
- if r2 != tt.out {
- t.Errorf("DecodeInt(%q) => %d, expected %d", tt.in, r2, tt.out)
+ if r2 != tt.out {
+ t.Errorf("Decode(%q) => %d, expected %d", tt.in, r2, tt.out)
+ }
}
}
@@ -86,16 +94,16 @@ func TestDecodeList(t *testing.T) {
tests := []struct {
in string
out []interface{}
- end int
+ n int
}{
- {in: "l4:spam4:eggse", out: []interface{}{"spam", "eggs"}, end: 13},
- {in: "le", out: []interface{}{}, end: 1},
- {in: "li-1ei0ee", out: []interface{}{int64(-1), int64(0)}, end: 8},
- {in: "l4:testi-1ei0ee", out: []interface{}{"test", int64(-1), int64(0)}, end: 14},
+ {in: "l4:spam4:eggse", out: []interface{}{"spam", "eggs"}, n: 14},
+ {in: "le", out: []interface{}{}, n: 2},
+ {in: "li-1ei0ee", out: []interface{}{int64(-1), int64(0)}, n: 9},
+ {in: "l4:testi-1ei0ee", out: []interface{}{"test", int64(-1), int64(0)}, n: 15},
}
for _, tt := range tests {
- r1, end, err := DecodeList([]byte(tt.in), 0)
+ r1, n, err := DecodeList([]byte(tt.in), 0)
if err != nil {
t.Errorf("DecodeList(%q) failed with error %q", tt.in, err)
}
@@ -110,8 +118,8 @@ func TestDecodeList(t *testing.T) {
}
}
- if end != tt.end {
- t.Errorf("DecodeList(%q) ended at %d, expected %d", tt.in, end, tt.end)
+ if n != tt.n {
+ t.Errorf("DecodeList(%q) read %d, expected %d", tt.in, n, tt.n)
}
r2, err := Decode([]byte(tt.in))
@@ -134,18 +142,20 @@ func TestDecodeList(t *testing.T) {
func TestDecodeDict(t *testing.T) {
tests := []struct {
- in string
- out map[string]interface{}
- end int
+ in string
+ start int
+ out map[string]interface{}
+ n int
}{
- {in: "d4:spam4:eggse", out: map[string]interface{}{"spam": "eggs"}, end: 13},
- {in: "de", out: map[string]interface{}{}, end: 1},
- {in: "d4:testi-1e3:twoi0ee", out: map[string]interface{}{"test": int64(-1), "two": int64(0)}, end: 14},
- {in: "d4:testi0ee", out: map[string]interface{}{"test": int64(0)}, end: 10},
+ {in: "d4:spam4:eggse", start: 0, out: map[string]interface{}{"spam": "eggs"}, n: 14},
+ {in: "de", start: 0, out: map[string]interface{}{}, n: 2},
+ {in: "d4:testi-1e3:twoi0ee", start: 0, out: map[string]interface{}{"test": int64(-1), "two": int64(0)}, n: 20},
+ {in: "d4:testi0ee", start: 0, out: map[string]interface{}{"test": int64(0)}, n: 11},
+ {in: "012345d4:spam4:eggse", start: 6, out: map[string]interface{}{"spam": "eggs"}, n: 14},
}
for _, tt := range tests {
- r1, _, err := DecodeDict([]byte(tt.in), 0)
+ r1, _, err := DecodeDict([]byte(tt.in), tt.start)
if err != nil {
t.Errorf("DecodeDict(%q) failed with error %q", tt.in, err)
}
@@ -160,49 +170,22 @@ func TestDecodeDict(t *testing.T) {
}
}
- r2, err := Decode([]byte(tt.in))
- if err != nil {
- t.Errorf("Decode(%q) failed with error %q", tt.in, err)
- }
-
- r3, ok := r2.(map[string]interface{})
- if !ok {
- t.Errorf("Decode(%q) did not return a map", tt.in)
- }
-
- for k := range r3 {
- if r3[k] != tt.out[k] {
- t.Errorf("Decode(%q) => %v, expected %v", tt.in, r3, tt.out)
+ if tt.start == 0 {
+ r2, err := Decode([]byte(tt.in))
+ if err != nil {
+ t.Errorf("Decode(%q) failed with error %q", tt.in, err)
}
- }
- }
-}
-
-func TestReadUntil(t *testing.T) {
- tests := []struct {
- in string
- start int
- out string
- end int
- }{
- {in: "0:", start: 0, out: "0", end: 2},
- {in: "5:hello", start: 0, out: "5", end: 2},
- {in: "1234567:goodbye", start: 0, out: "1234567", end: 8},
- {in: "asdfasdfsa5:hello", start: 10, out: "5", end: 12},
- }
-
- for _, tt := range tests {
- r, i, err := readUntil([]byte(tt.in), tt.start, ':')
- if err != nil {
- t.Errorf("readUntil(%q) failed with error %q", tt.in, err)
- }
- if string(r) != tt.out {
- t.Errorf("readUntil(%q) => %q, expected %q", tt.in, r, tt.out)
- }
+ r3, ok := r2.(map[string]interface{})
+ if !ok {
+ t.Errorf("Decode(%q) did not return a map", tt.in)
+ }
- if i != tt.end {
- t.Errorf("readUntil(%q) ended at %d, expected %d", tt.in, i, tt.end)
+ for k := range r3 {
+ if r3[k] != tt.out[k] {
+ t.Errorf("Decode(%q) => %v, expected %v", tt.in, r3, tt.out)
+ }
+ }
}
}
}