diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/generate_code.bat | 6 | ||||
-rwxr-xr-x | tests/generate_code.sh | 8 | ||||
-rw-r--r-- | tests/monster_test.bfbs | bin | 4480 -> 5400 bytes | |||
-rw-r--r-- | tests/monster_test_generated.h | 312 | ||||
-rw-r--r-- | tests/namespace_test/namespace_test1_generated.h | 53 | ||||
-rw-r--r-- | tests/namespace_test/namespace_test2_generated.h | 79 | ||||
-rw-r--r-- | tests/test.cpp | 70 | ||||
-rw-r--r-- | tests/union_vector/union_vector_generated.h | 101 |
8 files changed, 602 insertions, 27 deletions
diff --git a/tests/generate_code.bat b/tests/generate_code.bat index f594542b..1437c7c2 100644 --- a/tests/generate_code.bat +++ b/tests/generate_code.bat @@ -15,9 +15,9 @@ set buildtype=Release if "%1"=="-b" set buildtype=%2 -..\%buildtype%\flatc.exe --cpp --java --csharp --go --binary --python --js --ts --php --grpc --gen-mutable --gen-object-api --no-includes --cpp-ptr-type flatbuffers::unique_ptr --no-fb-import -I include_test monster_test.fbs monsterdata_test.json -..\%buildtype%\flatc.exe --cpp --java --csharp --go --binary --python --js --ts --php --gen-mutable --no-fb-import --cpp-ptr-type flatbuffers::unique_ptr -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs -..\%buildtype%\flatc.exe --cpp --js --ts --php --gen-mutable --gen-object-api --cpp-ptr-type flatbuffers::unique_ptr -o union_vector ./union_vector/union_vector.fbs +..\%buildtype%\flatc.exe --cpp --java --csharp --go --binary --python --js --ts --php --grpc --gen-mutable --reflect-names --gen-object-api --no-includes --cpp-ptr-type flatbuffers::unique_ptr --no-fb-import -I include_test monster_test.fbs monsterdata_test.json +..\%buildtype%\flatc.exe --cpp --java --csharp --go --binary --python --js --ts --php --gen-mutable --reflect-names --no-fb-import --cpp-ptr-type flatbuffers::unique_ptr -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs +..\%buildtype%\flatc.exe --cpp --js --ts --php --gen-mutable --reflect-names --gen-object-api --cpp-ptr-type flatbuffers::unique_ptr -o union_vector ./union_vector/union_vector.fbs ..\%buildtype%\flatc.exe -b --schema --bfbs-comments -I include_test monster_test.fbs ..\%buildtype%\flatc.exe --jsonschema --schema -I include_test monster_test.fbs cd ../samples diff --git a/tests/generate_code.sh b/tests/generate_code.sh index 31f4dee5..4b6db29b 100755 --- a/tests/generate_code.sh +++ b/tests/generate_code.sh @@ -14,11 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -../flatc --cpp --java --csharp --go --binary --python --js --ts --php --grpc --gen-mutable --gen-object-api --no-includes --cpp-ptr-type flatbuffers::unique_ptr --no-fb-import -I include_test monster_test.fbs monsterdata_test.json -../flatc --cpp --java --csharp --go --binary --python --js --ts --php --gen-mutable --no-fb-import --cpp-ptr-type flatbuffers::unique_ptr -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs -../flatc --cpp --js --ts --php --gen-mutable --gen-object-api --cpp-ptr-type flatbuffers::unique_ptr -o union_vector ./union_vector/union_vector.fbs +../flatc --cpp --java --csharp --go --binary --python --js --ts --php --grpc --gen-mutable --reflect-names --gen-object-api --no-includes --cpp-ptr-type flatbuffers::unique_ptr --no-fb-import -I include_test monster_test.fbs monsterdata_test.json +../flatc --cpp --java --csharp --go --binary --python --js --ts --php --gen-mutable --reflect-names --no-fb-import --cpp-ptr-type flatbuffers::unique_ptr -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs +../flatc --cpp --js --ts --php --gen-mutable --reflect-names --gen-object-api --cpp-ptr-type flatbuffers::unique_ptr -o union_vector ./union_vector/union_vector.fbs ../flatc -b --schema --bfbs-comments -I include_test monster_test.fbs ../flatc --jsonschema --schema -I include_test monster_test.fbs cd ../samples -../flatc --cpp --gen-mutable --gen-object-api --cpp-ptr-type flatbuffers::unique_ptr monster.fbs +../flatc --cpp --gen-mutable --reflect-names --gen-object-api --cpp-ptr-type flatbuffers::unique_ptr monster.fbs cd ../reflection diff --git a/tests/monster_test.bfbs b/tests/monster_test.bfbs Binary files differindex 15d39986..843e308c 100644 --- a/tests/monster_test.bfbs +++ b/tests/monster_test.bfbs diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 3423a108..f02a4dbd 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -1899,6 +1899,318 @@ inline void AnyUnion::Reset() { type = Any_NONE; } +} // namespace Example + +flatbuffers::TypeTable *InParentNamespaceTypeTable(); + +namespace Example2 { + +flatbuffers::TypeTable *MonsterTypeTable(); + +} // namespace Example2 + +namespace Example { + +flatbuffers::TypeTable *TestTypeTable(); + +flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable(); + +flatbuffers::TypeTable *Vec3TypeTable(); + +flatbuffers::TypeTable *AbilityTypeTable(); + +flatbuffers::TypeTable *StatTypeTable(); + +flatbuffers::TypeTable *MonsterTypeTable(); + +flatbuffers::TypeTable *TypeAliasesTypeTable(); + +flatbuffers::TypeTable *ColorTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_CHAR, 0, 0 }, + { flatbuffers::ET_CHAR, 0, 0 }, + { flatbuffers::ET_CHAR, 0, 0 } + }; + static flatbuffers::TypeFunction type_refs[] = { + ColorTypeTable + }; + static const int32_t values[] = { 1, 2, 8 }; + static const char *names[] = { + "Red", + "Green", + "Blue" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_ENUM, 3, type_codes, type_refs, values, names + }; + return &tt; +} + +flatbuffers::TypeTable *AnyTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SEQUENCE, 0, -1 }, + { flatbuffers::ET_SEQUENCE, 0, 0 }, + { flatbuffers::ET_SEQUENCE, 0, 1 }, + { flatbuffers::ET_SEQUENCE, 0, 2 } + }; + static flatbuffers::TypeFunction type_refs[] = { + MonsterTypeTable, + TestSimpleTableWithEnumTypeTable, + MyGame::Example2::MonsterTypeTable + }; + static const char *names[] = { + "NONE", + "Monster", + "TestSimpleTableWithEnum", + "MyGame_Example2_Monster" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +} // namespace Example + +flatbuffers::TypeTable *InParentNamespaceTypeTable() { + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr + }; + return &tt; +} + +namespace Example2 { + +flatbuffers::TypeTable *MonsterTypeTable() { + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr + }; + return &tt; +} + +} // namespace Example2 + +namespace Example { + +flatbuffers::TypeTable *TestTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SHORT, 0, -1 }, + { flatbuffers::ET_CHAR, 0, -1 } + }; + static const int32_t values[] = { 0, 2, 4 }; + static const char *names[] = { + "a", + "b" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names + }; + return &tt; +} + +flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_CHAR, 0, 0 } + }; + static flatbuffers::TypeFunction type_refs[] = { + ColorTypeTable + }; + static const char *names[] = { + "color" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *Vec3TypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_DOUBLE, 0, -1 }, + { flatbuffers::ET_CHAR, 0, 0 }, + { flatbuffers::ET_SEQUENCE, 0, 1 } + }; + static flatbuffers::TypeFunction type_refs[] = { + ColorTypeTable, + TestTypeTable + }; + static const int32_t values[] = { 0, 4, 8, 16, 24, 26, 32 }; + static const char *names[] = { + "x", + "y", + "z", + "test1", + "test2", + "test3" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names + }; + return &tt; +} + +flatbuffers::TypeTable *AbilityTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_UINT, 0, -1 }, + { flatbuffers::ET_UINT, 0, -1 } + }; + static const int32_t values[] = { 0, 4, 8 }; + static const char *names[] = { + "id", + "distance" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names + }; + return &tt; +} + +flatbuffers::TypeTable *StatTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_STRING, 0, -1 }, + { flatbuffers::ET_LONG, 0, -1 }, + { flatbuffers::ET_USHORT, 0, -1 } + }; + static const char *names[] = { + "id", + "val", + "count" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *MonsterTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SEQUENCE, 0, 0 }, + { flatbuffers::ET_SHORT, 0, -1 }, + { flatbuffers::ET_SHORT, 0, -1 }, + { flatbuffers::ET_STRING, 0, -1 }, + { flatbuffers::ET_BOOL, 0, -1 }, + { flatbuffers::ET_UCHAR, 1, -1 }, + { flatbuffers::ET_CHAR, 0, 1 }, + { flatbuffers::ET_UTYPE, 0, 2 }, + { flatbuffers::ET_SEQUENCE, 0, 2 }, + { flatbuffers::ET_SEQUENCE, 1, 3 }, + { flatbuffers::ET_STRING, 1, -1 }, + { flatbuffers::ET_SEQUENCE, 1, 4 }, + { flatbuffers::ET_SEQUENCE, 0, 4 }, + { flatbuffers::ET_UCHAR, 1, -1 }, + { flatbuffers::ET_SEQUENCE, 0, 5 }, + { flatbuffers::ET_BOOL, 0, -1 }, + { flatbuffers::ET_INT, 0, -1 }, + { flatbuffers::ET_UINT, 0, -1 }, + { flatbuffers::ET_LONG, 0, -1 }, + { flatbuffers::ET_ULONG, 0, -1 }, + { flatbuffers::ET_INT, 0, -1 }, + { flatbuffers::ET_UINT, 0, -1 }, + { flatbuffers::ET_LONG, 0, -1 }, + { flatbuffers::ET_ULONG, 0, -1 }, + { flatbuffers::ET_BOOL, 1, -1 }, + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_STRING, 1, -1 }, + { flatbuffers::ET_SEQUENCE, 1, 6 }, + { flatbuffers::ET_UCHAR, 1, -1 }, + { flatbuffers::ET_SEQUENCE, 1, 3 }, + { flatbuffers::ET_LONG, 1, -1 }, + { flatbuffers::ET_DOUBLE, 1, -1 }, + { flatbuffers::ET_SEQUENCE, 0, 7 } + }; + static flatbuffers::TypeFunction type_refs[] = { + Vec3TypeTable, + ColorTypeTable, + AnyTypeTable, + TestTypeTable, + MonsterTypeTable, + StatTypeTable, + AbilityTypeTable, + MyGame::InParentNamespaceTypeTable + }; + static const char *names[] = { + "pos", + "mana", + "hp", + "name", + "friendly", + "inventory", + "color", + "test_type", + "test", + "test4", + "testarrayofstring", + "testarrayoftables", + "enemy", + "testnestedflatbuffer", + "testempty", + "testbool", + "testhashs32_fnv1", + "testhashu32_fnv1", + "testhashs64_fnv1", + "testhashu64_fnv1", + "testhashs32_fnv1a", + "testhashu32_fnv1a", + "testhashs64_fnv1a", + "testhashu64_fnv1a", + "testarrayofbools", + "testf", + "testf2", + "testf3", + "testarrayofstring2", + "testarrayofsortedstruct", + "flex", + "test5", + "vector_of_longs", + "vector_of_doubles", + "parent_namespace_test" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *TypeAliasesTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_CHAR, 0, -1 }, + { flatbuffers::ET_UCHAR, 0, -1 }, + { flatbuffers::ET_SHORT, 0, -1 }, + { flatbuffers::ET_USHORT, 0, -1 }, + { flatbuffers::ET_INT, 0, -1 }, + { flatbuffers::ET_UINT, 0, -1 }, + { flatbuffers::ET_LONG, 0, -1 }, + { flatbuffers::ET_ULONG, 0, -1 }, + { flatbuffers::ET_FLOAT, 0, -1 }, + { flatbuffers::ET_DOUBLE, 0, -1 }, + { flatbuffers::ET_CHAR, 1, -1 }, + { flatbuffers::ET_DOUBLE, 1, -1 } + }; + static const char *names[] = { + "i8", + "u8", + "i16", + "u16", + "i32", + "u32", + "i64", + "u64", + "f32", + "f64", + "v8", + "vf64" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, names + }; + return &tt; +} + inline const MyGame::Example::Monster *GetMonster(const void *buf) { return flatbuffers::GetRoot<MyGame::Example::Monster>(buf); } diff --git a/tests/namespace_test/namespace_test1_generated.h b/tests/namespace_test/namespace_test1_generated.h index 6fc6df7a..0beea4cc 100644 --- a/tests/namespace_test/namespace_test1_generated.h +++ b/tests/namespace_test/namespace_test1_generated.h @@ -119,6 +119,59 @@ inline flatbuffers::Offset<TableInNestedNS> CreateTableInNestedNS( return builder_.Finish(); } +flatbuffers::TypeTable *TableInNestedNSTypeTable(); + +flatbuffers::TypeTable *StructInNestedNSTypeTable(); + +flatbuffers::TypeTable *EnumInNestedNSTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_CHAR, 0, 0 }, + { flatbuffers::ET_CHAR, 0, 0 }, + { flatbuffers::ET_CHAR, 0, 0 } + }; + static flatbuffers::TypeFunction type_refs[] = { + EnumInNestedNSTypeTable + }; + static const char *names[] = { + "A", + "B", + "C" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *TableInNestedNSTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_INT, 0, -1 } + }; + static const char *names[] = { + "foo" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *StructInNestedNSTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_INT, 0, -1 }, + { flatbuffers::ET_INT, 0, -1 } + }; + static const int32_t values[] = { 0, 4, 8 }; + static const char *names[] = { + "a", + "b" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names + }; + return &tt; +} + } // namespace NamespaceB } // namespace NamespaceA diff --git a/tests/namespace_test/namespace_test2_generated.h b/tests/namespace_test/namespace_test2_generated.h index 7e650f43..a88d40ea 100644 --- a/tests/namespace_test/namespace_test2_generated.h +++ b/tests/namespace_test/namespace_test2_generated.h @@ -212,6 +212,85 @@ namespace NamespaceC { namespace NamespaceA { +flatbuffers::TypeTable *TableInFirstNSTypeTable(); + +} // namespace NamespaceA + +namespace NamespaceC { + +flatbuffers::TypeTable *TableInCTypeTable(); + +} // namespace NamespaceC + +namespace NamespaceA { + +flatbuffers::TypeTable *SecondTableInATypeTable(); + +flatbuffers::TypeTable *TableInFirstNSTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SEQUENCE, 0, 0 }, + { flatbuffers::ET_CHAR, 0, 1 }, + { flatbuffers::ET_SEQUENCE, 0, 2 } + }; + static flatbuffers::TypeFunction type_refs[] = { + NamespaceA::NamespaceB::TableInNestedNSTypeTable, + NamespaceA::NamespaceB::EnumInNestedNSTypeTable, + NamespaceA::NamespaceB::StructInNestedNSTypeTable + }; + static const char *names[] = { + "foo_table", + "foo_enum", + "foo_struct" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +} // namespace NamespaceA + +namespace NamespaceC { + +flatbuffers::TypeTable *TableInCTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SEQUENCE, 0, 0 }, + { flatbuffers::ET_SEQUENCE, 0, 1 } + }; + static flatbuffers::TypeFunction type_refs[] = { + NamespaceA::TableInFirstNSTypeTable, + NamespaceA::SecondTableInATypeTable + }; + static const char *names[] = { + "refer_to_a1", + "refer_to_a2" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +} // namespace NamespaceC + +namespace NamespaceA { + +flatbuffers::TypeTable *SecondTableInATypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SEQUENCE, 0, 0 } + }; + static flatbuffers::TypeFunction type_refs[] = { + NamespaceC::TableInCTypeTable + }; + static const char *names[] = { + "refer_to_c" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names + }; + return &tt; +} + } // namespace NamespaceA #endif // FLATBUFFERS_GENERATED_NAMESPACETEST2_NAMESPACEA_H_ diff --git a/tests/test.cpp b/tests/test.cpp index 63a73c73..a698b128 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -18,6 +18,7 @@ #include "flatbuffers/idl.h" #include "flatbuffers/util.h" #include "flatbuffers/registry.h" +#include "flatbuffers/minireflect.h" #include "monster_test_generated.h" #include "namespace_test/namespace_test1_generated.h" @@ -46,8 +47,9 @@ int testing_fails = 0; void TestFail(const char *expval, const char *val, const char *exp, const char *file, int line) { - TEST_OUTPUT_LINE("TEST FAILED: %s:%d, %s (%s) != %s", file, line, - exp, expval, val); + TEST_OUTPUT_LINE("VALUE: \"%s\"", expval); + TEST_OUTPUT_LINE("EXPECTED: \"%s\"", val); + TEST_OUTPUT_LINE("TEST FAILED: %s:%d, %s", file, line, exp); assert(0); testing_fails++; } @@ -561,11 +563,7 @@ void ParseAndGenerateTextTest() { std::string jsongen; auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen); TEST_EQ(result, true); - - if (jsongen != jsonfile) { - TEST_OUTPUT_LINE("%s----------------\n%s", jsongen.c_str(), jsonfile.c_str()); - TEST_NOTNULL(NULL); - } + TEST_EQ_STR(jsongen.c_str(), jsonfile.c_str()); // We can also do the above using the convenient Registry that knows about // a set of file_identifiers mapped to schemas. @@ -772,6 +770,34 @@ void ReflectionTest(uint8_t *flatbuf, size_t length) { fbb.GetBufferPointer(), fbb.GetSize()), true); } +void MiniReflectFlatBuffersTest(uint8_t *flatbuf) { + auto s = flatbuffers::FlatBufferToString(flatbuf, MonsterTypeTable()); + TEST_EQ_STR(s.c_str(), + "{ " + "pos: { x: 1.0, y: 2.0, z: 3.0, test1: 0.0, test2: Red, test3: " + "{ a: 10, b: 20 } }, " + "hp: 80, " + "name: \"MyMonster\", " + "inventory: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], " + "test_type: Monster, " + "test: { name: \"Fred\" }, " + "test4: [ { a: 10, b: 20 }, { a: 30, b: 40 } ], " + "testarrayofstring: [ \"bob\", \"fred\", \"bob\", \"fred\" ], " + "testarrayoftables: [ { hp: 1000, name: \"Barney\" }, { name: \"Fred\" }, " + "{ name: \"Wilma\" } ], " + // TODO(wvo): should really print this nested buffer correctly. + "testnestedflatbuffer: [ 20, 0, 0, 0, 77, 79, 78, 83, 12, 0, 12, 0, 0, 0, " + "4, 0, 6, 0, 8, 0, 12, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 0, 0, 0, 78, " + "101, 115, 116, 101, 100, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0 ], " + "testarrayofstring2: [ \"jane\", \"mary\" ], " + "testarrayofsortedstruct: [ { id: 1, distance: 10 }, " + "{ id: 2, distance: 20 }, { id: 3, distance: 30 }, " + "{ id: 4, distance: 40 } ], " + "flex: [ 210, 4, 5, 2 ], " + "test5: [ { a: 10, b: 20 }, { a: 30, b: 40 } ] " + "}"); +} + // Parse a .proto schema, output as .fbs void ParseProtoTest() { // load the .proto and the golden file from disk @@ -800,11 +826,7 @@ void ParseProtoTest() { // Ensure generated file is parsable. flatbuffers::Parser parser2; TEST_EQ(parser2.Parse(fbs.c_str(), nullptr), true); - - if (fbs != goldenfile) { - TEST_OUTPUT_LINE("%s----------------\n%s", fbs.c_str(), goldenfile.c_str()); - TEST_NOTNULL(NULL); - } + TEST_EQ_STR(fbs.c_str(), goldenfile.c_str()); } template<typename T> void CompareTableFieldValue(flatbuffers::Table *table, @@ -1248,10 +1270,9 @@ void UnicodeTest() { parser.opts.indent_step = -1; auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen); TEST_EQ(result, true); - TEST_EQ(jsongen, - std::string( + TEST_EQ_STR(jsongen.c_str(), "{F: \"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC" - "\\u5225\\u30B5\\u30A4\\u30C8\\u20AC\\u0080\\uD83D\\uDE0E\"}")); + "\\u5225\\u30B5\\u30A4\\u30C8\\u20AC\\u0080\\uD83D\\uDE0E\"}"); } void UnicodeTestAllowNonUTF8() { @@ -1265,10 +1286,9 @@ void UnicodeTestAllowNonUTF8() { parser.opts.indent_step = -1; auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen); TEST_EQ(result, true); - TEST_EQ(jsongen, - std::string( + TEST_EQ_STR(jsongen.c_str(), "{F: \"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC" - "\\u5225\\u30B5\\u30A4\\u30C8\\u0001\\x80\\u0080\\uD83D\\uDE0E\"}")); + "\\u5225\\u30B5\\u30A4\\u30C8\\u0001\\x80\\u0080\\uD83D\\uDE0E\"}"); } void UnicodeTestGenerateTextFailsOnNonUTF8() { @@ -1300,7 +1320,7 @@ void UnicodeSurrogatesTest() { parser.builder_.GetBufferPointer()); auto string = root->GetPointer<flatbuffers::String *>( flatbuffers::FieldIndexToOffset(0)); - TEST_EQ(strcmp(string->c_str(), "\xF0\x9F\x92\xA9"), 0); + TEST_EQ_STR(string->c_str(), "\xF0\x9F\x92\xA9"); } void UnicodeInvalidSurrogatesTest() { @@ -1437,7 +1457,7 @@ void UnknownFieldsTest() { parser.opts.indent_step = -1; auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen); TEST_EQ(result, true); - TEST_EQ(jsongen == "{str: \"test\",i: 10}", true); + TEST_EQ_STR(jsongen.c_str(), "{str: \"test\",i: 10}"); } void ParseUnionTest() { @@ -1548,6 +1568,14 @@ void UnionVectorTest() { auto repacked_movie = GetMovie(fbb.GetBufferPointer()); TestMovie(repacked_movie); + + auto s = flatbuffers::FlatBufferToString(fbb.GetBufferPointer(), + MovieTypeTable()); + TEST_EQ_STR(s.c_str(), + "{ main_character_type: Rapunzel, main_character: { hair_length: 6 }, " + "characters_type: [ Belle, MuLan, BookFan, Other, Unused ], " + "characters: [ { books_read: 7 }, { sword_attack_damage: 5 }, " + "{ books_read: 2 }, \"Other\", \"Unused\" ] }"); } void ConformTest() { @@ -1774,6 +1802,8 @@ int main(int /*argc*/, const char * /*argv*/[]) { ObjectFlatBuffersTest(flatbuf.data()); + MiniReflectFlatBuffersTest(flatbuf.data()); + SizePrefixedTest(); #ifndef FLATBUFFERS_NO_FILE_TESTS diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h index a21cb000..3975ec8e 100644 --- a/tests/union_vector/union_vector_generated.h +++ b/tests/union_vector/union_vector_generated.h @@ -600,6 +600,107 @@ inline void CharacterUnion::Reset() { type = Character_NONE; } +flatbuffers::TypeTable *AttackerTypeTable(); + +flatbuffers::TypeTable *RapunzelTypeTable(); + +flatbuffers::TypeTable *BookReaderTypeTable(); + +flatbuffers::TypeTable *MovieTypeTable(); + +flatbuffers::TypeTable *CharacterTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_SEQUENCE, 0, -1 }, + { flatbuffers::ET_SEQUENCE, 0, 0 }, + { flatbuffers::ET_SEQUENCE, 0, 1 }, + { flatbuffers::ET_SEQUENCE, 0, 2 }, + { flatbuffers::ET_SEQUENCE, 0, 2 }, + { flatbuffers::ET_STRING, 0, -1 }, + { flatbuffers::ET_STRING, 0, -1 } + }; + static flatbuffers::TypeFunction type_refs[] = { + AttackerTypeTable, + RapunzelTypeTable, + BookReaderTypeTable + }; + static const char *names[] = { + "NONE", + "MuLan", + "Rapunzel", + "Belle", + "BookFan", + "Other", + "Unused" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_UNION, 7, type_codes, type_refs, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *AttackerTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_INT, 0, -1 } + }; + static const char *names[] = { + "sword_attack_damage" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names + }; + return &tt; +} + +flatbuffers::TypeTable *RapunzelTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_INT, 0, -1 } + }; + static const int32_t values[] = { 0, 4 }; + static const char *names[] = { + "hair_length" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names + }; + return &tt; +} + +flatbuffers::TypeTable *BookReaderTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_INT, 0, -1 } + }; + static const int32_t values[] = { 0, 4 }; + static const char *names[] = { + "books_read" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names + }; + return &tt; +} + +flatbuffers::TypeTable *MovieTypeTable() { + static flatbuffers::TypeCode type_codes[] = { + { flatbuffers::ET_UTYPE, 0, 0 }, + { flatbuffers::ET_SEQUENCE, 0, 0 }, + { flatbuffers::ET_UTYPE, 1, 0 }, + { flatbuffers::ET_SEQUENCE, 1, 0 } + }; + static flatbuffers::TypeFunction type_refs[] = { + CharacterTypeTable + }; + static const char *names[] = { + "main_character_type", + "main_character", + "characters_type", + "characters" + }; + static flatbuffers::TypeTable tt = { + flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names + }; + return &tt; +} + inline const Movie *GetMovie(const void *buf) { return flatbuffers::GetRoot<Movie>(buf); } |