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

Side by Side Diff: base/memory/scoped_vector_unittest.cc

Issue 11316156: Assert on actual contents of ScopedVector in scoped_vector_unittest. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remediate to review Created 8 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/scoped_vector.h" 5 #include "base/memory/scoped_vector.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 } 86 }
87 87
88 LifeCycleState life_cycle_state() const { return life_cycle_state_; } 88 LifeCycleState life_cycle_state() const { return life_cycle_state_; }
89 89
90 // Factory method for creating a new LifeCycleObject tied to this 90 // Factory method for creating a new LifeCycleObject tied to this
91 // LifeCycleWatcher. 91 // LifeCycleWatcher.
92 LifeCycleObject* NewLifeCycleObject() { 92 LifeCycleObject* NewLifeCycleObject() {
93 return new LifeCycleObject(this); 93 return new LifeCycleObject(this);
94 } 94 }
95 95
96 // Returns true iff |object| is the same object that this watcher is tracking.
97 bool IsWatching(LifeCycleObject* object) const {
98 return object == constructed_life_cycle_object_.get();
99 }
100
96 private: 101 private:
97 LifeCycleState life_cycle_state_; 102 LifeCycleState life_cycle_state_;
98 scoped_ptr<LifeCycleObject> constructed_life_cycle_object_; 103 scoped_ptr<LifeCycleObject> constructed_life_cycle_object_;
99 104
100 DISALLOW_COPY_AND_ASSIGN(LifeCycleWatcher); 105 DISALLOW_COPY_AND_ASSIGN(LifeCycleWatcher);
101 }; 106 };
102 107
103 TEST(ScopedVectorTest, LifeCycleWatcher) { 108 TEST(ScopedVectorTest, LifeCycleWatcher) {
104 LifeCycleWatcher watcher; 109 LifeCycleWatcher watcher;
105 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 110 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
106 LifeCycleObject* object = watcher.NewLifeCycleObject(); 111 LifeCycleObject* object = watcher.NewLifeCycleObject();
107 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 112 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
108 delete object; 113 delete object;
109 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 114 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
110 } 115 }
111 116
112 TEST(ScopedVectorTest, Clear) { 117 TEST(ScopedVectorTest, Clear) {
113 LifeCycleWatcher watcher; 118 LifeCycleWatcher watcher;
114 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 119 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
115 ScopedVector<LifeCycleObject> scoped_vector; 120 ScopedVector<LifeCycleObject> scoped_vector;
116 scoped_vector.push_back(watcher.NewLifeCycleObject()); 121 scoped_vector.push_back(watcher.NewLifeCycleObject());
117 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 122 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
123 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
118 scoped_vector.clear(); 124 scoped_vector.clear();
119 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 125 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
120 EXPECT_TRUE(scoped_vector.empty()); 126 EXPECT_TRUE(scoped_vector.empty());
121 } 127 }
122 128
123 TEST(ScopedVectorTest, WeakClear) { 129 TEST(ScopedVectorTest, WeakClear) {
124 LifeCycleWatcher watcher; 130 LifeCycleWatcher watcher;
125 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 131 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
126 ScopedVector<LifeCycleObject> scoped_vector; 132 ScopedVector<LifeCycleObject> scoped_vector;
127 scoped_vector.push_back(watcher.NewLifeCycleObject()); 133 scoped_vector.push_back(watcher.NewLifeCycleObject());
128 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 134 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
135 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
129 scoped_vector.weak_clear(); 136 scoped_vector.weak_clear();
130 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 137 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
131 EXPECT_TRUE(scoped_vector.empty()); 138 EXPECT_TRUE(scoped_vector.empty());
132 } 139 }
133 140
134 TEST(ScopedVectorTest, ResizeShrink) { 141 TEST(ScopedVectorTest, ResizeShrink) {
135 LifeCycleWatcher first_watcher; 142 LifeCycleWatcher first_watcher;
136 EXPECT_EQ(LC_INITIAL, first_watcher.life_cycle_state()); 143 EXPECT_EQ(LC_INITIAL, first_watcher.life_cycle_state());
137 LifeCycleWatcher second_watcher; 144 LifeCycleWatcher second_watcher;
138 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state()); 145 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state());
139 ScopedVector<LifeCycleObject> scoped_vector; 146 ScopedVector<LifeCycleObject> scoped_vector;
140 147
141 scoped_vector.push_back(first_watcher.NewLifeCycleObject()); 148 scoped_vector.push_back(first_watcher.NewLifeCycleObject());
142 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state()); 149 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state());
143 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state()); 150 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state());
151 EXPECT_TRUE(first_watcher.IsWatching(scoped_vector[0]));
152 EXPECT_FALSE(second_watcher.IsWatching(scoped_vector[0]));
144 153
145 scoped_vector.push_back(second_watcher.NewLifeCycleObject()); 154 scoped_vector.push_back(second_watcher.NewLifeCycleObject());
146 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state()); 155 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state());
147 EXPECT_EQ(LC_CONSTRUCTED, second_watcher.life_cycle_state()); 156 EXPECT_EQ(LC_CONSTRUCTED, second_watcher.life_cycle_state());
157 EXPECT_FALSE(first_watcher.IsWatching(scoped_vector[1]));
158 EXPECT_TRUE(second_watcher.IsWatching(scoped_vector[1]));
148 159
149 // Test that shrinking a vector deletes elements in the dissapearing range. 160 // Test that shrinking a vector deletes elements in the disappearing range.
150 scoped_vector.resize(1); 161 scoped_vector.resize(1);
151 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state()); 162 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state());
152 EXPECT_EQ(LC_DESTROYED, second_watcher.life_cycle_state()); 163 EXPECT_EQ(LC_DESTROYED, second_watcher.life_cycle_state());
153 EXPECT_EQ(1u, scoped_vector.size()); 164 EXPECT_EQ(1u, scoped_vector.size());
165 EXPECT_TRUE(first_watcher.IsWatching(scoped_vector[0]));
154 } 166 }
155 167
156 TEST(ScopedVectorTest, ResizeGrow) { 168 TEST(ScopedVectorTest, ResizeGrow) {
157 LifeCycleWatcher watcher; 169 LifeCycleWatcher watcher;
158 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 170 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
159 ScopedVector<LifeCycleObject> scoped_vector; 171 ScopedVector<LifeCycleObject> scoped_vector;
160 scoped_vector.push_back(watcher.NewLifeCycleObject()); 172 scoped_vector.push_back(watcher.NewLifeCycleObject());
161 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 173 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
174 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
162 175
163 scoped_vector.resize(5); 176 scoped_vector.resize(5);
164 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 177 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
165 EXPECT_EQ(5u, scoped_vector.size()); 178 ASSERT_EQ(5u, scoped_vector.size());
179 EXPECT_TRUE(watcher.IsWatching(scoped_vector[0]));
180 EXPECT_FALSE(watcher.IsWatching(scoped_vector[1]));
181 EXPECT_FALSE(watcher.IsWatching(scoped_vector[2]));
182 EXPECT_FALSE(watcher.IsWatching(scoped_vector[3]));
183 EXPECT_FALSE(watcher.IsWatching(scoped_vector[4]));
166 } 184 }
167 185
168 TEST(ScopedVectorTest, Scope) { 186 TEST(ScopedVectorTest, Scope) {
169 LifeCycleWatcher watcher; 187 LifeCycleWatcher watcher;
170 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 188 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
171 { 189 {
172 ScopedVector<LifeCycleObject> scoped_vector; 190 ScopedVector<LifeCycleObject> scoped_vector;
173 scoped_vector.push_back(watcher.NewLifeCycleObject()); 191 scoped_vector.push_back(watcher.NewLifeCycleObject());
174 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 192 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
193 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
175 } 194 }
176 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 195 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
177 } 196 }
178 197
179 TEST(ScopedVectorTest, MoveConstruct) { 198 TEST(ScopedVectorTest, MoveConstruct) {
180 LifeCycleWatcher watcher; 199 LifeCycleWatcher watcher;
181 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 200 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
182 { 201 {
183 ScopedVector<LifeCycleObject> scoped_vector; 202 ScopedVector<LifeCycleObject> scoped_vector;
184 scoped_vector.push_back(watcher.NewLifeCycleObject()); 203 scoped_vector.push_back(watcher.NewLifeCycleObject());
185 EXPECT_FALSE(scoped_vector.empty()); 204 EXPECT_FALSE(scoped_vector.empty());
205 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
186 206
187 ScopedVector<LifeCycleObject> scoped_vector_copy(scoped_vector.Pass()); 207 ScopedVector<LifeCycleObject> scoped_vector_copy(scoped_vector.Pass());
188 EXPECT_TRUE(scoped_vector.empty()); 208 EXPECT_TRUE(scoped_vector.empty());
189 EXPECT_FALSE(scoped_vector_copy.empty()); 209 EXPECT_FALSE(scoped_vector_copy.empty());
210 EXPECT_TRUE(watcher.IsWatching(scoped_vector_copy.back()));
190 211
191 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 212 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
192 } 213 }
193 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 214 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
194 } 215 }
195 216
196 TEST(ScopedVectorTest, MoveAssign) { 217 TEST(ScopedVectorTest, MoveAssign) {
197 LifeCycleWatcher watcher; 218 LifeCycleWatcher watcher;
198 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 219 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
199 { 220 {
200 ScopedVector<LifeCycleObject> scoped_vector; 221 ScopedVector<LifeCycleObject> scoped_vector;
201 scoped_vector.push_back(watcher.NewLifeCycleObject()); 222 scoped_vector.push_back(watcher.NewLifeCycleObject());
202 ScopedVector<LifeCycleObject> scoped_vector_assign; 223 ScopedVector<LifeCycleObject> scoped_vector_assign;
203 EXPECT_FALSE(scoped_vector.empty()); 224 EXPECT_FALSE(scoped_vector.empty());
225 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
204 226
205 scoped_vector_assign = scoped_vector.Pass(); 227 scoped_vector_assign = scoped_vector.Pass();
206 EXPECT_TRUE(scoped_vector.empty()); 228 EXPECT_TRUE(scoped_vector.empty());
207 EXPECT_FALSE(scoped_vector_assign.empty()); 229 EXPECT_FALSE(scoped_vector_assign.empty());
230 EXPECT_TRUE(watcher.IsWatching(scoped_vector_assign.back()));
208 231
209 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 232 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
210 } 233 }
211 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 234 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
212 } 235 }
213 236
214 class DeleteCounter { 237 class DeleteCounter {
215 public: 238 public:
216 explicit DeleteCounter(int* deletes) 239 explicit DeleteCounter(int* deletes)
217 : deletes_(deletes) { 240 : deletes_(deletes) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 for(LifeCycleWatcher* it = watchers; it != watchers + 1; ++it) 292 for(LifeCycleWatcher* it = watchers; it != watchers + 1; ++it)
270 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state()); 293 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state());
271 for(LifeCycleWatcher* it = watchers + 1; it != watchers + 3; ++it) 294 for(LifeCycleWatcher* it = watchers + 1; it != watchers + 3; ++it)
272 EXPECT_EQ(LC_DESTROYED, it->life_cycle_state()); 295 EXPECT_EQ(LC_DESTROYED, it->life_cycle_state());
273 for(LifeCycleWatcher* it = watchers + 3; it != watchers + arraysize(watchers); 296 for(LifeCycleWatcher* it = watchers + 3; it != watchers + arraysize(watchers);
274 ++it) 297 ++it)
275 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state()); 298 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state());
276 } 299 }
277 300
278 } // namespace 301 } // namespace
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698