diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-04-30 00:58:47 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-11-07 16:41:37 +0000 |
commit | 788f2790125af40e4ffab75cc3963f4442524e2e (patch) | |
tree | 86d93860dd04265b7e511a1da4ab1c9a55f6cc27 /test/test-persistance.cpp | |
parent | Extend factory map to include make_shared (diff) | |
download | ilt-788f2790125af40e4ffab75cc3963f4442524e2e.tar.bz2 ilt-788f2790125af40e4ffab75cc3963f4442524e2e.tar.xz ilt-788f2790125af40e4ffab75cc3963f4442524e2e.zip |
Implement shared_ptr support
Uses somewhat dirty global map for keeping shared_ptr objects by key, needs fix
Diffstat (limited to 'test/test-persistance.cpp')
-rw-r--r-- | test/test-persistance.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/test-persistance.cpp b/test/test-persistance.cpp index a4fda31..2c06c48 100644 --- a/test/test-persistance.cpp +++ b/test/test-persistance.cpp @@ -68,6 +68,7 @@ struct JPP : public Persistanace::JsonParsePersistance { BOOST_TEST_CONTEXT(path) { std::ifstream ss {path}; auto to = loadState<T>(ss); + Persistanace::sharedObjects.clear(); BOOST_CHECK(stk.empty()); BOOST_REQUIRE(to); return to; @@ -177,3 +178,36 @@ BOOST_FIXTURE_TEST_CASE(load_vector_ptr, JPP) BOOST_CHECK(!to->vptr.at(2)); BOOST_CHECK(to->vptr.at(3)->str.empty()); } + +struct SharedTestObject : public Persistanace::Persistable { + SharedTestObject() = default; + + std::shared_ptr<AbsObject> sptr; + std::shared_ptr<SubObject> ssptr; + + bool + persist(Persistanace::PersistanceStore & store) override + { + return STORE_TYPE && STORE_MEMBER(sptr) && STORE_MEMBER(ssptr); + } +}; + +BOOST_FIXTURE_TEST_CASE(load_shared_object1, JPP) +{ + auto to = load_json<std::unique_ptr<SharedTestObject>>(FIXTURESDIR "json/shared_ptr1.json"); + BOOST_CHECK(to->sptr); + BOOST_CHECK(to->ssptr); + BOOST_CHECK_NE(to->sptr, to->ssptr); + BOOST_CHECK_EQUAL(to->sptr.use_count(), 1); + BOOST_CHECK_EQUAL(to->ssptr.use_count(), 1); +} + +BOOST_FIXTURE_TEST_CASE(load_shared_object2, JPP) +{ + auto to = load_json<std::unique_ptr<SharedTestObject>>(FIXTURESDIR "json/shared_ptr2.json"); + BOOST_CHECK(to->sptr); + BOOST_CHECK(to->ssptr); + BOOST_CHECK_EQUAL(to->sptr, to->ssptr); + BOOST_CHECK_EQUAL(to->sptr.use_count(), 2); + BOOST_CHECK_EQUAL(to->ssptr.use_count(), 2); +} |