From a1cdead607c2f054c0ad2d0a55a8c20af3a21381 Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Mon, 4 Aug 2014 17:52:07 +0000 Subject: [PATCH] define redisError type --- values.go | 24 ++++++++++++++++++++++-- values_test.go | 34 +++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/values.go b/values.go index 52209da..fbde077 100644 --- a/values.go +++ b/values.go @@ -16,8 +16,6 @@ var ( type value interface { } -type simpleString string - func readValue(b []byte) (value, error) { if len(b) < 2 { return nil, fmt.Errorf("unable to read redis protocol value: input is too small") @@ -25,11 +23,33 @@ func readValue(b []byte) (value, error) { switch b[0] { case start_string: return readString(b[1:]) + case start_error: + return readError(b[1:]) default: return nil, fmt.Errorf("unable to read redis protocol value: illegal start character: %c", b[0]) } } +// ------------------------------------------------------------------------------ + +type simpleString string + func readString(b []byte) (value, error) { return simpleString(strings.Trim(string(b), "\r\n")), nil } + +// ------------------------------------------------------------------------------ + +type redisError string + +func readError(b []byte) (value, error) { + return redisError(strings.Trim(string(b), "\r\n")), nil +} + + + + + + + + diff --git a/values_test.go b/values_test.go index 6e5c97f..2be9168 100644 --- a/values_test.go +++ b/values_test.go @@ -1,16 +1,32 @@ package main import ( - "testing" + "testing" ) -func TestSimpleString(t *testing.T) { - s, err := readValue([]byte(`+hello`)) - if err != nil { - t.Errorf("bad input: %v", err) - } - if s != simpleString("hello") { - t.Errorf("expected 'hello', got '%s'", s) - } +var valueTests = []struct { + in string + out value +}{ + {"+hello", simpleString("hello")}, + {"+one two", simpleString("one two")}, // intermediate space + {"+one two ", simpleString("one two ")}, // trailing space + {"+ one two", simpleString(" one two")}, // leading space + + {"-hello", redisError("hello")}, + {"-one two", redisError("one two")}, // intermediate space + {"-one two ", redisError("one two ")}, // trailing space + {"- one two", redisError(" one two")}, // leading space } +func TestValues(t *testing.T) { + for _, test := range valueTests { + v, err := readValue([]byte(test.in)) + if err != nil { + t.Errorf("failed value test: %v", err) + } + if v != test.out { + t.Errorf("expected %v, got %v", test.out, v) + } + } +}