aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-01-01 22:20:21 +0800
committercrupest <crupest@outlook.com>2024-02-02 22:02:16 +0800
commitc1e86826ddcd337bb0ff5bc9f5f65b11933c4a54 (patch)
treeeb25d1a429917b3e7a0cf0ce3b66f50bbe36f788
parent8673907e4e3f2f9ff6e8bd18aaf3ddc6d84c0e64 (diff)
downloadcru-c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54.tar.gz
cru-c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54.tar.bz2
cru-c1e86826ddcd337bb0ff5bc9f5f65b11933c4a54.zip
Add SelfResolvable tests for casted type.
NEED TEST: Event2
-rw-r--r--test/common/SelfResolvableTest.cpp38
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);
+}