Skip to content

Commit

Permalink
contrib: fix serialization not calling load when only child is opt
Browse files Browse the repository at this point in the history
  • Loading branch information
0xFFFC0000 committed Nov 15, 2024
1 parent 893916a commit d8c4667
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ namespace epee
static bool unserialize_t_obj(serializible_type& obj, t_storage& stg, typename t_storage::hsection hparent_section, const char* pname)
{
typename t_storage::hsection hchild_section = stg.open_section(pname, hparent_section, false);
if(!hchild_section) return false;
return obj._load(stg, hchild_section);
}
//-------------------------------------------------------------------------------------------------------------------
Expand Down
61 changes: 61 additions & 0 deletions tests/unit_tests/epee_serialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,67 @@ struct ObjOfInts
KV_SERIALIZE(x)
END_KV_SERIALIZE_MAP()
};

template<typename t_param>
struct ParentObjWithOptChild
{
t_param params;

ParentObjWithOptChild(): params{} {}

BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(params)
END_KV_SERIALIZE_MAP()
};

struct ObjWithOptChild
{
bool test_value;

BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE_OPT(test_value, true);
END_KV_SERIALIZE_MAP()
};
}

TEST(epee_binary, serialize_deserialize)
{
ParentObjWithOptChild<ObjWithOptChild> o;
std::string o_json;
o.params.test_value = true;

EXPECT_TRUE(epee::serialization::store_t_to_json(o, o_json));
EXPECT_TRUE(o.params.test_value);

EXPECT_TRUE(epee::serialization::load_t_from_json(o, o_json));
EXPECT_TRUE(o.params.test_value);

ParentObjWithOptChild<ObjWithOptChild> o2;
std::string o2_json;
o.params.test_value = false;

EXPECT_TRUE(epee::serialization::store_t_to_json(o2, o2_json));
EXPECT_FALSE(o2.params.test_value);

EXPECT_TRUE(epee::serialization::load_t_from_json(o2, o2_json));
EXPECT_FALSE(o2.params.test_value);

// compiler sets default value of test_value to false
ParentObjWithOptChild<ObjWithOptChild> o3;
std::string o3_json;

EXPECT_TRUE(epee::serialization::store_t_to_json(o3, o3_json));
EXPECT_FALSE(o3.params.test_value);

EXPECT_TRUE(epee::serialization::load_t_from_json(o3, o3_json));
EXPECT_FALSE(o3.params.test_value);

// test case with empty json, to test default value initialization
ParentObjWithOptChild<ObjWithOptChild> o4;
std::string o4_json = "{}";

EXPECT_TRUE(epee::serialization::load_t_from_json(o4, o4_json));
EXPECT_TRUE(o4.params.test_value);
}

TEST(epee_binary, any_empty_seq)
Expand Down

0 comments on commit d8c4667

Please sign in to comment.