diff --git a/lib/puma/null_io.rb b/lib/puma/null_io.rb index d739de9621..0ce09c459f 100644 --- a/lib/puma/null_io.rb +++ b/lib/puma/null_io.rb @@ -4,7 +4,6 @@ module Puma # Used as the value for rack.input when the request has no body. # class NullIO - # Always returns nil # def gets @@ -16,10 +15,10 @@ def gets def each end - # Always returns nil + # Mimics IO#read with no data # - def read(count) - nil + def read(count=nil,buffer=nil) + (count && count > 0) ? nil : "" end # Does nothing diff --git a/test/test_null_io.rb b/test/test_null_io.rb new file mode 100644 index 0000000000..380cfe5acd --- /dev/null +++ b/test/test_null_io.rb @@ -0,0 +1,31 @@ +require 'puma/null_io' +require 'test/unit' + +class TestNullIO < Test::Unit::TestCase + attr_accessor :nio + def setup + self.nio = Puma::NullIO.new + end + + def test_read_with_no_arguments + assert_equal "", nio.read + end + + def test_read_with_nil_length + assert_equal "", nio.read(nil) + end + + def test_read_with_zero_length + assert_equal "", nio.read(0) + end + + def test_read_with_positive_integer_length + assert_nil nio.read(1) + end + + def test_read_with_length_and_buffer + buf = "" + assert_nil nio.read(1,buf) + assert_equal "", buf + end +end