Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: core/fxcrt/cfx_retain_ptr_unittest.cpp

Issue 1805683002: Add a Retained Pointer smart class. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Move FreeDeleter and such to fx_memory.h Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/include/fxcrt/cfx_retain_ptr.h"
6
7 #include <utility>
8
9 #include "testing/fx_string_testhelpers.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace {
13
14 class PseudoRetainable {
15 public:
16 PseudoRetainable() : retain_count_(0), release_count_(0) {}
17 void Retain() { ++retain_count_; }
18 void Release() { ++release_count_; }
19 int retain_count() const { return retain_count_; }
20 int release_count() const { return release_count_; }
21
22 private:
23 int retain_count_;
24 int release_count_;
25 };
26
27 } // namespace
28
29 TEST(fxcrt, RetainPtrNull) {
30 CFX_RetainPtr<PseudoRetainable> ptr;
31 EXPECT_EQ(nullptr, ptr.Get());
32 }
33
34 TEST(fxcrt, RetainPtrNormal) {
35 PseudoRetainable obj;
36 {
37 CFX_RetainPtr<PseudoRetainable> ptr(&obj);
38 EXPECT_EQ(&obj, ptr.Get());
39 EXPECT_EQ(1, obj.retain_count());
40 EXPECT_EQ(0, obj.release_count());
41 }
42 EXPECT_EQ(1, obj.retain_count());
43 EXPECT_EQ(1, obj.release_count());
44 }
45
46 TEST(fxcrt, RetainPtrCopyCtor) {
47 PseudoRetainable obj;
48 {
49 CFX_RetainPtr<PseudoRetainable> ptr1(&obj);
50 {
51 CFX_RetainPtr<PseudoRetainable> ptr2(ptr1);
52 EXPECT_EQ(2, obj.retain_count());
53 EXPECT_EQ(0, obj.release_count());
54 }
55 EXPECT_EQ(2, obj.retain_count());
56 EXPECT_EQ(1, obj.release_count());
57 }
58 EXPECT_EQ(2, obj.retain_count());
59 EXPECT_EQ(2, obj.release_count());
60 }
61
62 TEST(fxcrt, RetainPtrMoveCtor) {
63 PseudoRetainable obj;
64 {
65 CFX_RetainPtr<PseudoRetainable> ptr1(&obj);
66 {
67 CFX_RetainPtr<PseudoRetainable> ptr2(std::move(ptr1));
68 EXPECT_EQ(1, obj.retain_count());
69 EXPECT_EQ(0, obj.release_count());
70 }
71 EXPECT_EQ(1, obj.retain_count());
72 EXPECT_EQ(1, obj.release_count());
73 }
74 EXPECT_EQ(1, obj.retain_count());
75 EXPECT_EQ(1, obj.release_count());
76 }
77
78 TEST(fxcrt, RetainPtrResetNull) {
79 PseudoRetainable obj;
80 {
81 CFX_RetainPtr<PseudoRetainable> ptr(&obj);
82 ptr.Reset();
83 EXPECT_EQ(1, obj.retain_count());
84 EXPECT_EQ(1, obj.release_count());
85 }
86 EXPECT_EQ(1, obj.retain_count());
87 EXPECT_EQ(1, obj.release_count());
88 }
89
90 TEST(fxcrt, RetainPtrReset) {
91 PseudoRetainable obj1;
92 PseudoRetainable obj2;
93 {
94 CFX_RetainPtr<PseudoRetainable> ptr(&obj1);
95 ptr.Reset(&obj2);
96 EXPECT_EQ(1, obj1.retain_count());
97 EXPECT_EQ(1, obj1.release_count());
98 EXPECT_EQ(1, obj2.retain_count());
99 EXPECT_EQ(0, obj2.release_count());
100 }
101 EXPECT_EQ(1, obj1.retain_count());
102 EXPECT_EQ(1, obj1.release_count());
103 EXPECT_EQ(1, obj2.retain_count());
104 EXPECT_EQ(1, obj2.release_count());
105 }
106
107 TEST(fxcrt, RetainPtrSwap) {
108 PseudoRetainable obj1;
109 PseudoRetainable obj2;
110 {
111 CFX_RetainPtr<PseudoRetainable> ptr1(&obj1);
112 {
113 CFX_RetainPtr<PseudoRetainable> ptr2(&obj2);
114 ptr1.Swap(ptr2);
115 EXPECT_EQ(1, obj1.retain_count());
116 EXPECT_EQ(0, obj1.release_count());
117 EXPECT_EQ(1, obj2.retain_count());
118 EXPECT_EQ(0, obj2.release_count());
119 }
120 EXPECT_EQ(1, obj1.retain_count());
121 EXPECT_EQ(1, obj1.release_count());
122 EXPECT_EQ(1, obj2.retain_count());
123 EXPECT_EQ(0, obj2.release_count());
124 }
125 EXPECT_EQ(1, obj1.retain_count());
126 EXPECT_EQ(1, obj1.release_count());
127 EXPECT_EQ(1, obj2.retain_count());
128 EXPECT_EQ(1, obj2.release_count());
129 }
130
131 TEST(fxcrt, RetainPtrAssign) {
132 PseudoRetainable obj;
133 {
134 CFX_RetainPtr<PseudoRetainable> ptr(&obj);
135 {
136 CFX_RetainPtr<PseudoRetainable> ptr2;
137 ptr2 = ptr;
138 EXPECT_EQ(2, obj.retain_count());
139 EXPECT_EQ(0, obj.release_count());
140 }
141 EXPECT_EQ(2, obj.retain_count());
142 EXPECT_EQ(1, obj.release_count());
143 }
144 EXPECT_EQ(2, obj.retain_count());
145 EXPECT_EQ(2, obj.release_count());
146 }
147
148 TEST(fxcrt, RetainPtrEquals) {
149 PseudoRetainable obj1;
150 PseudoRetainable obj2;
151 CFX_RetainPtr<PseudoRetainable> null_ptr1;
152 CFX_RetainPtr<PseudoRetainable> obj1_ptr1(&obj1);
153 CFX_RetainPtr<PseudoRetainable> obj2_ptr1(&obj2);
154 {
155 CFX_RetainPtr<PseudoRetainable> null_ptr2;
156 EXPECT_TRUE(null_ptr1 == null_ptr2);
157
158 CFX_RetainPtr<PseudoRetainable> obj1_ptr2(&obj1);
159 EXPECT_TRUE(obj1_ptr1 == obj1_ptr2);
160
161 CFX_RetainPtr<PseudoRetainable> obj2_ptr2(&obj2);
162 EXPECT_TRUE(obj2_ptr1 == obj2_ptr2);
163 }
164 EXPECT_FALSE(null_ptr1 == obj1_ptr1);
165 EXPECT_FALSE(null_ptr1 == obj2_ptr1);
166 EXPECT_FALSE(obj1_ptr1 == obj2_ptr1);
167 }
168
169 TEST(fxcrt, RetainPtrNotEquals) {
170 PseudoRetainable obj1;
171 PseudoRetainable obj2;
172 CFX_RetainPtr<PseudoRetainable> null_ptr1;
173 CFX_RetainPtr<PseudoRetainable> obj1_ptr1(&obj1);
174 CFX_RetainPtr<PseudoRetainable> obj2_ptr1(&obj2);
175 {
176 CFX_RetainPtr<PseudoRetainable> null_ptr2;
177 CFX_RetainPtr<PseudoRetainable> obj1_ptr2(&obj1);
178 CFX_RetainPtr<PseudoRetainable> obj2_ptr2(&obj2);
179 EXPECT_FALSE(null_ptr1 != null_ptr2);
180 EXPECT_FALSE(obj1_ptr1 != obj1_ptr2);
181 EXPECT_FALSE(obj2_ptr1 != obj2_ptr2);
182 }
183 EXPECT_TRUE(null_ptr1 != obj1_ptr1);
184 EXPECT_TRUE(null_ptr1 != obj2_ptr1);
185 EXPECT_TRUE(obj1_ptr1 != obj2_ptr1);
186 }
187
188 TEST(fxcrt, RetainPtrBool) {
189 PseudoRetainable obj1;
190 CFX_RetainPtr<PseudoRetainable> null_ptr;
191 CFX_RetainPtr<PseudoRetainable> obj1_ptr(&obj1);
192 bool null_bool = null_ptr;
193 bool obj1_bool = obj1_ptr;
194 EXPECT_FALSE(null_bool);
195 EXPECT_TRUE(obj1_bool);
196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698