Files
flatbuffers-bigfoot/tests/required_table_default_test.cpp
T

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