@@ -31,6 +31,85 @@ let parseQuery =
3131 let subject =
3232 Parsing.parseData " "
3333 Expect.equal subject.Length 0 " Should be empty list"
34+
35+ testCase " can parse equal signs in query" <| fun _ ->
36+
37+ let subject =
38+ Parsing.parseData " q=a=b"
39+ Expect.equal subject.Length 1 " Should have one value"
40+ let actual = subject.[ 0 ] |> snd |> Option.get
41+ Expect.equal actual " a=b" " Should contain a=b"
42+
43+ testCase " can parse query with missing values" <| fun _ ->
44+ let subject =
45+ Parsing.parseData " a=1&b=&c=3&d"
46+ Expect.equal subject.Length 4 " Should have four values"
47+
48+ let actualB = subject.[ 1 ] |> snd |> Option.get
49+ Expect.equal actualB " " " b should be empty string"
50+
51+ let actualD = subject.[ 3 ] |> snd
52+ Expect.equal actualD ( Some( " " )) " d should be Some(\"\" )"
53+
54+ testCase " can parse query with multiple =" <| fun _ ->
55+ let subject =
56+ Parsing.parseData " a==1==&b===2==="
57+ Expect.equal subject.Length 2 " Should have two values"
58+ let actualA = subject.[ 0 ] |> snd |> Option.get
59+ Expect.equal actualA " =1==" " a should be '=1=='"
60+ let actualB = subject.[ 1 ] |> snd |> Option.get
61+ Expect.equal actualB " ==2===" " b should be '==2==='"
62+
63+ testCase " can parse query with empty values only" <| fun _ ->
64+ let subject =
65+ Parsing.parseData " a=&b=&c="
66+ Expect.equal subject.Length 3 " Should have three values"
67+ let actualA = subject.[ 0 ] |> snd |> Option.get
68+ Expect.equal actualA " " " a should be empty string"
69+ let actualB = subject.[ 1 ] |> snd |> Option.get
70+ Expect.equal actualB " " " b should be empty string"
71+ let actualC = subject.[ 2 ] |> snd |> Option.get
72+ Expect.equal actualC " " " c should be empty string"
73+
74+ testCase " can parse query with no keys only values" <| fun _ ->
75+ let subject =
76+ Parsing.parseData " =1&=2&=3"
77+ Expect.equal subject.Length 3 " Should have three values"
78+ let actual1 = subject.[ 0 ] |> snd |> Option.get
79+ Expect.equal actual1 " 1" " first value should be '1'"
80+ let actual2 = subject.[ 1 ] |> snd |> Option.get
81+ Expect.equal actual2 " 2" " second value should be '2'"
82+ let actual3 = subject.[ 2 ] |> snd |> Option.get
83+ Expect.equal actual3 " 3" " third value should be '3'"
84+
85+ testCase " can parse query with only keys no values" <| fun _ ->
86+ let subject =
87+ Parsing.parseData " a&b&c"
88+ Expect.equal subject.Length 3 " Should have three values"
89+ let actualA = subject.[ 0 ] |> snd |> Option.get
90+ Expect.equal actualA " " " a should be empty string"
91+ let actualB = subject.[ 1 ] |> snd |> Option.get
92+ Expect.equal actualB " " " b should be empty string"
93+ let actualC = subject.[ 2 ] |> snd |> Option.get
94+ Expect.equal actualC " " " c should be empty string"
95+
96+ testCase " can parse query with mixed cases" <| fun _ ->
97+ let subject =
98+ Parsing.parseData " a=1&b&c=&=4&=&&d==5=="
99+ Expect.equal subject.Length 6 " Should have six values"
100+ let actualA = subject.[ 0 ] |> snd |> Option.get
101+ Expect.equal actualA " 1" " a should be '1'"
102+ let actualB = subject.[ 1 ] |> snd |> Option.get
103+ Expect.equal actualB " " " b should be empty string"
104+ let actualC = subject.[ 2 ] |> snd |> Option.get
105+ Expect.equal actualC " " " c should be empty string"
106+ let actualFirstEmptyKey = subject.[ 3 ] |> snd |> Option.get
107+ Expect.equal actualFirstEmptyKey " 4" " first empty key should be '4'"
108+ let actualSecondEmptyKey = subject.[ 4 ] |> snd |> Option.get
109+ Expect.equal actualSecondEmptyKey " " " second empty key should be empty string"
110+ let actualD = subject.[ 5 ] |> snd |> Option.get
111+ Expect.equal actualD " =5==" " d should be '=5=='"
112+
34113 ]
35114
36115[<Tests>]
0 commit comments