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:
Chris Bracken 2024-11-10 11:59:27 -08:00 committed by GitHub
parent d4446c079b
commit aed9a9d3fa

View File

@ -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