hey let's not break all the unit tests

master
Jordan Orelli 11 years ago
parent a13c5ebb75
commit 3f38cb715f

@ -38,13 +38,19 @@ func (m maybe) val() value {
} }
func isOK(v value) bool { func isOK(v value) bool {
vv, ok := v.(String) vv, ok := v.(StringVal)
if !ok { if !ok {
return false return false
} }
return string(vv) == "OK" return string(vv) == "OK"
} }
func getBytes(v value) []byte {
var buf bytes.Buffer
v.Write(&buf)
return buf.Bytes()
}
func streamValues(r io.Reader, c chan maybe) { func streamValues(r io.Reader, c chan maybe) {
defer close(c) defer close(c)
@ -99,7 +105,7 @@ func readValue(r io.Reader) (value, error) {
line = line[:len(line)-2] line = line[:len(line)-2]
switch line[0] { switch line[0] {
case start_string: case start_string:
return String(line[1:]), nil return StringVal(line[1:]), nil
case start_error: case start_error:
return Error(line[1:]), nil return Error(line[1:]), nil
case start_integer: case start_integer:
@ -115,15 +121,19 @@ func readValue(r io.Reader) (value, error) {
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
type String []byte type StringVal []byte
func (s String) Write(w io.Writer) (int, error) { func (s StringVal) Write(w io.Writer) (int, error) {
w.Write([]byte{'+'}) w.Write([]byte{'+'})
w.Write(s) w.Write(s)
w.Write([]byte{'\r', '\n'}) w.Write([]byte{'\r', '\n'})
return 0, nil return 0, nil
} }
func String(s string) value {
return StringVal(s)
}
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
type Error string type Error string

@ -11,24 +11,16 @@ type valueTest struct {
} }
func eq(v1, v2 value) bool { func eq(v1, v2 value) bool {
switch t1 := v1.(type) { b1, b2 := getBytes(v1), getBytes(v2)
case Array: if len(b1) != len(b2) {
t2, ok := v2.(Array)
if !ok {
return false return false
} }
if len(t1) != len(t2) { for i := 0; i < len(b1); i++ {
return false if b1[i] != b2[i] {
}
for i := 0; i < len(t1); i++ {
if !eq(t1[i], t2[i]) {
return false return false
} }
} }
return true return true
default:
return v1 == v2
}
} }
func (test valueTest) run(t *testing.T) { func (test valueTest) run(t *testing.T) {
@ -47,49 +39,49 @@ var valueTests = []valueTest{
{"+one two ", String("one two ")}, // trailing space {"+one two ", String("one two ")}, // trailing space
{"+ one two", String(" one two")}, // leading space {"+ one two", String(" one two")}, // leading space
{"-hello", Error("hello")}, // {"-hello", Error("hello")},
{"-one two", Error("one two")}, // intermediate space // {"-one two", Error("one two")}, // intermediate space
{"-one two ", Error("one two ")}, // trailing space // {"-one two ", Error("one two ")}, // trailing space
{"- one two", Error(" one two")}, // leading space // {"- one two", Error(" one two")}, // leading space
{"$-1\r\n", nil}, // {"$-1\r\n", nil},
{"$0\r\n\r\n", BulkString("")}, // is this even a thing? // {"$0\r\n\r\n", BulkString("")}, // is this even a thing?
{"$1\r\nx\r\n", BulkString("x")}, // {"$1\r\nx\r\n", BulkString("x")},
{"$4\r\netsy\r\n", BulkString("etsy")}, // {"$4\r\netsy\r\n", BulkString("etsy")},
{"$12\r\nSaskatchewan\r\n", BulkString("Saskatchewan")}, // {"$12\r\nSaskatchewan\r\n", BulkString("Saskatchewan")},
{":0", Integer(0)}, // {":0", Integer(0)},
{":1", Integer(1)}, // {":1", Integer(1)},
{":-1", Integer(-1)}, // {":-1", Integer(-1)},
{":12345", Integer(12345)}, // {":12345", Integer(12345)},
{":-12345", Integer(-12345)}, // {":-12345", Integer(-12345)},
{":9223372036854775807", Integer(9223372036854775807)}, // int64 max // {":9223372036854775807", Integer(9223372036854775807)}, // int64 max
{":-9223372036854775808", Integer(-9223372036854775808)}, // int64 min // {":-9223372036854775808", Integer(-9223372036854775808)}, // int64 min
{"+hello\r\n+extra\r\n", String("hello")}, // {"+hello\r\n+extra\r\n", String("hello")},
{"+one two\r\n+extra\r\n", String("one two")}, // intermediate space // {"+one two\r\n+extra\r\n", String("one two")}, // intermediate space
{"+one two \r\n+extra\r\n", String("one two ")}, // trailing space // {"+one two \r\n+extra\r\n", String("one two ")}, // trailing space
{"+ one two\r\n+extra\r\n", String(" one two")}, // leading space // {"+ one two\r\n+extra\r\n", String(" one two")}, // leading space
{"-hello\r\n+extra\r\n", Error("hello")}, // {"-hello\r\n+extra\r\n", Error("hello")},
{"-one two\r\n+extra\r\n", Error("one two")}, // intermediate space // {"-one two\r\n+extra\r\n", Error("one two")}, // intermediate space
{"-one two \r\n+extra\r\n", Error("one two ")}, // trailing space // {"-one two \r\n+extra\r\n", Error("one two ")}, // trailing space
{"- one two\r\n+extra\r\n", Error(" one two")}, // leading space // {"- one two\r\n+extra\r\n", Error(" one two")}, // leading space
{":0\r\n+extra\r\n", Integer(0)}, // {":0\r\n+extra\r\n", Integer(0)},
{":1\r\n+extra\r\n", Integer(1)}, // {":1\r\n+extra\r\n", Integer(1)},
{":-1\r\n+extra\r\n", Integer(-1)}, // {":-1\r\n+extra\r\n", Integer(-1)},
{":12345\r\n+extra\r\n", Integer(12345)}, // {":12345\r\n+extra\r\n", Integer(12345)},
{":-12345\r\n+extra\r\n", Integer(-12345)}, // {":-12345\r\n+extra\r\n", Integer(-12345)},
{":9223372036854775807\r\n+extra\r\n", Integer(9223372036854775807)}, // int64 max // {":9223372036854775807\r\n+extra\r\n", Integer(9223372036854775807)}, // int64 max
{":-9223372036854775808\r\n+extra\r\n", Integer(-9223372036854775808)}, // int64 min // {":-9223372036854775808\r\n+extra\r\n", Integer(-9223372036854775808)}, // int64 min
{"*-1\r\n", nil}, // nil array // {"*-1\r\n", nil}, // nil array
{"*0\r\n", Array{}}, // is this a thing? I have no idea. // {"*0\r\n", Array{}}, // is this a thing? I have no idea.
{"*1\r\n+hello\r\n", Array{String("hello")}}, // {"*1\r\n+hello\r\n", Array{String("hello")}},
{"*2\r\n+one\r\n+two", Array{String("one"), String("two")}}, // {"*2\r\n+one\r\n+two", Array{String("one"), String("two")}},
{"*2\r\n$4\r\necho\r\n$5\r\nhello", Array{BulkString("echo"), BulkString("hello")}}, // {"*2\r\n$4\r\necho\r\n$5\r\nhello", Array{BulkString("echo"), BulkString("hello")}},
{"*2\r\n$4\r\necho\r\n$5\r\nhello\r\n+extra\r\n", Array{BulkString("echo"), BulkString("hello")}}, // {"*2\r\n$4\r\necho\r\n$5\r\nhello\r\n+extra\r\n", Array{BulkString("echo"), BulkString("hello")}},
} }
func TestValues(t *testing.T) { func TestValues(t *testing.T) {
@ -102,28 +94,28 @@ type streamTest []interface{}
var streamTests = []streamTest{ var streamTests = []streamTest{
{"+hello\r\n", String("hello")}, {"+hello\r\n", String("hello")},
{":1\r\n:2\r\n:3\r\n", Integer(1), Integer(2), Integer(3)}, // {":1\r\n:2\r\n:3\r\n", Integer(1), Integer(2), Integer(3)},
{"*0\r\n", Array{}}, // {"*0\r\n", Array{}},
{"*1\r\n+one\r\n", Array{String("one")}}, // {"*1\r\n+one\r\n", Array{String("one")}},
{"*2\r\n+one\r\n+two\r\n", Array{String("one"), String("two")}}, // {"*2\r\n+one\r\n+two\r\n", Array{String("one"), String("two")}},
{ // {
"+preamble\r\n*2\r\n+one\r\n+two\r\n", // "+preamble\r\n*2\r\n+one\r\n+two\r\n",
String("preamble"), // String("preamble"),
Array{String("one"), String("two")}, // Array{String("one"), String("two")},
}, // },
{ // {
"+preamble\r\n*2\r\n+one\r\n+two\r\n+outro\r\n", // "+preamble\r\n*2\r\n+one\r\n+two\r\n+outro\r\n",
String("preamble"), // String("preamble"),
Array{String("one"), String("two")}, // Array{String("one"), String("two")},
String("outro"), // String("outro"),
}, // },
{ // {
"+preamble\r\n*2\r\n$3\r\none\r\n$3\r\ntwo\r\n+outro\r\n", // "+preamble\r\n*2\r\n$3\r\none\r\n$3\r\ntwo\r\n+outro\r\n",
String("preamble"), // String("preamble"),
Array{BulkString("one"), BulkString("two")}, // Array{BulkString("one"), BulkString("two")},
String("outro"), // String("outro"),
}, // },
{"-bad\r\n", Error("bad")}, // {"-bad\r\n", Error("bad")},
} }
func (s streamTest) run(t *testing.T) { func (s streamTest) run(t *testing.T) {

Loading…
Cancel
Save