@@ -131,6 +131,36 @@ TEST(ParserTests, RejectsUnicodeEscapeWithBadChars) {
131
131
expectError (" { field(arg:\"\\ uXXXF\" ) }" , " 1.13-15: bad Unicode escape sequence" );
132
132
}
133
133
134
+ TEST (ParserTests, AcceptsValidUnicodeEscape) {
135
+ const char *actualError = nullptr ;
136
+ auto ast = parseString (" { field(arg:\"\\ u0009Hello\" ) }" , &actualError);
137
+
138
+ EXPECT_TRUE (ast != nullptr );
139
+ EXPECT_STREQ (nullptr , actualError);
140
+ std::free ((void *)actualError);
141
+
142
+ auto doc = dynamic_cast <Document *>(ast.get ());
143
+ ASSERT_TRUE (doc != nullptr );
144
+
145
+ const auto & defs = doc->getDefinitions ();
146
+ ASSERT_EQ (1 , defs.size ());
147
+
148
+ auto opDef = dynamic_cast <OperationDefinition *>(defs[0 ].get ());
149
+ ASSERT_TRUE (opDef != nullptr );
150
+
151
+ ASSERT_EQ (1 , opDef->getSelectionSet ().getSelections ().size ());
152
+
153
+ auto field = dynamic_cast <Field *>(opDef->getSelectionSet ().getSelections ()[0 ].get ());
154
+ ASSERT_TRUE (field != nullptr );
155
+
156
+ auto *args = field->getArguments ();
157
+ ASSERT_NE (nullptr , args);
158
+ ASSERT_EQ (1 , args->size ());
159
+ auto *val = dynamic_cast <const StringValue *>(&(*args)[0 ]->getValue ());
160
+ ASSERT_NE (nullptr , val);
161
+ EXPECT_STREQ (" \t Hello" , val->getValue ());
162
+ }
163
+
134
164
TEST (ParserTests, TracksLocationAcrossStrings) {
135
165
expectError (" { field(arg:\"\\ uFEFF\\ n\" ) };" ,
136
166
" 1.26: unrecognized character ;" );
0 commit comments