diff options
author | Jeremy Evans <code@jeremyevans.net> | 2020-01-28 16:03:42 -0800 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2020-01-30 12:26:19 +1300 |
commit | 022815d3264781bd9cbd4d8d514998baabbc3edd (patch) | |
tree | 25a456b3ae58343f1c90a2435e5fb48737c9720d | |
parent | 7a195a79a1270dfff2470580216095968fad29ec (diff) | |
download | rack-022815d3264781bd9cbd4d8d514998baabbc3edd.tar.gz |
Add covering tests for Lint
3332 / 3380 LOC (98.58%) covered.
-rw-r--r-- | test/spec_lint.rb | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/test/spec_lint.rb b/test/spec_lint.rb index f79de53a..d55dfa70 100644 --- a/test/spec_lint.rb +++ b/test/spec_lint.rb @@ -102,11 +102,37 @@ describe Rack::Lint do }.must_raise(Rack::Lint::LintError). message.must_equal "session {} must respond to fetch and []" + obj = Object.new + def obj.inspect; '[]' end lambda { - Rack::Lint.new(nil).call(env("rack.logger" => [])) + Rack::Lint.new(nil).call(env("rack.logger" => obj)) }.must_raise(Rack::Lint::LintError). message.must_equal "logger [] must respond to info" + def obj.info(*) end + lambda { + Rack::Lint.new(nil).call(env("rack.logger" => obj)) + }.must_raise(Rack::Lint::LintError). + message.must_equal "logger [] must respond to debug" + + def obj.debug(*) end + lambda { + Rack::Lint.new(nil).call(env("rack.logger" => obj)) + }.must_raise(Rack::Lint::LintError). + message.must_equal "logger [] must respond to warn" + + def obj.warn(*) end + lambda { + Rack::Lint.new(nil).call(env("rack.logger" => obj)) + }.must_raise(Rack::Lint::LintError). + message.must_equal "logger [] must respond to error" + + def obj.error(*) end + lambda { + Rack::Lint.new(nil).call(env("rack.logger" => obj)) + }.must_raise(Rack::Lint::LintError). + message.must_equal "logger [] must respond to fatal" + lambda { Rack::Lint.new(nil).call(env("rack.multipart.buffer_size" => 0)) }.must_raise(Rack::Lint::LintError). @@ -125,7 +151,7 @@ describe Rack::Lint do message.must_equal "rack.multipart.tempfile_factory return value must respond to #<<" lambda { - Rack::Lint.new(nil).call(env("REQUEST_METHOD" => "FUCKUP?")) + Rack::Lint.new(nil).call(env("REQUEST_METHOD" => "FUCKUP?", "rack.multipart.tempfile_factory" => lambda { |filename, content_type| String.new })) }.must_raise(Rack::Lint::LintError). message.must_match(/REQUEST_METHOD/) @@ -203,7 +229,9 @@ describe Rack::Lint do it "notice error errors" do lambda { - Rack::Lint.new(nil).call(env("rack.errors" => "")) + io = StringIO.new + io.binmode + Rack::Lint.new(nil).call(env("rack.errors" => "", "rack.input" => io)) }.must_raise(Rack::Lint::LintError). message.must_match(/does not respond to #puts/) end @@ -242,9 +270,12 @@ describe Rack::Lint do it "notice header errors" do lambda { + io = StringIO.new('a') + io.binmode Rack::Lint.new(lambda { |env| + env['rack.input'].each{ |x| } [200, Object.new, []] - }).call(env({})) + }).call(env({"rack.input" => io})) }.must_raise(Rack::Lint::LintError). message.must_equal "headers object should respond to #each, but doesn't (got Object as headers)" @@ -564,6 +595,23 @@ describe Rack::Lint do assert_lint nil, ''.dup assert_lint 1, ''.dup end + + it "notice hijack errors" do + lambda { + Rack::Lint.new(lambda { |env| + env['rack.hijack'].call + [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []] + }).call(env({'rack.hijack?' => true, 'rack.hijack' => lambda { Object.new } })) + }.must_raise(Rack::Lint::LintError). + message.must_match(/rack.hijack_io must respond to read/) + + Rack::Lint.new(lambda { |env| + env['rack.hijack'].call + [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []] + }).call(env({'rack.hijack?' => true, 'rack.hijack' => lambda { StringIO.new }, 'rack.hijack_io' => StringIO.new })). + first.must_equal 201 + end + end describe "Rack::Lint::InputWrapper" do |