Index: trunk/src/base/memory/scoped_ptr_unittest.cc |
=================================================================== |
--- trunk/src/base/memory/scoped_ptr_unittest.cc (revision 194652) |
+++ trunk/src/base/memory/scoped_ptr_unittest.cc (working copy) |
@@ -378,6 +378,82 @@ |
EXPECT_EQ(0, constructed); |
} |
+TEST(ScopedPtrTest, ScopedArray) { |
+ static const int kNumLoggers = 12; |
+ |
+ int constructed = 0; |
+ |
+ { |
+ scoped_array<ConDecLogger> scoper(new ConDecLogger[kNumLoggers]); |
+ EXPECT_TRUE(scoper.get()); |
+ EXPECT_EQ(&scoper[0], scoper.get()); |
+ for (int i = 0; i < kNumLoggers; ++i) { |
+ scoper[i].SetPtr(&constructed); |
+ } |
+ EXPECT_EQ(12, constructed); |
+ |
+ EXPECT_EQ(10, scoper.get()->SomeMeth(10)); |
+ EXPECT_EQ(10, scoper[2].SomeMeth(10)); |
+ } |
+ EXPECT_EQ(0, constructed); |
+ |
+ // Test reset() and release() |
+ { |
+ scoped_array<ConDecLogger> scoper; |
+ EXPECT_FALSE(scoper.get()); |
+ EXPECT_FALSE(scoper.release()); |
+ EXPECT_FALSE(scoper.get()); |
+ scoper.reset(); |
+ EXPECT_FALSE(scoper.get()); |
+ |
+ scoper.reset(new ConDecLogger[kNumLoggers]); |
+ for (int i = 0; i < kNumLoggers; ++i) { |
+ scoper[i].SetPtr(&constructed); |
+ } |
+ EXPECT_EQ(12, constructed); |
+ scoper.reset(); |
+ EXPECT_EQ(0, constructed); |
+ |
+ scoper.reset(new ConDecLogger[kNumLoggers]); |
+ for (int i = 0; i < kNumLoggers; ++i) { |
+ scoper[i].SetPtr(&constructed); |
+ } |
+ EXPECT_EQ(12, constructed); |
+ ConDecLogger* ptr = scoper.release(); |
+ EXPECT_EQ(12, constructed); |
+ delete[] ptr; |
+ EXPECT_EQ(0, constructed); |
+ } |
+ EXPECT_EQ(0, constructed); |
+ |
+ // Test swap(), ==, !=, and type-safe Boolean. |
+ { |
+ scoped_array<ConDecLogger> scoper1; |
+ scoped_array<ConDecLogger> scoper2; |
+ EXPECT_TRUE(scoper1 == scoper2.get()); |
+ EXPECT_FALSE(scoper1 != scoper2.get()); |
+ |
+ ConDecLogger* loggers = new ConDecLogger[kNumLoggers]; |
+ for (int i = 0; i < kNumLoggers; ++i) { |
+ loggers[i].SetPtr(&constructed); |
+ } |
+ scoper1.reset(loggers); |
+ EXPECT_TRUE(scoper1); |
+ EXPECT_EQ(loggers, scoper1.get()); |
+ EXPECT_FALSE(scoper2); |
+ EXPECT_FALSE(scoper2.get()); |
+ EXPECT_FALSE(scoper1 == scoper2.get()); |
+ EXPECT_TRUE(scoper1 != scoper2.get()); |
+ |
+ scoper2.swap(scoper1); |
+ EXPECT_EQ(loggers, scoper2.get()); |
+ EXPECT_FALSE(scoper1.get()); |
+ EXPECT_FALSE(scoper1 == scoper2.get()); |
+ EXPECT_TRUE(scoper1 != scoper2.get()); |
+ } |
+ EXPECT_EQ(0, constructed); |
+} |
+ |
TEST(ScopedPtrTest, PassBehavior) { |
int constructed = 0; |
{ |