storrent/bencode/bencode_test.go
2026-01-19 21:13:01 +09:00

114 lines
1.6 KiB
Go

package bencode
import "testing"
func TestDecode(t *testing.T) {
tests := []struct {
in string
want any
err bool
}{
{
in: "4:spam",
want: "spam",
},
{
in: "0:",
want: "",
},
{
in: "i42e",
want: int64(42),
},
{
in: "i-42e",
want: int64(-42),
},
{
in: "i0e",
want: int64(0),
},
{
in: "",
err: true,
},
}
for _, tt := range tests {
t.Run(tt.in, func(t *testing.T) {
got, _, err := Decode([]byte(tt.in))
if tt.err {
if err == nil {
t.Error("expected error")
}
return
}
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if got != tt.want {
t.Errorf("got %v, want %v", got, tt.want)
}
})
}
}
func TestEncode(t *testing.T) {
tests := []struct {
name string
in any
want string
}{
{
name: "string",
in: "spam",
want: "4:spam",
},
{
name: "empty string",
in: "",
want: "0:",
},
{
name: "int",
in: int64(42),
want: "i42e",
},
{
name: "negative int",
in: int64(-42),
want: "i-42e",
},
{
name: "list",
in: []any{"a", "b"},
want: "l1:a1:be",
},
{
name: "empty list",
in: []any{},
want: "le",
},
{
name: "dict",
in: map[string]any{"b": int64(2), "a": int64(1)},
want: "d1:ai1e1:bi2ee",
},
{
name: "empty dict",
in: map[string]any{},
want: "de",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := Encode(tt.in)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if string(got) != tt.want {
t.Errorf("got %s, want %s", got, tt.want)
}
})
}
}