File tree Expand file tree Collapse file tree
src/FSharp.Data.GraphQL.Shared
tests/FSharp.Data.GraphQL.Tests Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -79,23 +79,25 @@ and FragmentDefinition = {
7979 SelectionSet: Selection list
8080}
8181
82- /// 2.2.7 Input Values
82+ /// 2.9 Input Values
8383and Value =
84- /// 2.2.7 .1 Int Value
84+ /// 2.9 .1 Int Value
8585 | IntValue of int64
86- /// 2.2.7 .2 Float Value
86+ /// 2.9 .2 Float Value
8787 | FloatValue of double
88- /// 2.2.7 .3 Boolean Value
88+ /// 2.9 .3 Boolean Value
8989 | BooleanValue of bool
90- /// 2.2.7 .4 String Value
90+ /// 2.9 .4 String Value
9191 | StringValue of string
92- /// 2.2.7.5 Enum Value
92+ /// 2.9.5 Null Value
93+ | NullValue
94+ /// 2.9.6 Enum Value
9395 | EnumValue of string
94- /// 2.2.7.6 List Value
96+ /// 2.9.7 List Value
9597 | ListValue of Value list
96- /// 2.2.7.7 Input Object Values
98+ /// 2.9.8 Input Object Values
9799 | ObjectValue of Map < string , Value >
98- /// 2.2.8 Variables
100+ /// 2.10 Variables
99101 | Variable of string
100102
101103/// 2.2.8 Variables
Original file line number Diff line number Diff line change @@ -100,6 +100,7 @@ type Document with
100100 | BooleanValue x -> sb.Append( if x then " true" else " false" )
101101 | StringValue x -> sb.Append( withQuotes x)
102102 | EnumValue x -> sb.Append( x)
103+ | NullValue -> sb.Append( " null" )
103104 | ListValue x ->
104105 if x.Length > 0 then sb.Append( " [ " )
105106 match x with
Original file line number Diff line number Diff line change @@ -142,8 +142,10 @@ module internal Internal =
142142 pipe3 integerPart fractionPart exponentPart
143143 ( fun integer fraction exponent -> integer + fraction + exponent ) ] |>> float
144144
145+ // 2.9.5 Null Value
146+ let nullValue = stoken " null" >>% NullValue
145147
146- // 2.9.5 EnumValue
148+ // 2.9.6 Enum Value
147149 // Name but not true or false or null
148150 // (boolean parser is run first)
149151 let enumValue = name
@@ -154,24 +156,26 @@ module internal Internal =
154156 let variable = pchar '$' >>. name
155157
156158
157- // 2.9.7 Input Object Values
159+ // 2.9.8 Input Object Values
158160 let inputObject =
159161 betweenCharsMany '{' '}' ( pairBetween ':' name inputValue <?> " ObjectField" )
160162 |>> Map.ofList
161163
164+ // 2.9.7 List Value
162165 let listValue =
163166 betweenCharsMany '[' ']' ( token_ ws inputValue <?> " Value" )
164167
165168
166169 // 2.9 Value
167170 // Variable|IntValue|FloatValue|StringValue|
168- // BooleanValue|EnumValue|ListValue|ObjectValue
171+ // BooleanValue|NullValue| EnumValue|ListValue|ObjectValue
169172 inputValueRef :=
170173 choice [ variable |>> Variable <?> " Variable"
171174 ( attempt floatValue) |>> FloatValue <?> " Float"
172175 integerValue |>> IntValue <?> " Integer"
173176 stringValue |>> StringValue <?> " String"
174177 ( attempt booleanValue) |>> BooleanValue <?> " Boolean"
178+ nullValue
175179 enumValue |>> EnumValue <?> " Enum"
176180 inputObject |>> ObjectValue <?> " InputObject"
177181 listValue |>> ListValue <?> " ListValue" ]
Original file line number Diff line number Diff line change @@ -36,6 +36,7 @@ let queryWithSelection selection = queryWithSelections [ selection ]
3636
3737let arg name value = { Argument.Name = name; Value = value }
3838let argInt name value = arg name ( IntValue ( int64 value))
39+ let argNull name = arg name NullValue
3940let fieldWithNameAndArgsAndSelections name arguments selections =
4041 Field { Name = name
4142 Alias = None
@@ -269,6 +270,19 @@ let ``parser should parse GraphQL``() =
269270 }
270271 }
271272 }"""
273+
274+ [<Fact>]
275+ let ``parser should parse query with null arguments`` () =
276+ let expected =
277+ [ field " name" ]
278+ |> fieldWithNameAndArgsAndSelections " user" [ argNull " id" ]
279+ |> queryWithSelection
280+ |> doc1
281+ test expected """ {
282+ user(id: null) {
283+ name
284+ }
285+ }"""
272286
273287[<Fact>]
274288let ``parser should parse query with arguments`` () =
You can’t perform that action at this time.
0 commit comments