summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2020-01-28 16:03:42 -0800
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-01-30 12:26:19 +1300
commit022815d3264781bd9cbd4d8d514998baabbc3edd (patch)
tree25a456b3ae58343f1c90a2435e5fb48737c9720d
parent7a195a79a1270dfff2470580216095968fad29ec (diff)
downloadrack-022815d3264781bd9cbd4d8d514998baabbc3edd.tar.gz
Add covering tests for Lint
3332 / 3380 LOC (98.58%) covered.
-rw-r--r--test/spec_lint.rb56
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