OLD | NEW |
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/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 namespace { | 9 namespace { |
10 | 10 |
11 // Used to test depth subtyping. | 11 // Used to test depth subtyping. |
12 class ConDecLoggerParent { | 12 class ConDecLoggerParent { |
13 public: | 13 public: |
14 virtual ~ConDecLoggerParent() {} | 14 virtual ~ConDecLoggerParent() {} |
15 virtual void set_ptr(int* ptr) = 0; | 15 |
| 16 virtual void SetPtr(int* ptr) = 0; |
16 | 17 |
17 virtual int SomeMeth(int x) const = 0; | 18 virtual int SomeMeth(int x) const = 0; |
18 }; | 19 }; |
19 | 20 |
20 class ConDecLogger : public ConDecLoggerParent { | 21 class ConDecLogger : public ConDecLoggerParent { |
21 public: | 22 public: |
22 ConDecLogger() : ptr_(NULL) { } | 23 ConDecLogger() : ptr_(NULL) { } |
23 explicit ConDecLogger(int* ptr) { set_ptr(ptr); } | 24 explicit ConDecLogger(int* ptr) { SetPtr(ptr); } |
24 virtual ~ConDecLogger() { --*ptr_; } | 25 virtual ~ConDecLogger() { --*ptr_; } |
25 | 26 |
26 virtual void set_ptr(int* ptr) OVERRIDE { ptr_ = ptr; ++*ptr_; } | 27 virtual void SetPtr(int* ptr) OVERRIDE { ptr_ = ptr; ++*ptr_; } |
27 | 28 |
28 virtual int SomeMeth(int x) const OVERRIDE { return x; } | 29 virtual int SomeMeth(int x) const OVERRIDE { return x; } |
29 | 30 |
30 private: | 31 private: |
31 int* ptr_; | 32 int* ptr_; |
| 33 |
32 DISALLOW_COPY_AND_ASSIGN(ConDecLogger); | 34 DISALLOW_COPY_AND_ASSIGN(ConDecLogger); |
33 }; | 35 }; |
34 | 36 |
35 scoped_ptr<ConDecLogger> PassThru(scoped_ptr<ConDecLogger> logger) { | 37 scoped_ptr<ConDecLogger> PassThru(scoped_ptr<ConDecLogger> logger) { |
36 return logger.Pass(); | 38 return logger.Pass(); |
37 } | 39 } |
38 | 40 |
39 void GrabAndDrop(scoped_ptr<ConDecLogger> logger) { | 41 void GrabAndDrop(scoped_ptr<ConDecLogger> logger) { |
40 } | 42 } |
41 | 43 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 TEST(ScopedPtrTest, ScopedArray) { | 190 TEST(ScopedPtrTest, ScopedArray) { |
189 static const int kNumLoggers = 12; | 191 static const int kNumLoggers = 12; |
190 | 192 |
191 int constructed = 0; | 193 int constructed = 0; |
192 | 194 |
193 { | 195 { |
194 scoped_array<ConDecLogger> scoper(new ConDecLogger[kNumLoggers]); | 196 scoped_array<ConDecLogger> scoper(new ConDecLogger[kNumLoggers]); |
195 EXPECT_TRUE(scoper.get()); | 197 EXPECT_TRUE(scoper.get()); |
196 EXPECT_EQ(&scoper[0], scoper.get()); | 198 EXPECT_EQ(&scoper[0], scoper.get()); |
197 for (int i = 0; i < kNumLoggers; ++i) { | 199 for (int i = 0; i < kNumLoggers; ++i) { |
198 scoper[i].set_ptr(&constructed); | 200 scoper[i].SetPtr(&constructed); |
199 } | 201 } |
200 EXPECT_EQ(12, constructed); | 202 EXPECT_EQ(12, constructed); |
201 | 203 |
202 EXPECT_EQ(10, scoper.get()->SomeMeth(10)); | 204 EXPECT_EQ(10, scoper.get()->SomeMeth(10)); |
203 EXPECT_EQ(10, scoper[2].SomeMeth(10)); | 205 EXPECT_EQ(10, scoper[2].SomeMeth(10)); |
204 } | 206 } |
205 EXPECT_EQ(0, constructed); | 207 EXPECT_EQ(0, constructed); |
206 | 208 |
207 // Test reset() and release() | 209 // Test reset() and release() |
208 { | 210 { |
209 scoped_array<ConDecLogger> scoper; | 211 scoped_array<ConDecLogger> scoper; |
210 EXPECT_FALSE(scoper.get()); | 212 EXPECT_FALSE(scoper.get()); |
211 EXPECT_FALSE(scoper.release()); | 213 EXPECT_FALSE(scoper.release()); |
212 EXPECT_FALSE(scoper.get()); | 214 EXPECT_FALSE(scoper.get()); |
213 scoper.reset(); | 215 scoper.reset(); |
214 EXPECT_FALSE(scoper.get()); | 216 EXPECT_FALSE(scoper.get()); |
215 | 217 |
216 scoper.reset(new ConDecLogger[kNumLoggers]); | 218 scoper.reset(new ConDecLogger[kNumLoggers]); |
217 for (int i = 0; i < kNumLoggers; ++i) { | 219 for (int i = 0; i < kNumLoggers; ++i) { |
218 scoper[i].set_ptr(&constructed); | 220 scoper[i].SetPtr(&constructed); |
219 } | 221 } |
220 EXPECT_EQ(12, constructed); | 222 EXPECT_EQ(12, constructed); |
221 scoper.reset(); | 223 scoper.reset(); |
222 EXPECT_EQ(0, constructed); | 224 EXPECT_EQ(0, constructed); |
223 | 225 |
224 scoper.reset(new ConDecLogger[kNumLoggers]); | 226 scoper.reset(new ConDecLogger[kNumLoggers]); |
225 for (int i = 0; i < kNumLoggers; ++i) { | 227 for (int i = 0; i < kNumLoggers; ++i) { |
226 scoper[i].set_ptr(&constructed); | 228 scoper[i].SetPtr(&constructed); |
227 } | 229 } |
228 EXPECT_EQ(12, constructed); | 230 EXPECT_EQ(12, constructed); |
229 ConDecLogger* ptr = scoper.release(); | 231 ConDecLogger* ptr = scoper.release(); |
230 EXPECT_EQ(12, constructed); | 232 EXPECT_EQ(12, constructed); |
231 delete[] ptr; | 233 delete[] ptr; |
232 EXPECT_EQ(0, constructed); | 234 EXPECT_EQ(0, constructed); |
233 } | 235 } |
234 EXPECT_EQ(0, constructed); | 236 EXPECT_EQ(0, constructed); |
235 | 237 |
236 // Test swap(), == and != | 238 // Test swap(), == and != |
237 { | 239 { |
238 scoped_array<ConDecLogger> scoper1; | 240 scoped_array<ConDecLogger> scoper1; |
239 scoped_array<ConDecLogger> scoper2; | 241 scoped_array<ConDecLogger> scoper2; |
240 EXPECT_TRUE(scoper1 == scoper2.get()); | 242 EXPECT_TRUE(scoper1 == scoper2.get()); |
241 EXPECT_FALSE(scoper1 != scoper2.get()); | 243 EXPECT_FALSE(scoper1 != scoper2.get()); |
242 | 244 |
243 ConDecLogger* loggers = new ConDecLogger[kNumLoggers]; | 245 ConDecLogger* loggers = new ConDecLogger[kNumLoggers]; |
244 for (int i = 0; i < kNumLoggers; ++i) { | 246 for (int i = 0; i < kNumLoggers; ++i) { |
245 loggers[i].set_ptr(&constructed); | 247 loggers[i].SetPtr(&constructed); |
246 } | 248 } |
247 scoper1.reset(loggers); | 249 scoper1.reset(loggers); |
248 EXPECT_EQ(loggers, scoper1.get()); | 250 EXPECT_EQ(loggers, scoper1.get()); |
249 EXPECT_FALSE(scoper2.get()); | 251 EXPECT_FALSE(scoper2.get()); |
250 EXPECT_FALSE(scoper1 == scoper2.get()); | 252 EXPECT_FALSE(scoper1 == scoper2.get()); |
251 EXPECT_TRUE(scoper1 != scoper2.get()); | 253 EXPECT_TRUE(scoper1 != scoper2.get()); |
252 | 254 |
253 scoper2.swap(scoper1); | 255 scoper2.swap(scoper1); |
254 EXPECT_EQ(loggers, scoper2.get()); | 256 EXPECT_EQ(loggers, scoper2.get()); |
255 EXPECT_FALSE(scoper1.get()); | 257 EXPECT_FALSE(scoper1.get()); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 scoped_ptr<ConDecLoggerParent> scoper_parent; | 350 scoped_ptr<ConDecLoggerParent> scoper_parent; |
349 scoper_parent = UpcastUsingPassAs(scoper.Pass()); | 351 scoper_parent = UpcastUsingPassAs(scoper.Pass()); |
350 EXPECT_EQ(1, constructed); | 352 EXPECT_EQ(1, constructed); |
351 EXPECT_TRUE(scoper_parent.get()); | 353 EXPECT_TRUE(scoper_parent.get()); |
352 EXPECT_FALSE(scoper.get()); | 354 EXPECT_FALSE(scoper.get()); |
353 } | 355 } |
354 EXPECT_EQ(0, constructed); | 356 EXPECT_EQ(0, constructed); |
355 } | 357 } |
356 | 358 |
357 // TODO scoped_ptr_malloc | 359 // TODO scoped_ptr_malloc |
OLD | NEW |