mirror of
https://github.com/google/flatbuffers.git
synced 2026-11-07 20:59:10 +00:00
Reviewed-on: BigfootDev/flatbuffers-bigfoot#1 Co-authored-by: Romain BOULLARD <romain.boullard@protonmail.com>
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
#include "required_table_default_test.h"
|
|
|
|
#include "required_table_default_test_generated.h"
|
|
#include "test_assert.h"
|
|
|
|
namespace flatbuffers {
|
|
namespace tests {
|
|
|
|
// Exercises the (required) table-field default member initializer added to
|
|
// GenMember() in idl_gen_cpp.cpp: a `(required)` table field can never
|
|
// legally be missing once Pack()/Verify() succeed, so a plain native default
|
|
// constructor must not leave it null - callers should never have to
|
|
// remember to allocate it themselves before the first Pack(). The sibling
|
|
// `optional_inner` field (same type, no `required`) is checked alongside it
|
|
// to confirm the change is scoped to required fields only.
|
|
void RequiredTableDefaultTest() {
|
|
using RequiredTableDefaultTestNS::Holder;
|
|
using RequiredTableDefaultTestNS::HolderT;
|
|
|
|
HolderT src;
|
|
TEST_NOTNULL(src.required_inner.get());
|
|
TEST_NULL(src.optional_inner.get());
|
|
|
|
// Never manually allocated required_inner - only relying on the default
|
|
// constructor above - yet Pack() must still succeed and round-trip it.
|
|
src.required_inner->value = 42;
|
|
|
|
flatbuffers::FlatBufferBuilder fbb;
|
|
fbb.Finish(Holder::Pack(fbb, &src));
|
|
|
|
auto dst = RequiredTableDefaultTestNS::UnPackHolder(fbb.GetBufferPointer());
|
|
|
|
TEST_NOTNULL(dst->required_inner.get());
|
|
TEST_EQ(dst->required_inner->value, 42u);
|
|
TEST_NULL(dst->optional_inner.get());
|
|
}
|
|
|
|
} // namespace tests
|
|
} // namespace flatbuffers
|