@@ -94,6 +94,69 @@ def test_allows_null_value():
94
94
parse ('{ fieldWithNullableStringInput(input: null) }' )
95
95
96
96
97
+ def test_parses_null_value_to_null ():
98
+ result = parse ('{ fieldWithObjectInput(input: {a: null, b: null, c: "C", d: null}) }' )
99
+ values = result .definitions [0 ].selection_set .selections [0 ].arguments [0 ].value .fields
100
+ expected = (
101
+ (u'a' , ast .NullValue ()),
102
+ (u'b' , ast .NullValue ()),
103
+ (u'c' , ast .StringValue (value = u'C' )),
104
+ (u'd' , ast .NullValue ()),
105
+ )
106
+ for name_value , actual in zip (expected , values ):
107
+ assert name_value == (actual .name .value , actual .value )
108
+
109
+
110
+ def test_parses_null_value_in_list ():
111
+ result = parse ('{ fieldWithObjectInput(input: {b: ["A", null, "C"], c: "C"}) }' )
112
+ assert result == ast .Document (
113
+ definitions = [
114
+ ast .OperationDefinition (
115
+ operation = 'query' , name = None , variable_definitions = None , directives = [],
116
+ selection_set = ast .SelectionSet (
117
+ selections = [
118
+ ast .Field (
119
+ alias = None ,
120
+ name = ast .Name (value = u'fieldWithObjectInput' ),
121
+ directives = [],
122
+ selection_set = None ,
123
+ arguments = [
124
+ ast .Argument (
125
+ name = ast .Name (value = u'input' ),
126
+ value = ast .ObjectValue (
127
+ fields = [
128
+ ast .ObjectField (
129
+ name = ast .Name (value = u'b' ),
130
+ value = ast .ListValue (
131
+ values = [
132
+ ast .StringValue (value = u'A' ),
133
+ ast .NullValue (),
134
+ ast .StringValue (value = u'C' ),
135
+ ],
136
+ ),
137
+ ),
138
+ ast .ObjectField (
139
+ name = ast .Name (value = u'c' ),
140
+ value = ast .StringValue (value = u'C' ),
141
+ ),
142
+ ]
143
+ ),
144
+ ),
145
+ ],
146
+ ),
147
+ ],
148
+ ),
149
+ ),
150
+ ],
151
+ )
152
+
153
+
154
+ def test_null_as_name ():
155
+ result = parse ('{ thingy(null: "stringcheese") }' )
156
+ assert result .definitions [0 ].selection_set .selections [0 ].name .value == 'thingy'
157
+ assert result .definitions [0 ].selection_set .selections [0 ].arguments [0 ].name .value == 'null'
158
+
159
+
97
160
def test_parses_multi_byte_characters ():
98
161
result = parse (u'''
99
162
# This comment has a \u0A0A multi-byte character.
0 commit comments