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

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: more asserts 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } 84 }
85 85
86 LifeCycleState life_cycle_state() const { return life_cycle_state_; } 86 LifeCycleState life_cycle_state() const { return life_cycle_state_; }
87 87
88 // Factory method for creating a new LifeCycleObject tied to this 88 // Factory method for creating a new LifeCycleObject tied to this
89 // LifeCycleWatcher. 89 // LifeCycleWatcher.
90 LifeCycleObject* NewLifeCycleObject() { 90 LifeCycleObject* NewLifeCycleObject() {
91 return new LifeCycleObject(this); 91 return new LifeCycleObject(this);
92 } 92 }
93 93
94 // Returns true iff |object| is the same object that this watcher is tracking.
95 bool IsWatching(LifeCycleObject* object) const {
96 return object == constructed_life_cycle_object_.get();
97 }
98
94 private: 99 private:
95 LifeCycleState life_cycle_state_; 100 LifeCycleState life_cycle_state_;
96 scoped_ptr<LifeCycleObject> constructed_life_cycle_object_; 101 scoped_ptr<LifeCycleObject> constructed_life_cycle_object_;
97 102
98 DISALLOW_COPY_AND_ASSIGN(LifeCycleWatcher); 103 DISALLOW_COPY_AND_ASSIGN(LifeCycleWatcher);
99 }; 104 };
100 105
101 TEST(ScopedVectorTest, LifeCycleWatcher) { 106 TEST(ScopedVectorTest, LifeCycleWatcher) {
102 LifeCycleWatcher watcher; 107 LifeCycleWatcher watcher;
103 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 108 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
104 LifeCycleObject* object = watcher.NewLifeCycleObject(); 109 LifeCycleObject* object = watcher.NewLifeCycleObject();
105 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 110 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
106 delete object; 111 delete object;
107 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 112 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
108 } 113 }
109 114
110 TEST(ScopedVectorTest, Clear) { 115 TEST(ScopedVectorTest, Clear) {
111 LifeCycleWatcher watcher; 116 LifeCycleWatcher watcher;
112 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 117 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
113 ScopedVector<LifeCycleObject> scoped_vector; 118 ScopedVector<LifeCycleObject> scoped_vector;
114 scoped_vector.push_back(watcher.NewLifeCycleObject()); 119 scoped_vector.push_back(watcher.NewLifeCycleObject());
115 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 120 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
121 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
116 scoped_vector.clear(); 122 scoped_vector.clear();
117 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 123 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
118 EXPECT_EQ(implicit_cast<size_t>(0), scoped_vector.size()); 124 EXPECT_EQ(implicit_cast<size_t>(0), scoped_vector.size());
119 } 125 }
120 126
121 TEST(ScopedVectorTest, WeakClear) { 127 TEST(ScopedVectorTest, WeakClear) {
122 LifeCycleWatcher watcher; 128 LifeCycleWatcher watcher;
123 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 129 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
124 ScopedVector<LifeCycleObject> scoped_vector; 130 ScopedVector<LifeCycleObject> scoped_vector;
125 scoped_vector.push_back(watcher.NewLifeCycleObject()); 131 scoped_vector.push_back(watcher.NewLifeCycleObject());
126 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 132 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
133 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
127 scoped_vector.weak_clear(); 134 scoped_vector.weak_clear();
128 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 135 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
129 EXPECT_EQ(implicit_cast<size_t>(0), scoped_vector.size()); 136 EXPECT_EQ(implicit_cast<size_t>(0), scoped_vector.size());
130 } 137 }
131 138
132 TEST(ScopedVectorTest, ResizeShrink) { 139 TEST(ScopedVectorTest, ResizeShrink) {
133 LifeCycleWatcher first_watcher; 140 LifeCycleWatcher first_watcher;
134 EXPECT_EQ(LC_INITIAL, first_watcher.life_cycle_state()); 141 EXPECT_EQ(LC_INITIAL, first_watcher.life_cycle_state());
135 LifeCycleWatcher second_watcher; 142 LifeCycleWatcher second_watcher;
136 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state()); 143 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state());
137 ScopedVector<LifeCycleObject> scoped_vector; 144 ScopedVector<LifeCycleObject> scoped_vector;
138 145
139 scoped_vector.push_back(first_watcher.NewLifeCycleObject()); 146 scoped_vector.push_back(first_watcher.NewLifeCycleObject());
140 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state()); 147 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state());
141 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state()); 148 EXPECT_EQ(LC_INITIAL, second_watcher.life_cycle_state());
149 EXPECT_TRUE(first_watcher.IsWatching(scoped_vector[0]));
150 EXPECT_FALSE(second_watcher.IsWatching(scoped_vector[0]));
142 151
143 scoped_vector.push_back(second_watcher.NewLifeCycleObject()); 152 scoped_vector.push_back(second_watcher.NewLifeCycleObject());
144 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state()); 153 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state());
145 EXPECT_EQ(LC_CONSTRUCTED, second_watcher.life_cycle_state()); 154 EXPECT_EQ(LC_CONSTRUCTED, second_watcher.life_cycle_state());
155 EXPECT_FALSE(first_watcher.IsWatching(scoped_vector[1]));
156 EXPECT_TRUE(second_watcher.IsWatching(scoped_vector[1]));
146 157
147 // Test that shrinking a vector deletes elements in the dissapearing range. 158 // Test that shrinking a vector deletes elements in the dissapearing range.
willchan no longer on Chromium 2012/12/04 01:41:50 disappearing
gavinp 2012/12/08 17:39:59 Done.
148 scoped_vector.resize(1); 159 scoped_vector.resize(1);
149 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state()); 160 EXPECT_EQ(LC_CONSTRUCTED, first_watcher.life_cycle_state());
150 EXPECT_EQ(LC_DESTROYED, second_watcher.life_cycle_state()); 161 EXPECT_EQ(LC_DESTROYED, second_watcher.life_cycle_state());
151 EXPECT_EQ(implicit_cast<size_t>(1), scoped_vector.size()); 162 EXPECT_EQ(implicit_cast<size_t>(1), scoped_vector.size());
163 EXPECT_TRUE(first_watcher.IsWatching(scoped_vector[0]));
152 } 164 }
153 165
154 TEST(ScopedVectorTest, ResizeGrow) { 166 TEST(ScopedVectorTest, ResizeGrow) {
155 LifeCycleWatcher watcher; 167 LifeCycleWatcher watcher;
156 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 168 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
157 ScopedVector<LifeCycleObject> scoped_vector; 169 ScopedVector<LifeCycleObject> scoped_vector;
158 scoped_vector.push_back(watcher.NewLifeCycleObject()); 170 scoped_vector.push_back(watcher.NewLifeCycleObject());
159 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 171 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
172 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
160 173
161 scoped_vector.resize(5); 174 scoped_vector.resize(5);
162 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 175 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
176 EXPECT_TRUE(watcher.IsWatching(scoped_vector[0]));
177 EXPECT_FALSE(watcher.IsWatching(scoped_vector[1]) ||
willchan no longer on Chromium 2012/12/04 01:41:50 Just do multiple EXPECT_FALSEs, since if one of th
gavinp 2012/12/08 17:39:59 Done.
178 watcher.IsWatching(scoped_vector[2]) ||
179 watcher.IsWatching(scoped_vector[3]) ||
180 watcher.IsWatching(scoped_vector[4]));
163 EXPECT_EQ(implicit_cast<size_t>(5), scoped_vector.size()); 181 EXPECT_EQ(implicit_cast<size_t>(5), scoped_vector.size());
willchan no longer on Chromium 2012/12/04 01:41:50 Move this ahead and do ASSERT_EQ, since if it's fa
gavinp 2012/12/08 17:39:59 Done. Good point, I'll remember to watch for this
164 } 182 }
165 183
166 TEST(ScopedVectorTest, Scope) { 184 TEST(ScopedVectorTest, Scope) {
167 LifeCycleWatcher watcher; 185 LifeCycleWatcher watcher;
168 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 186 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
169 { 187 {
170 ScopedVector<LifeCycleObject> scoped_vector; 188 ScopedVector<LifeCycleObject> scoped_vector;
171 scoped_vector.push_back(watcher.NewLifeCycleObject()); 189 scoped_vector.push_back(watcher.NewLifeCycleObject());
172 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 190 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
191 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
173 } 192 }
174 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 193 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
175 } 194 }
176 195
177 TEST(ScopedVectorTest, MoveConstruct) { 196 TEST(ScopedVectorTest, MoveConstruct) {
178 LifeCycleWatcher watcher; 197 LifeCycleWatcher watcher;
179 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 198 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
180 { 199 {
181 ScopedVector<LifeCycleObject> scoped_vector; 200 ScopedVector<LifeCycleObject> scoped_vector;
182 scoped_vector.push_back(watcher.NewLifeCycleObject()); 201 scoped_vector.push_back(watcher.NewLifeCycleObject());
183 EXPECT_FALSE(scoped_vector.empty()); 202 EXPECT_FALSE(scoped_vector.empty());
203 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
184 204
185 ScopedVector<LifeCycleObject> scoped_vector_copy(scoped_vector.Pass()); 205 ScopedVector<LifeCycleObject> scoped_vector_copy(scoped_vector.Pass());
186 EXPECT_TRUE(scoped_vector.empty()); 206 EXPECT_TRUE(scoped_vector.empty());
187 EXPECT_FALSE(scoped_vector_copy.empty()); 207 EXPECT_FALSE(scoped_vector_copy.empty());
208 EXPECT_TRUE(watcher.IsWatching(scoped_vector_copy.back()));
188 209
189 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 210 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
190 } 211 }
191 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 212 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
192 } 213 }
193 214
194 TEST(ScopedVectorTest, MoveAssign) { 215 TEST(ScopedVectorTest, MoveAssign) {
195 LifeCycleWatcher watcher; 216 LifeCycleWatcher watcher;
196 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state()); 217 EXPECT_EQ(LC_INITIAL, watcher.life_cycle_state());
197 { 218 {
198 ScopedVector<LifeCycleObject> scoped_vector; 219 ScopedVector<LifeCycleObject> scoped_vector;
199 scoped_vector.push_back(watcher.NewLifeCycleObject()); 220 scoped_vector.push_back(watcher.NewLifeCycleObject());
200 ScopedVector<LifeCycleObject> scoped_vector_assign; 221 ScopedVector<LifeCycleObject> scoped_vector_assign;
201 EXPECT_FALSE(scoped_vector.empty()); 222 EXPECT_FALSE(scoped_vector.empty());
223 EXPECT_TRUE(watcher.IsWatching(scoped_vector.back()));
202 224
203 scoped_vector_assign = scoped_vector.Pass(); 225 scoped_vector_assign = scoped_vector.Pass();
204 EXPECT_TRUE(scoped_vector.empty()); 226 EXPECT_TRUE(scoped_vector.empty());
205 EXPECT_FALSE(scoped_vector_assign.empty()); 227 EXPECT_FALSE(scoped_vector_assign.empty());
228 EXPECT_TRUE(watcher.IsWatching(scoped_vector_assign.back()));
206 229
207 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state()); 230 EXPECT_EQ(LC_CONSTRUCTED, watcher.life_cycle_state());
208 } 231 }
209 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); 232 EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state());
210 } 233 }
211 234
212 class DeleteCounter { 235 class DeleteCounter {
213 public: 236 public:
214 explicit DeleteCounter(int* deletes) 237 explicit DeleteCounter(int* deletes)
215 : deletes_(deletes) { 238 : deletes_(deletes) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 for(LifeCycleWatcher* it = watchers; it != watchers + 1; ++it) 290 for(LifeCycleWatcher* it = watchers; it != watchers + 1; ++it)
268 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state()); 291 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state());
269 for(LifeCycleWatcher* it = watchers + 1; it != watchers + 3; ++it) 292 for(LifeCycleWatcher* it = watchers + 1; it != watchers + 3; ++it)
270 EXPECT_EQ(LC_DESTROYED, it->life_cycle_state()); 293 EXPECT_EQ(LC_DESTROYED, it->life_cycle_state());
271 for(LifeCycleWatcher* it = watchers + 3; it != watchers + arraysize(watchers); 294 for(LifeCycleWatcher* it = watchers + 3; it != watchers + arraysize(watchers);
272 ++it) 295 ++it)
273 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state()); 296 EXPECT_EQ(LC_CONSTRUCTED, it->life_cycle_state());
274 } 297 }
275 298
276 } // namespace 299 } // 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