blob: fddb431b190b325555ede91a41f9750cac296d40 [file] [log] [blame]
Austin Schuh3e95e5d2019-09-20 00:08:54 -07001#include "aos/json_to_flatbuffer.h"
2
Alexander Yeee61cac32023-02-11 19:40:40 -08003#include "aos/flatbuffer_merge.h"
Austin Schuh3e95e5d2019-09-20 00:08:54 -07004#include "aos/json_to_flatbuffer_generated.h"
Austin Schuh373f1762021-06-02 21:07:09 -07005#include "aos/testing/path.h"
Austin Schuh3e95e5d2019-09-20 00:08:54 -07006#include "flatbuffers/minireflect.h"
Brian Silverman5c710412021-02-09 19:09:32 -08007#include "gtest/gtest.h"
Austin Schuh3e95e5d2019-09-20 00:08:54 -07008
9namespace aos {
10namespace testing {
11
12class JsonToFlatbufferTest : public ::testing::Test {
13 public:
14 JsonToFlatbufferTest() {}
15
Brian Silvermanc5105ab2021-02-10 17:55:38 -080016 FlatbufferVector<reflection::Schema> Schema() {
Austin Schuh373f1762021-06-02 21:07:09 -070017 return FileToFlatbuffer<reflection::Schema>(
18 ArtifactPath("aos/json_to_flatbuffer.bfbs"));
Brian Silvermanc5105ab2021-02-10 17:55:38 -080019 }
20
Austin Schuh3e95e5d2019-09-20 00:08:54 -070021 bool JsonAndBack(const ::std::string str) { return JsonAndBack(str, str); }
22
23 bool JsonAndBack(const ::std::string in, const ::std::string out) {
24 printf("Testing: %s\n", in.c_str());
Brian Silvermanc5105ab2021-02-10 17:55:38 -080025 FlatbufferDetachedBuffer<Configuration> fb_typetable =
Austin Schuhadd6eb32020-11-09 21:24:26 -080026 JsonToFlatbuffer<Configuration>(in.data());
Brian Silvermanc5105ab2021-02-10 17:55:38 -080027 FlatbufferDetachedBuffer<Configuration> fb_reflection =
28 JsonToFlatbuffer(in.data(), FlatbufferType(&Schema().message()));
Austin Schuh3e95e5d2019-09-20 00:08:54 -070029
Brian Silvermanc5105ab2021-02-10 17:55:38 -080030 if (fb_typetable.span().size() == 0) {
31 return false;
32 }
33 if (fb_reflection.span().size() == 0) {
Austin Schuh3e95e5d2019-09-20 00:08:54 -070034 return false;
35 }
36
Brian Silvermanc5105ab2021-02-10 17:55:38 -080037 const ::std::string back_typetable = FlatbufferToJson(fb_typetable);
38 const ::std::string back_reflection = FlatbufferToJson(fb_reflection);
Austin Schuh3e95e5d2019-09-20 00:08:54 -070039
Brian Silvermanc5105ab2021-02-10 17:55:38 -080040 printf("Back to string via TypeTable: %s\n", back_typetable.c_str());
41 printf("Back to string via reflection: %s\n", back_reflection.c_str());
Austin Schuh3e95e5d2019-09-20 00:08:54 -070042
Brian Silvermanc5105ab2021-02-10 17:55:38 -080043 return back_typetable == out && back_reflection == out;
Austin Schuh3e95e5d2019-09-20 00:08:54 -070044 }
45};
46
47// Tests that the various escapes work as expected.
48TEST_F(JsonToFlatbufferTest, ValidEscapes) {
49 EXPECT_TRUE(
50 JsonAndBack("{ \"foo_string\": \"a\\\"b\\/c\\bd\\fc\\nd\\re\\tf\" }",
51 "{ \"foo_string\": \"a\\\"b/c\\bd\\fc\\nd\\re\\tf\" }"));
52}
53
54// Test the easy ones. Test every type, single, no nesting.
55TEST_F(JsonToFlatbufferTest, Basic) {
56 EXPECT_TRUE(JsonAndBack("{ \"foo_bool\": true }"));
57
58 EXPECT_TRUE(JsonAndBack("{ \"foo_byte\": 5 }"));
59 EXPECT_TRUE(JsonAndBack("{ \"foo_ubyte\": 5 }"));
60
61 EXPECT_TRUE(JsonAndBack("{ \"foo_short\": 5 }"));
62 EXPECT_TRUE(JsonAndBack("{ \"foo_ushort\": 5 }"));
63
64 EXPECT_TRUE(JsonAndBack("{ \"foo_int\": 5 }"));
65 EXPECT_TRUE(JsonAndBack("{ \"foo_uint\": 5 }"));
66
67 EXPECT_TRUE(JsonAndBack("{ \"foo_long\": 5 }"));
68 EXPECT_TRUE(JsonAndBack("{ \"foo_ulong\": 5 }"));
69
70 EXPECT_TRUE(JsonAndBack("{ \"foo_float\": 5.0 }"));
71 EXPECT_TRUE(JsonAndBack("{ \"foo_double\": 5.0 }"));
72
Alex Perrycb7da4b2019-08-28 19:35:56 -070073 EXPECT_TRUE(JsonAndBack("{ \"foo_enum\": \"None\" }"));
74 EXPECT_TRUE(JsonAndBack("{ \"foo_enum\": \"UType\" }"));
75
76 EXPECT_TRUE(JsonAndBack("{ \"foo_enum_default\": \"None\" }"));
77 EXPECT_TRUE(JsonAndBack("{ \"foo_enum_default\": \"UType\" }"));
78
Austin Schuh3e95e5d2019-09-20 00:08:54 -070079 EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"baz\" }"));
Brian Silverman5c710412021-02-09 19:09:32 -080080
81 EXPECT_TRUE(JsonAndBack("{ \"foo_enum_nonconsecutive\": \"Zero\" }"));
82 EXPECT_TRUE(JsonAndBack("{ \"foo_enum_nonconsecutive\": \"Big\" }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -070083}
84
Austin Schuh9fa0b8e2021-03-21 19:21:50 -070085// Tests that Inf is handled correctly
86TEST_F(JsonToFlatbufferTest, Inf) {
87 EXPECT_TRUE(JsonAndBack("{ \"foo_float\": inf }"));
88 EXPECT_TRUE(JsonAndBack("{ \"foo_float\": -inf }"));
89 EXPECT_TRUE(JsonAndBack("{ \"foo_double\": inf }"));
90 EXPECT_TRUE(JsonAndBack("{ \"foo_double\": -inf }"));
91}
92
Austin Schuhbba0c3c2019-11-29 22:00:34 -080093// Tests that NaN is handled correctly
94TEST_F(JsonToFlatbufferTest, Nan) {
95 EXPECT_TRUE(JsonAndBack("{ \"foo_float\": nan }"));
96 EXPECT_TRUE(JsonAndBack("{ \"foo_float\": -nan }"));
Austin Schuh9fa0b8e2021-03-21 19:21:50 -070097 EXPECT_TRUE(JsonAndBack("{ \"foo_double\": nan }"));
98 EXPECT_TRUE(JsonAndBack("{ \"foo_double\": -nan }"));
Austin Schuhbba0c3c2019-11-29 22:00:34 -080099}
100
Pallavi Madhukare2eb2812022-07-19 09:56:09 -0700101// Tests that unicode is handled correctly
102TEST_F(JsonToFlatbufferTest, Unicode) {
103 EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"\\uF672\" }"));
104 EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"\\uEFEF\" }"));
105 EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"helloworld\\uD83E\\uDE94\" }"));
106 EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"\\uD83C\\uDF32\" }"));
107 EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\uP890\" }"));
108 EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\u!FA8\" }"));
109 EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\uF89\" }"));
110 EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\uD83C\" }"));
111}
112
Austin Schuh84314af2019-10-03 09:11:34 -0700113// Tests that we can handle decimal points.
114TEST_F(JsonToFlatbufferTest, DecimalPoint) {
115 EXPECT_TRUE(JsonAndBack("{ \"foo_float\": 5.1 }"));
116 EXPECT_TRUE(JsonAndBack("{ \"foo_double\": 5.1 }"));
117}
118
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700119// Test what happens if you pass a field name that we don't know.
120TEST_F(JsonToFlatbufferTest, InvalidFieldName) {
121 EXPECT_FALSE(JsonAndBack("{ \"foo\": 5 }"));
122}
123
Alex Perrycb7da4b2019-08-28 19:35:56 -0700124// Tests that an invalid enum type is handled correctly.
125TEST_F(JsonToFlatbufferTest, InvalidEnumName) {
126 EXPECT_FALSE(JsonAndBack("{ \"foo_enum\": \"5ype\" }"));
127
128 EXPECT_FALSE(JsonAndBack("{ \"foo_enum_default\": \"7ype\" }"));
Brian Silverman5c710412021-02-09 19:09:32 -0800129
130 EXPECT_FALSE(JsonAndBack("{ \"foo_enum_nonconsecutive\": \"Nope\" }"));
131
132 EXPECT_FALSE(
133 JsonAndBack("{ \"foo_enum_nonconsecutive_default\": \"Nope\" }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700134}
135
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700136// Test that adding a duplicate field results in an error.
137TEST_F(JsonToFlatbufferTest, DuplicateField) {
138 EXPECT_FALSE(
139 JsonAndBack("{ \"foo_int\": 5, \"foo_int\": 7 }", "{ \"foo_int\": 7 }"));
140}
141
142// Test that various syntax errors are caught correctly
143TEST_F(JsonToFlatbufferTest, InvalidSyntax) {
144 EXPECT_FALSE(JsonAndBack("{ \"foo_int\": 5"));
145 EXPECT_FALSE(JsonAndBack("{ \"foo_int\": 5 "));
146 EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \""));
147 EXPECT_FALSE(JsonAndBack("{ \"foo_int\": 5 } }"));
148
149 EXPECT_FALSE(JsonAndBack("{ foo_int: 5 }"));
150
151 EXPECT_FALSE(JsonAndBack("{ \"foo_int\": 5, }", "{ \"foo_int\": 5 }"));
152
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700153 EXPECT_FALSE(
Austin Schuh09d7ffa2019-10-03 23:43:34 -0700154 JsonAndBack("{ \"apps\":\n[\n{\n\"name\": \"woot\"\n},\n{\n\"name\": "
155 "\"wow\"\n} ,\n]\n}"));
156
157 EXPECT_FALSE(JsonAndBack(
158 "{ \"apps\": [ { \"name\": \"woot\" }, { \"name\": \"wow\" } ] , }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700159
160 EXPECT_FALSE(
161 JsonAndBack("{ \"vector_foo_string\": [ \"bar\", \"baz\" ] , }"));
162
163 EXPECT_FALSE(
164 JsonAndBack("{ \"single_application\": { \"name\": \"woot\" } , }"));
165}
166
167// Test arrays of simple types.
168TEST_F(JsonToFlatbufferTest, Array) {
169 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_byte\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700170 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_byte\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700171 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_ubyte\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700172 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_ubyte\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700173
174 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_short\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700175 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_short\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700176 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_ushort\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700177 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_ushort\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700178
179 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_int\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700180 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_int\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700181 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_uint\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700182 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_uint\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700183
184 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_long\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700185 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_long\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700186 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_ulong\": [ 9, 7, 1 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700187 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_ulong\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700188
189 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_float\": [ 9.0, 7.0, 1.0 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700190 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_float\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700191 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_double\": [ 9.0, 7.0, 1.0 ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700192 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_double\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700193
194 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_float\": [ 9, 7, 1 ] }",
195 "{ \"vector_foo_float\": [ 9.0, 7.0, 1.0 ] }"));
196 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_double\": [ 9, 7, 1 ] }",
197 "{ \"vector_foo_double\": [ 9.0, 7.0, 1.0 ] }"));
198
199 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_string\": [ \"bar\", \"baz\" ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700200 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_string\": [ ] }"));
Ravago Jonescf453ab2020-05-06 21:14:53 -0700201 EXPECT_TRUE(JsonAndBack(
202 "{ \"vector_foo_enum\": [ \"None\", \"UType\", \"Bool\" ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700203 EXPECT_TRUE(JsonAndBack("{ \"vector_foo_enum\": [ ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700204}
205
206// Test nested messages, and arrays of nested messages.
207TEST_F(JsonToFlatbufferTest, NestedStruct) {
208 EXPECT_TRUE(
209 JsonAndBack("{ \"single_application\": { \"name\": \"woot\" } }"));
210
Alex Perrycb7da4b2019-08-28 19:35:56 -0700211 EXPECT_TRUE(JsonAndBack("{ \"single_application\": { } }"));
212
Austin Schuh09d7ffa2019-10-03 23:43:34 -0700213 EXPECT_TRUE(JsonAndBack(
214 "{ \"apps\": [ { \"name\": \"woot\" }, { \"name\": \"wow\" } ] }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700215
Ravago Jonescf453ab2020-05-06 21:14:53 -0700216 EXPECT_TRUE(JsonAndBack("{ \"apps\": [ { }, { } ] }"));
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700217}
218
James Kuszmaulbb60dfd2023-01-05 17:13:11 -0800219// Test mixing up whether a field is an object or a vector.
220TEST_F(JsonToFlatbufferTest, IncorrectVectorOfTables) {
221 EXPECT_FALSE(
222 JsonAndBack("{ \"single_application\": [ {\"name\": \"woot\"} ] }"));
223 EXPECT_FALSE(JsonAndBack("{ \"apps\": { \"name\": \"woot\" } }"));
224}
225
Austin Schuh84314af2019-10-03 09:11:34 -0700226// Test that we can parse an empty message.
227TEST_F(JsonToFlatbufferTest, EmptyMessage) {
Austin Schuh09d7ffa2019-10-03 23:43:34 -0700228 // Empty message works.
Austin Schuh84314af2019-10-03 09:11:34 -0700229 EXPECT_TRUE(JsonAndBack("{ }"));
230}
231
Austin Schuh81da4b22019-10-06 14:03:24 -0700232// Tests that comments get stripped.
233TEST_F(JsonToFlatbufferTest, Comments) {
234 EXPECT_TRUE(JsonAndBack("{ /* foo */ \"vector_foo_double\": [ 9, 7, 1 ] }",
235 "{ \"vector_foo_double\": [ 9.0, 7.0, 1.0 ] }"));
236}
237
Austin Schuh9e2532d2019-10-06 14:01:15 -0700238// Tests that multiple arrays get properly handled.
239TEST_F(JsonToFlatbufferTest, MultipleArrays) {
240 EXPECT_TRUE(
241 JsonAndBack("{ \"vector_foo_float\": [ 9, 7, 1 ], \"vector_foo_double\": "
242 "[ 9, 7, 1 ] }",
243 "{ \"vector_foo_float\": [ 9.0, 7.0, 1.0 ], "
244 "\"vector_foo_double\": [ 9.0, 7.0, 1.0 ] }"));
245}
Austin Schuh09d7ffa2019-10-03 23:43:34 -0700246
Alex Perrycb7da4b2019-08-28 19:35:56 -0700247// Tests that multiple arrays get properly handled.
248TEST_F(JsonToFlatbufferTest, NestedArrays) {
249 EXPECT_TRUE(
Ravago Jonescf453ab2020-05-06 21:14:53 -0700250 JsonAndBack("{ \"vov\": { \"v\": [ { \"str\": [ \"a\", \"b\" ] }, { "
251 "\"str\": [ \"c\", \"d\" ] } ] } }"));
Alex Perrycb7da4b2019-08-28 19:35:56 -0700252}
253
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700254// TODO(austin): Missmatched values.
Austin Schuh09d7ffa2019-10-03 23:43:34 -0700255//
256// TODO(austin): unions?
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700257
Austin Schuhd3936202020-04-07 20:11:07 -0700258TEST_F(JsonToFlatbufferTest, TrimmedVector) {
259 std::string json_short = "{ \"vector_foo_int\": [ 0";
260 for (int i = 1; i < 100; ++i) {
261 json_short += ", ";
262 json_short += std::to_string(i);
263 }
264 std::string json_long = json_short;
265 json_short += " ] }";
266 json_long += ", 101 ] }";
267
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800268 const FlatbufferDetachedBuffer<Configuration> fb_short_typetable(
Austin Schuhadd6eb32020-11-09 21:24:26 -0800269 JsonToFlatbuffer<Configuration>(json_short));
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800270 ASSERT_GT(fb_short_typetable.span().size(), 0);
271 const FlatbufferDetachedBuffer<Configuration> fb_long_typetable(
Austin Schuhadd6eb32020-11-09 21:24:26 -0800272 JsonToFlatbuffer<Configuration>(json_long));
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800273 ASSERT_GT(fb_long_typetable.span().size(), 0);
274 const FlatbufferDetachedBuffer<Configuration> fb_short_reflection(
275 JsonToFlatbuffer(json_short, FlatbufferType(&Schema().message())));
276 ASSERT_GT(fb_short_reflection.span().size(), 0);
277 const FlatbufferDetachedBuffer<Configuration> fb_long_reflection(
278 JsonToFlatbuffer(json_long, FlatbufferType(&Schema().message())));
279 ASSERT_GT(fb_long_reflection.span().size(), 0);
Austin Schuhd3936202020-04-07 20:11:07 -0700280
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800281 const std::string back_json_short_typetable = FlatbufferToJson<Configuration>(
282 fb_short_typetable, {.multi_line = false, .max_vector_size = 100});
283 const std::string back_json_long_typetable = FlatbufferToJson<Configuration>(
284 fb_long_typetable, {.multi_line = false, .max_vector_size = 100});
285 const std::string back_json_short_reflection =
286 FlatbufferToJson<Configuration>(
287 fb_short_reflection, {.multi_line = false, .max_vector_size = 100});
288 const std::string back_json_long_reflection = FlatbufferToJson<Configuration>(
289 fb_long_reflection, {.multi_line = false, .max_vector_size = 100});
Austin Schuhd3936202020-04-07 20:11:07 -0700290
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800291 EXPECT_EQ(json_short, back_json_short_typetable);
292 EXPECT_EQ(json_short, back_json_short_reflection);
Austin Schuh041fe9f2021-10-16 23:01:15 -0700293 EXPECT_EQ("{ \"vector_foo_int\": [ \"... 101 elements ...\" ] }",
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800294 back_json_long_typetable);
Austin Schuh041fe9f2021-10-16 23:01:15 -0700295 EXPECT_EQ("{ \"vector_foo_int\": [ \"... 101 elements ...\" ] }",
Brian Silvermanc5105ab2021-02-10 17:55:38 -0800296 back_json_long_reflection);
Austin Schuhd3936202020-04-07 20:11:07 -0700297}
298
Austin Schuh7f99e472020-06-17 20:38:17 -0700299// Tests that a nullptr buffer prints nullptr.
300TEST_F(JsonToFlatbufferTest, NullptrData) {
301 EXPECT_EQ("null", TableFlatbufferToJson((const flatbuffers::Table *)(nullptr),
Ravago Jonescf453ab2020-05-06 21:14:53 -0700302 ConfigurationTypeTable()));
Austin Schuh7f99e472020-06-17 20:38:17 -0700303}
304
Alexander Yeee61cac32023-02-11 19:40:40 -0800305TEST_F(JsonToFlatbufferTest, SpacedData) {
306 EXPECT_TRUE(CompareFlatBuffer(
307 FlatbufferDetachedBuffer<VectorOfStrings>(
308 JsonToFlatbuffer<VectorOfStrings>(R"json({
309 "str": [
310 "f o o",
311 "b a r",
312 "foo bar",
313 "bar foo"
314 ]
315})json")),
316 JsonFileToFlatbuffer<VectorOfStrings>(
317 ArtifactPath("aos/json_to_flatbuffer_test_spaces.json"))));
318}
319
Austin Schuh3e95e5d2019-09-20 00:08:54 -0700320} // namespace testing
321} // namespace aos