diff --git a/engine/src/flutter/fml/platform/darwin/cf_utils_unittests.mm b/engine/src/flutter/fml/platform/darwin/cf_utils_unittests.mm index dba51e1c2a..d18ab0dad6 100644 --- a/engine/src/flutter/fml/platform/darwin/cf_utils_unittests.mm +++ b/engine/src/flutter/fml/platform/darwin/cf_utils_unittests.mm @@ -8,18 +8,19 @@ namespace fml { +// Test state used in CFTest.SupportsCustomRetainRelease. +struct CFRefTestState { + bool retain_called; + bool release_called; +}; + // Template specialization used in CFTest.SupportsCustomRetainRelease. template <> -struct CFRefTraits { - static bool retain_called; - static bool release_called; - - static constexpr int64_t kNullValue = 0; - static void Retain(int64_t instance) { retain_called = true; } - static void Release(int64_t instance) { release_called = true; } +struct CFRefTraits { + static constexpr CFRefTestState* kNullValue = nullptr; + static void Retain(CFRefTestState* instance) { instance->retain_called = true; } + static void Release(CFRefTestState* instance) { instance->release_called = true; } }; -bool CFRefTraits::retain_called = false; -bool CFRefTraits::release_called = false; namespace testing { @@ -98,18 +99,21 @@ TEST(CFTest, RetainSharesOwnership) { } TEST(CFTest, SupportsCustomRetainRelease) { - CFRef ref(1); - ASSERT_EQ(ref.Get(), 1); - ASSERT_FALSE(CFRefTraits::retain_called); - ASSERT_FALSE(CFRefTraits::release_called); + CFRefTestState instance{}; + CFRef ref(&instance); + ASSERT_EQ(ref.Get(), &instance); + ASSERT_FALSE(instance.retain_called); + ASSERT_FALSE(instance.release_called); ref.Reset(); - ASSERT_EQ(ref.Get(), 0); - ASSERT_TRUE(CFRefTraits::release_called); - ref.Retain(2); - ASSERT_EQ(ref.Get(), 2); - ASSERT_TRUE(CFRefTraits::retain_called); - CFRefTraits::retain_called = false; - CFRefTraits::release_called = false; + ASSERT_EQ(ref.Get(), nullptr); + ASSERT_FALSE(instance.retain_called); + ASSERT_TRUE(instance.release_called); + + CFRefTestState other_instance{}; + ref.Retain(&other_instance); + ASSERT_EQ(ref.Get(), &other_instance); + ASSERT_TRUE(other_instance.retain_called); + ASSERT_FALSE(other_instance.release_called); } } // namespace testing