1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
# frozen_string_literal: true
require_relative 'helper'
require_relative '../lib/rack/query_parser'
describe Rack::QueryParser do
it "can normalize values with missing values" do
query_parser = Rack::QueryParser.make_default(Rack::Utils.key_space_limit, 8)
query_parser.parse_nested_query("a=a").must_equal({"a" => "a"})
query_parser.parse_nested_query("a=").must_equal({"a" => ""})
query_parser.parse_nested_query("a").must_equal({"a" => nil})
end
it "accepts bytesize_limit to specify maximum size of query string to parse" do
query_parser = Rack::QueryParser.make_default(Rack::Utils.key_space_limit, 32, bytesize_limit: 3)
query_parser.parse_query("a=a").must_equal({"a" => "a"})
query_parser.parse_nested_query("a=a").must_equal({"a" => "a"})
query_parser.parse_nested_query("a=a", '&').must_equal({"a" => "a"})
proc { query_parser.parse_query("a=aa") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=aa") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=aa", '&') }.must_raise Rack::QueryParser::QueryLimitError
end
it "accepts params_limit to specify maximum number of query parameters to parse" do
query_parser = Rack::QueryParser.make_default(Rack::Utils.key_space_limit, 32, params_limit: 2)
query_parser.parse_query("a=a&b=b").must_equal({"a" => "a", "b" => "b"})
query_parser.parse_nested_query("a=a&b=b").must_equal({"a" => "a", "b" => "b"})
query_parser.parse_nested_query("a=a&b=b", '&').must_equal({"a" => "a", "b" => "b"})
proc { query_parser.parse_query("a=a&b=b&c=c") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=a&b=b&c=c", '&') }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_query("b[]=a&b[]=b&b[]=c") }.must_raise Rack::QueryParser::QueryLimitError
query_parser.parse_query("a=a;b=b").must_equal({"a" => "a", "b" => "b"})
query_parser.parse_nested_query("a=a;b=b").must_equal({"a" => "a", "b" => "b"})
query_parser.parse_nested_query("a=a;b=b", ';').must_equal({"a" => "a", "b" => "b"})
proc { query_parser.parse_query("a=a;b=b;c=c") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=a;b=b;c=c", ';') }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_query("b[]=a;b[]=b;b[]=c") }.must_raise Rack::QueryParser::QueryLimitError
end
end
|