mirror of
https://github.com/monero-project/monero.git
synced 2024-12-27 00:49:24 -05:00
contrib: force (de)serialization to create params section incase there is none.
Co-authored-by: Boog900 <boog900@tutanota.com>
This commit is contained in:
parent
58a1d54a4f
commit
13df862535
@ -171,6 +171,13 @@
|
||||
epee::serialization::store_t_to_json(static_cast<epee::json_rpc::error_response&>(rsp), response_info.m_body); \
|
||||
return true; \
|
||||
} \
|
||||
epee::serialization::storage_entry params_; \
|
||||
params_ = epee::serialization::storage_entry(epee::serialization::section()); \
|
||||
if(!ps.get_value("params", params_, nullptr)) \
|
||||
{ \
|
||||
epee::serialization::section params_section; \
|
||||
ps.set_value("params", std::move(params_section), nullptr); \
|
||||
} \
|
||||
if(false) return true; //just a stub to have "else if"
|
||||
|
||||
|
||||
|
@ -29,8 +29,11 @@
|
||||
|
||||
#include <cstdint>
|
||||
#include <gtest/gtest.h>
|
||||
#include <vector>
|
||||
|
||||
#include "serialization/keyvalue_serialization.h"
|
||||
#include "storages/portable_storage.h"
|
||||
#include "storages/portable_storage_template_helper.h"
|
||||
#include "span.h"
|
||||
|
||||
TEST(epee_binary, two_keys)
|
||||
@ -54,3 +57,68 @@ TEST(epee_binary, duplicate_key)
|
||||
epee::serialization::portable_storage storage{};
|
||||
EXPECT_FALSE(storage.load_from_binary(data));
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
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 optional field default initialization.
|
||||
ParentObjWithOptChild<ObjWithOptChild> o4;
|
||||
std::string o4_json = "{\"params\": {}}";
|
||||
|
||||
EXPECT_TRUE(epee::serialization::load_t_from_json(o4, o4_json));
|
||||
EXPECT_TRUE(o4.params.test_value);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user