mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-05 00:02:38 -04:00
* removed needless tests; * testing error paths; * removed some unreachable code; * removed branching of #parse calls;
74 lines
1.8 KiB
Ruby
74 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "test_helper"
|
|
|
|
class HTTP1ParserTest < Minitest::Test
|
|
class RequestObserver
|
|
include HTTPX
|
|
|
|
attr_reader :response, :parser
|
|
|
|
def initialize
|
|
@parser = Parser::HTTP1.new(self)
|
|
end
|
|
|
|
def on_headers(h)
|
|
headers = Headers.new(h)
|
|
@response = Response.new(mock_request, @parser.status_code, @parser.http_version.join("."), headers)
|
|
end
|
|
|
|
def on_data(data)
|
|
@response << data
|
|
end
|
|
|
|
def on_trailers(h)
|
|
@response.merge_headers(h)
|
|
end
|
|
|
|
def on_start; end
|
|
|
|
def on_complete; end
|
|
|
|
private
|
|
|
|
def mock_request
|
|
Request.new(:get, "http://google.com")
|
|
end
|
|
end
|
|
|
|
JSON.parse(File.read(File.expand_path("support/responses.json", __dir__))).each do |res_json|
|
|
res_json["headers"] ||= {}
|
|
|
|
define_method "test_parse_response_#{res_json["name"]}" do
|
|
observer = RequestObserver.new
|
|
parser = observer.parser
|
|
begin
|
|
parser << res_json["raw"].b
|
|
|
|
response = observer.response
|
|
|
|
if res_json.key?("upgrade") && (res_json["upgrade"] != 0)
|
|
expect(parser.upgrade?).to be true
|
|
expect(parser.upgrade_data).to eq(res_json["upgrade"])
|
|
end
|
|
|
|
assert parser.http_version[0] == res_json["http_major"]
|
|
assert parser.http_version[1] == res_json["http_minor"]
|
|
|
|
assert response.status == res_json["status_code"]
|
|
|
|
res_json["headers"].each do |field, value|
|
|
assert value == response.headers[field]
|
|
end
|
|
|
|
assert response.body.bytesize == res_json["body_size"] if res_json["body_size"]
|
|
assert response.body.to_s == res_json["body"]
|
|
rescue HTTPX::Parser::Error => e
|
|
raise e unless res_json["error"]
|
|
|
|
assert e.message == res_json["error"]
|
|
end
|
|
end
|
|
end
|
|
end
|