2014-03-24 06:25:59 +00:00
|
|
|
package data
|
|
|
|
|
|
|
|
import (
|
2014-03-25 00:25:07 +00:00
|
|
|
"strings"
|
2014-03-24 06:25:59 +00:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestEncodeHelloWorld(t *testing.T) {
|
|
|
|
input := "hello world!"
|
|
|
|
output := encodeString(input)
|
|
|
|
expectedOutput := "12:hello world!,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncodeEmptyString(t *testing.T) {
|
|
|
|
input := ""
|
|
|
|
output := encodeString(input)
|
|
|
|
expectedOutput := "0:,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncodeEmptyList(t *testing.T) {
|
|
|
|
input := []string{}
|
|
|
|
output := encodeList(input)
|
|
|
|
expectedOutput := "0:,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncodeEmptyMap(t *testing.T) {
|
|
|
|
input := make(map[string][]string)
|
|
|
|
output := Encode(input)
|
|
|
|
expectedOutput := "000;"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncode1Key1Value(t *testing.T) {
|
|
|
|
input := make(map[string][]string)
|
|
|
|
input["hello"] = []string{"world"}
|
|
|
|
output := Encode(input)
|
|
|
|
expectedOutput := "000;5:hello,8:5:world,,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncode1Key2Value(t *testing.T) {
|
|
|
|
input := make(map[string][]string)
|
|
|
|
input["hello"] = []string{"beautiful", "world"}
|
|
|
|
output := Encode(input)
|
|
|
|
expectedOutput := "000;5:hello,20:9:beautiful,5:world,,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncodeEmptyValue(t *testing.T) {
|
|
|
|
input := make(map[string][]string)
|
|
|
|
input["foo"] = []string{}
|
|
|
|
output := Encode(input)
|
|
|
|
expectedOutput := "000;3:foo,0:,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncodeBinaryKey(t *testing.T) {
|
|
|
|
input := make(map[string][]string)
|
|
|
|
input["foo\x00bar\x7f"] = []string{}
|
|
|
|
output := Encode(input)
|
|
|
|
expectedOutput := "000;8:foo\x00bar\x7f,0:,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEncodeBinaryValue(t *testing.T) {
|
|
|
|
input := make(map[string][]string)
|
|
|
|
input["foo\x00bar\x7f"] = []string{"\x01\x02\x03\x04"}
|
|
|
|
output := Encode(input)
|
|
|
|
expectedOutput := "000;8:foo\x00bar\x7f,7:4:\x01\x02\x03\x04,,"
|
|
|
|
if output != expectedOutput {
|
|
|
|
t.Fatalf("'%v' != '%v'", output, expectedOutput)
|
|
|
|
}
|
|
|
|
}
|
2014-03-25 00:25:07 +00:00
|
|
|
|
|
|
|
func TestDecodeString(t *testing.T) {
|
|
|
|
validEncodedStrings := []struct{
|
|
|
|
input string
|
|
|
|
output string
|
|
|
|
skip int
|
|
|
|
}{
|
|
|
|
{"3:foo,", "foo", 6},
|
|
|
|
{"5:hello,", "hello", 8},
|
|
|
|
{"5:hello,5:world,", "hello", 8},
|
|
|
|
}
|
|
|
|
for _, sample := range validEncodedStrings {
|
|
|
|
output, skip, err := decodeString(sample.input)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("error decoding '%v': %v", sample.input, err)
|
|
|
|
}
|
|
|
|
if skip != sample.skip {
|
|
|
|
t.Fatalf("invalid skip: %v!=%v", skip, sample.skip)
|
|
|
|
}
|
|
|
|
if output != sample.output {
|
|
|
|
t.Fatalf("invalid output: %v!=%v", output, sample.output)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDecode1Key1Value(t *testing.T) {
|
|
|
|
input := "000;3:foo,6:3:bar,,"
|
|
|
|
output, err := Decode(input)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if v, exists := output["foo"]; !exists {
|
|
|
|
t.Fatalf("wrong output: %v\n", output)
|
|
|
|
} else if len(v) != 1 || strings.Join(v, "") != "bar" {
|
|
|
|
t.Fatalf("wrong output: %v\n", output)
|
|
|
|
}
|
|
|
|
}
|