1 // Copyright 2013 The Chromium 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.
5 // The original source code is from:
6 // http://src.chromium.org/viewvc/chrome/trunk/src/base/memory/scoped_ptr_unittest.cc?revision=79524
8 #include <libaddressinput/util/scoped_ptr.h>
10 #include <libaddressinput/util/basictypes.h>
12 #include <gtest/gtest.h>
18 ConDecLogger() : ptr_(NULL) { }
19 explicit ConDecLogger(int* ptr) { set_ptr(ptr); }
20 ~ConDecLogger() { --*ptr_; }
22 void set_ptr(int* ptr) { ptr_ = ptr; ++*ptr_; }
24 int SomeMeth(int x) { return x; }
28 DISALLOW_COPY_AND_ASSIGN(ConDecLogger);
32 void TakePointer(scoped_ptr<ConDecLogger> pointer) {}
34 TEST(ScopedPtrTest, ScopedPtr) {
38 scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed));
39 EXPECT_EQ(1, constructed);
41 EXPECT_TRUE(scoper.get());
43 EXPECT_EQ(10, scoper->SomeMeth(10));
44 EXPECT_EQ(10, scoper.get()->SomeMeth(10));
45 EXPECT_EQ(10, (*scoper).SomeMeth(10));
47 EXPECT_EQ(0, constructed);
49 // Test reset() and release()
51 scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed));
52 EXPECT_EQ(1, constructed);
55 scoper.reset(new ConDecLogger(&constructed));
56 EXPECT_EQ(1, constructed);
60 EXPECT_EQ(0, constructed);
63 scoper.reset(new ConDecLogger(&constructed));
64 EXPECT_EQ(1, constructed);
67 ConDecLogger* take = scoper.release();
68 EXPECT_EQ(1, constructed);
71 EXPECT_EQ(0, constructed);
73 scoper.reset(new ConDecLogger(&constructed));
74 EXPECT_EQ(1, constructed);
77 EXPECT_EQ(0, constructed);
79 // Test swap(), == and !=
81 scoped_ptr<ConDecLogger> scoper1;
82 scoped_ptr<ConDecLogger> scoper2;
83 EXPECT_TRUE(scoper1 == scoper2.get());
84 EXPECT_FALSE(scoper1 != scoper2.get());
86 ConDecLogger* logger = new ConDecLogger(&constructed);
87 scoper1.reset(logger);
88 EXPECT_EQ(logger, scoper1.get());
89 EXPECT_FALSE(scoper2.get());
90 EXPECT_FALSE(scoper1 == scoper2.get());
91 EXPECT_TRUE(scoper1 != scoper2.get());
93 scoper2.swap(scoper1);
94 EXPECT_EQ(logger, scoper2.get());
95 EXPECT_FALSE(scoper1.get());
96 EXPECT_FALSE(scoper1 == scoper2.get());
97 EXPECT_TRUE(scoper1 != scoper2.get());
99 EXPECT_EQ(0, constructed);
103 scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed));
104 EXPECT_EQ(1, constructed);
105 TakePointer(scoper.Pass());
106 EXPECT_EQ(0, constructed);
107 EXPECT_FALSE(scoper);
109 TakePointer(make_scoped_ptr(new ConDecLogger(&constructed)));
111 EXPECT_EQ(0, constructed);