diff options
author | crupest <crupest@outlook.com> | 2024-01-01 22:20:21 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2024-02-02 22:02:16 +0800 |
commit | c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54 (patch) | |
tree | eb25d1a429917b3e7a0cf0ce3b66f50bbe36f788 /test/common/SelfResolvableTest.cpp | |
parent | 8673907e4e3f2f9ff6e8bd18aaf3ddc6d84c0e64 (diff) | |
download | cru-c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54.tar.gz cru-c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54.tar.bz2 cru-c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54.zip |
Add SelfResolvable tests for casted type.
NEED TEST: Event2
Diffstat (limited to 'test/common/SelfResolvableTest.cpp')
-rw-r--r-- | test/common/SelfResolvableTest.cpp | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/test/common/SelfResolvableTest.cpp b/test/common/SelfResolvableTest.cpp index 3664a223..36b8cd6f 100644 --- a/test/common/SelfResolvableTest.cpp +++ b/test/common/SelfResolvableTest.cpp @@ -6,13 +6,22 @@ #include <memory> namespace { +class SelfResolvableTestClassBase { + public: + SelfResolvableTestClassBase() = default; + CRU_DELETE_COPY(SelfResolvableTestClassBase) + CRU_DEFAULT_MOVE(SelfResolvableTestClassBase) + virtual ~SelfResolvableTestClassBase() = default; +}; + class SelfResolvableTestClass - : public cru::SelfResolvable<SelfResolvableTestClass> { + : public SelfResolvableTestClassBase, + public cru::SelfResolvable<SelfResolvableTestClass> { public: SelfResolvableTestClass() : ptr_(new int(123)) {} CRU_DELETE_COPY(SelfResolvableTestClass) CRU_DEFAULT_MOVE(SelfResolvableTestClass) - ~SelfResolvableTestClass() = default; + ~SelfResolvableTestClass() override = default; private: std::shared_ptr<int> ptr_; @@ -74,3 +83,28 @@ TEST_CASE("SelfResolvable object moved should work.", "[self-resolvable]") { REQUIRE(resolver_move.Resolve() == &moved_object); } +TEST_CASE("SelfResolvable should work for casted type.", "[self-resolvable]") { + auto test_object = new SelfResolvableTestClass(); + + cru::ObjectResolver<SelfResolvableTestClassBase> base_resolver = + test_object->CreateResolver(); + + REQUIRE(base_resolver.Resolve() == test_object); + + auto base_resolver2 = base_resolver; + REQUIRE(base_resolver2.Resolve() == test_object); + + auto base_resolver3 = std::move(base_resolver2); + REQUIRE(base_resolver3.Resolve() == test_object); + + auto moved_object = new SelfResolvableTestClass(std::move(*test_object)); + delete test_object; + + REQUIRE(base_resolver.Resolve() == moved_object); + REQUIRE(base_resolver3.Resolve() == moved_object); + + delete moved_object; + + REQUIRE(base_resolver.Resolve() == nullptr); + REQUIRE(base_resolver3.Resolve() == nullptr); +} |