@@ -14,6 +14,7 @@ main = defaultMain [testSuite]
1414testSuite :: Test
1515testSuite = testGroup "Network.Wai.Parse"
1616 [ testCase "parseQueryString" caseParseQueryString
17+ , testCase "parseQueryString with question mark" caseParseQueryStringQM
1718 , testCase "parseCookies" caseParseCookies
1819 , testCase "parseHttpAccept" caseParseHttpAccept
1920 , testCase "parseRequestBody" caseParseRequestBody
@@ -37,6 +38,23 @@ caseParseQueryString = do
3738 go [("/", "")] "%2f"
3839 go [("foo bar", "")] "foo+bar"
3940
41+caseParseQueryStringQM :: Assertion
42+caseParseQueryStringQM = do
43+ let go l r =
44+ map (S8.pack *** S8.pack) l
45+ @=? parseQueryString (S8.pack $ '?' : r)
46+
47+ go [] ""
48+ go [("foo", "")] "foo"
49+ go [("foo", "bar")] "foo=bar"
50+ go [("foo", "bar"), ("baz", "bin")] "foo=bar&baz=bin"
51+ go [("%Q", "")] "%Q"
52+ go [("%1Q", "")] "%1Q"
53+ go [("%1", "")] "%1"
54+ go [("/", "")] "%2F"
55+ go [("/", "")] "%2f"
56+ go [("foo bar", "")] "foo+bar"
57+
4058caseParseCookies :: Assertion
4159caseParseCookies = do
4260 let input = S8.pack "a=a1;b=b2; c=c3"