27TEST(CFTest, CanCreateRefs) {
30 ASSERT_TRUE(
static_cast<bool>(
string));
33 const auto ref_count = CFGetRetainCount(
string);
39 ASSERT_EQ(ref_count + 1u, CFGetRetainCount(
string));
40 ASSERT_EQ(CFGetRetainCount(string2), CFGetRetainCount(
string));
43 ASSERT_FALSE(string2);
44 ASSERT_EQ(ref_count, CFGetRetainCount(
string));
49 auto string3 = string;
51 ASSERT_EQ(ref_count + 1u, CFGetRetainCount(
string));
52 auto raw_string3 = string3.Release();
53 ASSERT_FALSE(string3);
54 ASSERT_EQ(ref_count + 1u, CFGetRetainCount(
string));
55 CFRelease(raw_string3);
56 ASSERT_EQ(ref_count, CFGetRetainCount(
string));
61 auto string_source = string;
62 ASSERT_TRUE(string_source);
63 auto string_move = std::move(string_source);
64 ASSERT_FALSE(string_source);
65 ASSERT_EQ(ref_count + 1u, CFGetRetainCount(
string));
67 ASSERT_EQ(ref_count, CFGetRetainCount(
string));
72 auto string_move_assign = std::move(
string);
74 ASSERT_EQ(ref_count, CFGetRetainCount(string_move_assign));
78TEST(CFTest, GetReturnsUnderlyingObject) {
79 CFMutableStringRef cf_string = CFStringCreateMutable(kCFAllocatorDefault, 100u);
80 const CFIndex ref_count_before = CFGetRetainCount(cf_string);
83 CFMutableStringRef returned_string = string_ref.
Get();
84 const CFIndex ref_count_after = CFGetRetainCount(cf_string);
85 EXPECT_EQ(cf_string, returned_string);
86 EXPECT_EQ(ref_count_before, ref_count_after);
89TEST(CFTest, RetainSharesOwnership) {
90 CFMutableStringRef cf_string = CFStringCreateMutable(kCFAllocatorDefault, 100u);
91 const CFIndex ref_count_before = CFGetRetainCount(cf_string);
94 string_ref.
Retain(cf_string);
95 const CFIndex ref_count_after = CFGetRetainCount(cf_string);
97 EXPECT_EQ(cf_string, string_ref);
98 EXPECT_EQ(ref_count_before + 1u, ref_count_after);