blob: 66de6d962ada9757450751ab99fd14a634f1a8de [file] [log] [blame]
Philipp Schrader790cb542023-07-05 21:06:52 -07001#include "flatbuffers/reflection.h"
2#include "gtest/gtest.h"
3
Tyler Chatow5e369a42019-11-23 11:57:31 -08004#include "aos/json_to_flatbuffer.h"
5#include "aos/json_to_flatbuffer_generated.h"
Austin Schuh373f1762021-06-02 21:07:09 -07006#include "aos/testing/path.h"
Tyler Chatow5e369a42019-11-23 11:57:31 -08007#include "aos/util/file.h"
Tyler Chatow5e369a42019-11-23 11:57:31 -08008
Stephan Pleinesf63bde82024-01-13 15:59:33 -08009namespace aos::testing {
Tyler Chatow5e369a42019-11-23 11:57:31 -080010
Austin Schuh373f1762021-06-02 21:07:09 -070011using aos::testing::ArtifactPath;
12
Tyler Chatow5e369a42019-11-23 11:57:31 -080013class FlatbufferIntrospectionTest : public ::testing::Test {
14 public:
15 FlatbufferIntrospectionTest()
Austin Schuh0de30f32020-12-06 12:44:28 -080016 : schema_data_(FileToFlatbuffer<reflection::Schema>(
Austin Schuh373f1762021-06-02 21:07:09 -070017 ArtifactPath("aos/json_to_flatbuffer.bfbs"))) {
Austin Schuhadd6eb32020-11-09 21:24:26 -080018 schema_ = reflection::GetSchema(schema_data_.span().data());
Tyler Chatow5e369a42019-11-23 11:57:31 -080019 }
20
21 protected:
Austin Schuh0de30f32020-12-06 12:44:28 -080022 FlatbufferVector<reflection::Schema> schema_data_;
Tyler Chatow5e369a42019-11-23 11:57:31 -080023 const reflection::Schema *schema_;
24};
25
26TEST_F(FlatbufferIntrospectionTest, IntegerTest) {
27 flatbuffers::FlatBufferBuilder builder;
28 ConfigurationBuilder config_builder(builder);
29
30 config_builder.add_foo_byte(-5);
31 config_builder.add_foo_ubyte(5);
32 config_builder.add_foo_bool(true);
33
34 config_builder.add_foo_short(-10);
35 config_builder.add_foo_ushort(10);
36
37 config_builder.add_foo_int(-20);
38 config_builder.add_foo_uint(20);
39
40 config_builder.add_foo_long(-100);
41 config_builder.add_foo_ulong(100);
42
43 builder.Finish(config_builder.Finish());
44
45 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
46
47 EXPECT_EQ(out,
James Kuszmaul1ea5e862024-02-09 14:10:25 -080048 "{ \"foo_bool\": true, \"foo_byte\": -5, \"foo_int\": -20, "
Tyler Chatow5e369a42019-11-23 11:57:31 -080049 "\"foo_long\": -100, \"foo_short\": -10, \"foo_ubyte\": 5, "
James Kuszmaul1ea5e862024-02-09 14:10:25 -080050 "\"foo_uint\": 20, \"foo_ulong\": 100, \"foo_ushort\": 10 }");
Tyler Chatow5e369a42019-11-23 11:57:31 -080051}
52
53TEST_F(FlatbufferIntrospectionTest, FloatTest) {
54 flatbuffers::FlatBufferBuilder builder;
55 ConfigurationBuilder config_builder(builder);
56
57 config_builder.add_foo_float(1.0 / 3.0);
58 config_builder.add_foo_double(5.0 / 9.0);
59
60 builder.Finish(config_builder.Finish());
61
62 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
63
James Kuszmaul98c798d2024-04-24 15:58:09 -070064 EXPECT_EQ(
65 out, "{ \"foo_double\": 0.5555555555555556, \"foo_float\": 0.33333334 }");
Tyler Chatow5e369a42019-11-23 11:57:31 -080066}
67
Brian Silvermana6aa5042020-04-28 16:42:38 -070068TEST_F(FlatbufferIntrospectionTest, NanFloatTest) {
69 flatbuffers::FlatBufferBuilder builder;
70 ConfigurationBuilder config_builder(builder);
71
72 config_builder.add_foo_float(std::numeric_limits<float>::quiet_NaN());
73 config_builder.add_foo_double(std::numeric_limits<double>::quiet_NaN());
74
75 builder.Finish(config_builder.Finish());
76
77 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
78
James Kuszmaul1ea5e862024-02-09 14:10:25 -080079 EXPECT_EQ(out, "{ \"foo_double\": nan, \"foo_float\": nan }");
Brian Silvermana6aa5042020-04-28 16:42:38 -070080}
81
Tyler Chatow5e369a42019-11-23 11:57:31 -080082TEST_F(FlatbufferIntrospectionTest, VectorScalarTest) {
83 flatbuffers::FlatBufferBuilder builder;
84
85 // Flatbuffers don't like creating vectors simultaneously with table, so do
86 // first.
87 auto foo_bytes = builder.CreateVector<int8_t>({-3, -2, -1, 0, 1, 2, 3});
88 auto foo_ubytes = builder.CreateVector<uint8_t>({0, 1, 2, 3, 4, 5, 6});
89 auto foo_bools = builder.CreateVector<uint8_t>({true, false, true, false});
90
91 auto foo_shorts =
92 builder.CreateVector<int16_t>({-30, -20, -10, 0, 10, 20, 30});
93 auto foo_ushorts =
94 builder.CreateVector<uint16_t>({0, 10, 20, 30, 40, 50, 60});
95
96 auto foo_ints =
97 builder.CreateVector<int32_t>({-300, -200, -100, 0, 100, 200, 300});
98 auto foo_uints =
99 builder.CreateVector<uint32_t>({0, 100, 200, 300, 400, 500, 600});
100
101 auto foo_longs =
102 builder.CreateVector<int64_t>({-3000, -2000, -1000, 0, 1000, 2000, 3000});
103 auto foo_ulongs =
104 builder.CreateVector<uint64_t>({0, 1000, 2000, 3000, 4000, 5000, 6000});
105
106 auto foo_floats =
107 builder.CreateVector<float>({0.0, 1.0 / 9.0, 2.0 / 9.0, 3.0 / 9.0});
108 auto foo_doubles =
109 builder.CreateVector<double>({0, 1.0 / 9.0, 2.0 / 9.0, 3.0 / 9.0});
110
111 ConfigurationBuilder config_builder(builder);
112 config_builder.add_vector_foo_byte(foo_bytes);
113 config_builder.add_vector_foo_ubyte(foo_ubytes);
114 config_builder.add_vector_foo_bool(foo_bools);
115
116 config_builder.add_vector_foo_short(foo_shorts);
117 config_builder.add_vector_foo_ushort(foo_ushorts);
118
119 config_builder.add_vector_foo_int(foo_ints);
120 config_builder.add_vector_foo_uint(foo_uints);
121
122 config_builder.add_vector_foo_long(foo_longs);
123 config_builder.add_vector_foo_ulong(foo_ulongs);
124
125 config_builder.add_vector_foo_float(foo_floats);
126 config_builder.add_vector_foo_double(foo_doubles);
127
128 builder.Finish(config_builder.Finish());
129
130 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
131
James Kuszmaul98c798d2024-04-24 15:58:09 -0700132 EXPECT_EQ(
133 out,
134 "{ \"vector_foo_bool\": [ true, false, true, false ], "
135 "\"vector_foo_byte\": [ -3, -2, -1, 0, 1, 2, 3 ], \"vector_foo_double\": "
136 "[ 0, 0.1111111111111111, 0.2222222222222222, 0.3333333333333333 ], "
137 "\"vector_foo_float\": [ 0, 0.11111111, 0.22222222, 0.33333334 ], "
138 "\"vector_foo_int\": [ -300, -200, -100, 0, 100, 200, 300 ], "
139 "\"vector_foo_long\": [ -3000, -2000, -1000, 0, 1000, 2000, 3000 ], "
140 "\"vector_foo_short\": [ -30, -20, -10, 0, 10, 20, 30 ], "
141 "\"vector_foo_ubyte\": [ 0, 1, 2, 3, 4, 5, 6 ], \"vector_foo_uint\": [ "
142 "0, 100, 200, 300, 400, 500, 600 ], \"vector_foo_ulong\": [ 0, 1000, "
143 "2000, 3000, 4000, 5000, 6000 ], \"vector_foo_ushort\": [ 0, 10, 20, 30, "
144 "40, 50, 60 ] }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800145}
146
147TEST_F(FlatbufferIntrospectionTest, StringTest) {
148 flatbuffers::FlatBufferBuilder builder;
149
150 auto foo_string = builder.CreateString("I <3 FlatBuffers!");
151
152 ConfigurationBuilder config_builder(builder);
153 config_builder.add_foo_string(foo_string);
154
155 builder.Finish(config_builder.Finish());
156
157 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
158
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800159 EXPECT_EQ(out, "{ \"foo_string\": \"I <3 FlatBuffers!\" }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800160}
161
162TEST_F(FlatbufferIntrospectionTest, EnumTest) {
163 flatbuffers::FlatBufferBuilder builder;
164
165 ConfigurationBuilder config_builder(builder);
Austin Schuh872723c2019-12-25 14:38:09 -0800166 config_builder.add_foo_enum(BaseType::UShort);
Tyler Chatow5e369a42019-11-23 11:57:31 -0800167
168 builder.Finish(config_builder.Finish());
169
170 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
171
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800172 EXPECT_EQ(out, "{ \"foo_enum\": \"UShort\" }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800173}
174
Brian Silvermana6aa5042020-04-28 16:42:38 -0700175TEST_F(FlatbufferIntrospectionTest, EnumWithUnknownValueTest) {
176 flatbuffers::FlatBufferBuilder builder;
177
178 ConfigurationBuilder config_builder(builder);
179 // 123 is not part of the enum. We expect it to be represented by null in
180 // the json.
181 config_builder.fbb_.AddElement<uint8_t>(Configuration::VT_FOO_ENUM, 123, 0);
182
183 builder.Finish(config_builder.Finish());
184
185 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
186
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800187 EXPECT_EQ(out, "{ \"foo_enum\": 123 }");
Brian Silvermana6aa5042020-04-28 16:42:38 -0700188}
189
Tyler Chatow5e369a42019-11-23 11:57:31 -0800190TEST_F(FlatbufferIntrospectionTest, VectorStringTest) {
191 flatbuffers::FlatBufferBuilder builder;
192
193 std::vector<std::vector<std::string>> words{
194 {"abc", "acb"}, {"bac", "bca"}, {"cab", "cba"}};
195 std::vector<flatbuffers::Offset<
196 flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>>>
197 strings;
198
199 for (const auto &v : words) {
200 strings.push_back(builder.CreateVectorOfStrings(v));
201 }
202
203 std::vector<flatbuffers::Offset<VectorOfStrings>> sub_vectors;
204
205 for (const auto &v : strings) {
206 VectorOfStringsBuilder v_builder(builder);
207 v_builder.add_str(v);
208 sub_vectors.push_back(v_builder.Finish());
209 }
210
211 auto foo_vov = builder.CreateVector(sub_vectors);
212
213 VectorOfVectorOfStringBuilder vov_builder(builder);
214 vov_builder.add_v(foo_vov);
215 auto vov = vov_builder.Finish();
216
217 ConfigurationBuilder config_builder(builder);
218 config_builder.add_vector_foo_string(strings[0]);
219 config_builder.add_vov(vov);
220
221 builder.Finish(config_builder.Finish());
222
223 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
224
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800225 EXPECT_EQ(
226 out,
227 "{ \"vector_foo_string\": [ \"abc\", \"acb\" ], \"vov\": { \"v\": "
228 "[ { \"str\": [ \"abc\", \"acb\" ] }, { \"str\": [ \"bac\", \"bca\" ] }, "
229 "{ \"str\": [ \"cab\", \"cba\" ] } ] } }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800230}
231
232TEST_F(FlatbufferIntrospectionTest, TableTest) {
233 flatbuffers::FlatBufferBuilder builder;
234
235 auto foo_string2 = builder.CreateString("Nested Config String");
236 auto foo_bytes2 = builder.CreateVector<int8_t>({6, 7, 8, 9, 10});
237
238 ConfigurationBuilder config_builder2(builder);
239 config_builder2.add_foo_byte(10);
240 config_builder2.add_foo_string(foo_string2);
241 config_builder2.add_vector_foo_byte(foo_bytes2);
242
243 flatbuffers::Offset<Configuration> config_2 = config_builder2.Finish();
244
245 auto foo_string = builder.CreateString("Root Config String");
246 auto foo_bytes = builder.CreateVector<int8_t>({0, 1, 2, 3, 4, 5});
247
248 ConfigurationBuilder config_builder(builder);
249 config_builder.add_nested_config(config_2);
250 config_builder.add_foo_byte(5);
251 config_builder.add_foo_string(foo_string);
252 config_builder.add_vector_foo_byte(foo_bytes);
253
254 builder.Finish(config_builder.Finish());
255
256 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
257
258 EXPECT_EQ(out,
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800259 "{ \"foo_byte\": 5, \"foo_string\": \"Root Config String\", "
260 "\"nested_config\": { \"foo_byte\": 10, \"foo_string\": \"Nested "
261 "Config String\", \"vector_foo_byte\": [ 6, 7, 8, 9, 10 ] }, "
262 "\"vector_foo_byte\": [ 0, 1, 2, 3, 4, 5 ] }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800263}
264
265TEST_F(FlatbufferIntrospectionTest, StructTest) {
266 flatbuffers::FlatBufferBuilder builder;
267
268 FooStructNested foo_struct2(10);
269
270 FooStruct foo_struct(5, foo_struct2);
271
272 ConfigurationBuilder config_builder(builder);
273 config_builder.add_foo_struct(&foo_struct);
274
275 builder.Finish(config_builder.Finish());
276
277 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
278
279 EXPECT_EQ(out,
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800280 "{ \"foo_struct\": { \"foo_byte\": 5, \"nested_struct\": "
281 "{ \"foo_byte\": 10 } } }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800282}
283
284TEST_F(FlatbufferIntrospectionTest, VectorStructTest) {
285 flatbuffers::FlatBufferBuilder builder;
286
287 FooStructNested foo_struct2(1);
288
289 auto structs = builder.CreateVectorOfStructs(
290 std::vector<FooStruct>({{5, foo_struct2}, {10, foo_struct2}}));
291
292 ConfigurationBuilder config_builder(builder);
293 config_builder.add_vector_foo_struct(structs);
294
295 builder.Finish(config_builder.Finish());
296
297 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
298
299 EXPECT_EQ(out,
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800300 "{ \"vector_foo_struct\": [ { \"foo_byte\": 5, \"nested_struct\": "
301 "{ \"foo_byte\": 1 } }, { \"foo_byte\": 10, \"nested_struct\": "
302 "{ \"foo_byte\": 1 } } ] }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800303}
304
305TEST_F(FlatbufferIntrospectionTest, VectorEnumTest) {
306 flatbuffers::FlatBufferBuilder builder;
307
Austin Schuh872723c2019-12-25 14:38:09 -0800308 auto enums = builder.CreateVector<BaseType>(
309 {BaseType::UShort, BaseType::Obj, BaseType::UInt});
Tyler Chatow5e369a42019-11-23 11:57:31 -0800310
311 ConfigurationBuilder config_builder(builder);
milind upadhyay328d3392020-11-25 19:34:00 -0800312 config_builder.add_vector_foo_enum(enums);
Tyler Chatow5e369a42019-11-23 11:57:31 -0800313
314 builder.Finish(config_builder.Finish());
315
316 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
317
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800318 EXPECT_EQ(out, "{ \"vector_foo_enum\": [ \"UShort\", \"Obj\", \"UInt\" ] }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800319}
320
321TEST_F(FlatbufferIntrospectionTest, StructEnumTest) {
322 flatbuffers::FlatBufferBuilder builder;
323
Austin Schuh872723c2019-12-25 14:38:09 -0800324 StructEnum foo_struct(BaseType::UShort);
Tyler Chatow5e369a42019-11-23 11:57:31 -0800325
326 ConfigurationBuilder config_builder(builder);
327 config_builder.add_foo_struct_enum(&foo_struct);
328
329 builder.Finish(config_builder.Finish());
330
331 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
332
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800333 EXPECT_EQ(out, "{ \"foo_struct_enum\": { \"foo_enum\": \"UShort\" } }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800334}
335
336TEST_F(FlatbufferIntrospectionTest, StringEscapeTest) {
337 flatbuffers::FlatBufferBuilder builder;
338
339 auto foo_string = builder.CreateString("\"\\\b\f\n\r\t");
340
341 ConfigurationBuilder config_builder(builder);
342 config_builder.add_foo_string(foo_string);
343
344 builder.Finish(config_builder.Finish());
345
346 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer());
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800347 EXPECT_EQ(out, "{ \"foo_string\": \"\\\"\\\\\\b\\f\\n\\r\\t\" }");
Tyler Chatow5e369a42019-11-23 11:57:31 -0800348}
349
Austin Schuhd3936202020-04-07 20:11:07 -0700350TEST_F(FlatbufferIntrospectionTest, TrimmedVector) {
351 flatbuffers::FlatBufferBuilder builder;
352
353 std::vector<int32_t> contents;
354 for (int i = 0; i < 101; ++i) {
355 contents.push_back(i);
356 }
357 const auto contents_offset = builder.CreateVector(contents);
358
359 ConfigurationBuilder config_builder(builder);
360 config_builder.add_vector_foo_int(contents_offset);
361
362 builder.Finish(config_builder.Finish());
363
Ravago Jonese8338b02020-04-16 15:43:00 -0700364 std::string out =
Ravago Jonescf453ab2020-05-06 21:14:53 -0700365 FlatbufferToJson(schema_, builder.GetBufferPointer(),
366 {.multi_line = false, .max_vector_size = 100});
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800367 EXPECT_EQ(out, "{ \"vector_foo_int\": [ \"... 101 elements ...\" ] }");
Austin Schuhd3936202020-04-07 20:11:07 -0700368}
369
Ravago Jonese8338b02020-04-16 15:43:00 -0700370TEST_F(FlatbufferIntrospectionTest, MultilineTest) {
371 flatbuffers::FlatBufferBuilder builder;
372 ConfigurationBuilder config_builder(builder);
373
374 config_builder.add_foo_bool(true);
375 config_builder.add_foo_int(-20);
376
377 builder.Finish(config_builder.Finish());
378
Ravago Jonescf453ab2020-05-06 21:14:53 -0700379 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer(),
380 {.multi_line = true});
Ravago Jonese8338b02020-04-16 15:43:00 -0700381
382 EXPECT_EQ(out,
383 "{\n"
384 " \"foo_bool\": true,\n"
385 " \"foo_int\": -20\n"
386 "}");
387}
388
389TEST_F(FlatbufferIntrospectionTest, MultilineStructTest) {
390 flatbuffers::FlatBufferBuilder builder;
391 ConfigurationBuilder config_builder(builder);
392
393 FooStructNested foo_struct2(10);
394 FooStruct foo_struct(5, foo_struct2);
395
396 config_builder.add_foo_struct(&foo_struct);
397
398 builder.Finish(config_builder.Finish());
399
Ravago Jonescf453ab2020-05-06 21:14:53 -0700400 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer(),
401 {.multi_line = true});
Ravago Jonese8338b02020-04-16 15:43:00 -0700402
403 EXPECT_EQ(out,
404 "{\n"
405 " \"foo_struct\": {\n"
406 " \"foo_byte\": 5,\n"
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800407 " \"nested_struct\": { \"foo_byte\": 10 }\n"
Ravago Jonese8338b02020-04-16 15:43:00 -0700408 " }\n"
409 "}");
410}
411
412TEST_F(FlatbufferIntrospectionTest, MultilineVectorStructTest) {
413 flatbuffers::FlatBufferBuilder builder;
414
415 FooStructNested foo_struct2(1);
416
417 auto structs = builder.CreateVectorOfStructs(
418 std::vector<FooStruct>({{5, foo_struct2}, {10, foo_struct2}}));
419
420 ConfigurationBuilder config_builder(builder);
421 config_builder.add_vector_foo_struct(structs);
422
423 builder.Finish(config_builder.Finish());
424
Ravago Jonescf453ab2020-05-06 21:14:53 -0700425 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer(),
426 {.multi_line = true});
Ravago Jonese8338b02020-04-16 15:43:00 -0700427
428 EXPECT_EQ(out,
429 "{\n"
430 " \"vector_foo_struct\": [\n"
431 " {\n"
432 " \"foo_byte\": 5,\n"
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800433 " \"nested_struct\": { \"foo_byte\": 1 }\n"
Ravago Jonese8338b02020-04-16 15:43:00 -0700434 " },\n"
435 " {\n"
436 " \"foo_byte\": 10,\n"
James Kuszmaul1ea5e862024-02-09 14:10:25 -0800437 " \"nested_struct\": { \"foo_byte\": 1 }\n"
Ravago Jonese8338b02020-04-16 15:43:00 -0700438 " }\n"
439 " ]\n"
440 "}");
441}
442
443TEST_F(FlatbufferIntrospectionTest, MultilineVectorScalarTest) {
444 flatbuffers::FlatBufferBuilder builder;
445
446 // Flatbuffers don't like creating vectors simultaneously with table, so do
447 // first.
448 auto foo_ints =
449 builder.CreateVector<int32_t>({-300, -200, -100, 0, 100, 200, 300});
450
451 auto foo_floats =
452 builder.CreateVector<float>({0.0, 1.0 / 9.0, 2.0 / 9.0, 3.0 / 9.0});
453 auto foo_doubles =
454 builder.CreateVector<double>({0, 1.0 / 9.0, 2.0 / 9.0, 3.0 / 9.0});
455
456 ConfigurationBuilder config_builder(builder);
457
458 config_builder.add_vector_foo_int(foo_ints);
459 config_builder.add_vector_foo_float(foo_floats);
460 config_builder.add_vector_foo_double(foo_doubles);
461
462 builder.Finish(config_builder.Finish());
463
Ravago Jonescf453ab2020-05-06 21:14:53 -0700464 std::string out = FlatbufferToJson(schema_, builder.GetBufferPointer(),
465 {.multi_line = true});
Ravago Jonese8338b02020-04-16 15:43:00 -0700466
James Kuszmaul98c798d2024-04-24 15:58:09 -0700467 EXPECT_EQ(
468 out,
469 "{\n \"vector_foo_double\": [ 0, 0.1111111111111111, "
470 "0.2222222222222222, 0.3333333333333333 ],\n \"vector_foo_float\": [ 0, "
471 "0.11111111, 0.22222222, 0.33333334 ],\n \"vector_foo_int\": [ -300, "
472 "-200, -100, 0, 100, 200, 300 ]\n}");
Ravago Jonese8338b02020-04-16 15:43:00 -0700473}
474
Austin Schuh7f99e472020-06-17 20:38:17 -0700475// Tests that a nullptr buffer prints nullptr.
476TEST_F(FlatbufferIntrospectionTest, NullptrData) {
477 EXPECT_EQ("null", FlatbufferToJson(schema_, nullptr));
478}
479
480// Tests that a null schema gets caught.
481TEST(FlatbufferIntrospectionDeathTest, NullSchema) {
482 EXPECT_DEATH(
483 {
484 FlatbufferToJson(static_cast<const reflection::Schema *>(nullptr),
485 nullptr);
486 },
487 "Need to provide a schema");
488}
489
Stephan Pleinesf63bde82024-01-13 15:59:33 -0800490} // namespace aos::testing