spec/request/parser_spec.rb in thin-1.2.4 vs spec/request/parser_spec.rb in thin-1.2.5

- old
+ new

@@ -207,9 +207,37 @@ "GET /index.html HTTP/1.1\r\nhoS-T: localhost\r\n\r\n" ].each { |req_str| parser = HttpParser.new req = {} nread = parser.execute(req, req_str, 0) - req.should be_has_key('HTTP_HOS_T') + req.should have_key('HTTP_HOS_T') } + end + + it "should parse PATH_INFO with semicolon" do + qs = "QUERY_STRING" + pi = "PATH_INFO" + { + "/1;a=b?c=d&e=f" => { qs => "c=d&e=f", pi => "/1;a=b" }, + "/1?c=d&e=f" => { qs => "c=d&e=f", pi => "/1" }, + "/1;a=b" => { qs => "", pi => "/1;a=b" }, + "/1;a=b?" => { qs => "", pi => "/1;a=b" }, + "/1?a=b;c=d&e=f" => { qs => "a=b;c=d&e=f", pi => "/1" }, + "*" => { qs => "", pi => "" }, + }.each do |uri, expect| + parser = HttpParser.new + env = {} + nread = parser.execute(env, "GET #{uri} HTTP/1.1\r\nHost: www.example.com\r\n\r\n", 0) + + env[pi].should == expect[pi] + env[qs].should == expect[qs] + env["REQUEST_URI"].should == uri + + next if uri == "*" + + # Validate w/ Ruby's URI.parse + uri = URI.parse("http://example.com#{uri}") + env[qs].should == uri.query.to_s + env[pi].should == uri.path + end end end \ No newline at end of file