fml: Improve CFTest.SupportsCustomRetainRelease test (flutter/engine#56480)
Eliminates the use of statics in CFTest.SupportsCustomRetainRelease (introduced in https://github.com/flutter/engine/pull/56463), "clever" as it was. Issue: https://github.com/flutter/flutter/issues/137801 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
This commit is contained in:
parent
d4446c079b
commit
aed9a9d3fa
@ -8,18 +8,19 @@
|
|||||||
|
|
||||||
namespace fml {
|
namespace fml {
|
||||||
|
|
||||||
|
// Test state used in CFTest.SupportsCustomRetainRelease.
|
||||||
|
struct CFRefTestState {
|
||||||
|
bool retain_called;
|
||||||
|
bool release_called;
|
||||||
|
};
|
||||||
|
|
||||||
// Template specialization used in CFTest.SupportsCustomRetainRelease.
|
// Template specialization used in CFTest.SupportsCustomRetainRelease.
|
||||||
template <>
|
template <>
|
||||||
struct CFRefTraits<int64_t> {
|
struct CFRefTraits<CFRefTestState*> {
|
||||||
static bool retain_called;
|
static constexpr CFRefTestState* kNullValue = nullptr;
|
||||||
static bool release_called;
|
static void Retain(CFRefTestState* instance) { instance->retain_called = true; }
|
||||||
|
static void Release(CFRefTestState* instance) { instance->release_called = true; }
|
||||||
static constexpr int64_t kNullValue = 0;
|
|
||||||
static void Retain(int64_t instance) { retain_called = true; }
|
|
||||||
static void Release(int64_t instance) { release_called = true; }
|
|
||||||
};
|
};
|
||||||
bool CFRefTraits<int64_t>::retain_called = false;
|
|
||||||
bool CFRefTraits<int64_t>::release_called = false;
|
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
|
|
||||||
@ -98,18 +99,21 @@ TEST(CFTest, RetainSharesOwnership) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(CFTest, SupportsCustomRetainRelease) {
|
TEST(CFTest, SupportsCustomRetainRelease) {
|
||||||
CFRef<int64_t> ref(1);
|
CFRefTestState instance{};
|
||||||
ASSERT_EQ(ref.Get(), 1);
|
CFRef<CFRefTestState*> ref(&instance);
|
||||||
ASSERT_FALSE(CFRefTraits<int64_t>::retain_called);
|
ASSERT_EQ(ref.Get(), &instance);
|
||||||
ASSERT_FALSE(CFRefTraits<int64_t>::release_called);
|
ASSERT_FALSE(instance.retain_called);
|
||||||
|
ASSERT_FALSE(instance.release_called);
|
||||||
ref.Reset();
|
ref.Reset();
|
||||||
ASSERT_EQ(ref.Get(), 0);
|
ASSERT_EQ(ref.Get(), nullptr);
|
||||||
ASSERT_TRUE(CFRefTraits<int64_t>::release_called);
|
ASSERT_FALSE(instance.retain_called);
|
||||||
ref.Retain(2);
|
ASSERT_TRUE(instance.release_called);
|
||||||
ASSERT_EQ(ref.Get(), 2);
|
|
||||||
ASSERT_TRUE(CFRefTraits<int64_t>::retain_called);
|
CFRefTestState other_instance{};
|
||||||
CFRefTraits<int64_t>::retain_called = false;
|
ref.Retain(&other_instance);
|
||||||
CFRefTraits<int64_t>::release_called = false;
|
ASSERT_EQ(ref.Get(), &other_instance);
|
||||||
|
ASSERT_TRUE(other_instance.retain_called);
|
||||||
|
ASSERT_FALSE(other_instance.release_called);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace testing
|
} // namespace testing
|
||||||
|
Loading…
x
Reference in New Issue
Block a user