diff --git a/Rakefile b/Rakefile index 97969fe..73162e6 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,6 @@ require 'rake/gempackagetask' require 'rake/extensiontask' +require 'rake/testtask' $:.unshift File.join(File.dirname(__FILE__), 'lib') require 'redis_ext/version' @@ -59,3 +60,9 @@ Rake::Task[:clean].enhance(['hiredis:clean']) # Build from scratch task :build => [:clean, :compile] + +desc "Run tests" +Rake::TestTask.new(:test) do |t| + t.libs << "test" + t.pattern = 'test/**/*_test.rb' +end diff --git a/test/reader_test.rb b/test/reader_test.rb new file mode 100644 index 0000000..0e9d625 --- /dev/null +++ b/test/reader_test.rb @@ -0,0 +1,59 @@ +require 'test/unit' +require 'redis_ext' + +class ReaderTest < Test::Unit::TestCase + def setup + @reader = RedisExt::Reader.new + end + + def test_nil + @reader.feed("$-1\r\n") + assert_equal nil, @reader.gets + end + + def test_integer + value = 2**63-1 # largest 64-bit signed integer + @reader.feed(":#{value.to_s}\r\n") + assert_equal value, @reader.gets + end + + def test_status_string + @reader.feed("+status\r\n") + assert_equal "status", @reader.gets + end + + def test_error_string + @reader.feed("-error\r\n") + assert_equal "error", @reader.gets + end + + def test_empty_bulk_string + @reader.feed("$0\r\n\r\n") + assert_equal "", @reader.gets + end + + def test_bulk_string + @reader.feed("$5\r\nhello\r\n") + assert_equal "hello", @reader.gets + end + + def test_null_multi_bulk + @reader.feed("*-1\r\n") + assert_equal nil, @reader.gets + end + + def test_empty_multi_bulk + @reader.feed("*0\r\n") + assert_equal [], @reader.gets + end + + def test_multi_bulk + @reader.feed("*2\r\n$5\r\nhello\r\n$5\r\nworld\r\n") + assert_equal ["hello", "world"], @reader.gets + end + + def test_nested_multi_bulk + @reader.feed("*2\r\n*2\r\n$5\r\nhello\r\n$5\r\nworld\r\n$1\r\n!\r\n") + assert_equal [["hello", "world"], "!"], @reader.gets + end +end