OLD | NEW |
| (Empty) |
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. | |
4 // | |
5 // The original source code is from: | |
6 // http://src.chromium.org/viewvc/chrome/trunk/src/base/memory/scoped_ptr_unitte
st.cc?revision=79524 | |
7 | |
8 #include <libaddressinput/util/scoped_ptr.h> | |
9 | |
10 #include <libaddressinput/util/basictypes.h> | |
11 | |
12 #include <gtest/gtest.h> | |
13 | |
14 namespace { | |
15 | |
16 class ConDecLogger { | |
17 public: | |
18 ConDecLogger() : ptr_(NULL) { } | |
19 explicit ConDecLogger(int* ptr) { set_ptr(ptr); } | |
20 ~ConDecLogger() { --*ptr_; } | |
21 | |
22 void set_ptr(int* ptr) { ptr_ = ptr; ++*ptr_; } | |
23 | |
24 int SomeMeth(int x) { return x; } | |
25 | |
26 private: | |
27 int* ptr_; | |
28 DISALLOW_COPY_AND_ASSIGN(ConDecLogger); | |
29 }; | |
30 | |
31 | |
32 void TakePointer(scoped_ptr<ConDecLogger> pointer) {} | |
33 | |
34 TEST(ScopedPtrTest, ScopedPtr) { | |
35 int constructed = 0; | |
36 | |
37 { | |
38 scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed)); | |
39 EXPECT_EQ(1, constructed); | |
40 EXPECT_TRUE(scoper); | |
41 EXPECT_TRUE(scoper.get()); | |
42 | |
43 EXPECT_EQ(10, scoper->SomeMeth(10)); | |
44 EXPECT_EQ(10, scoper.get()->SomeMeth(10)); | |
45 EXPECT_EQ(10, (*scoper).SomeMeth(10)); | |
46 } | |
47 EXPECT_EQ(0, constructed); | |
48 | |
49 // Test reset() and release() | |
50 { | |
51 scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed)); | |
52 EXPECT_EQ(1, constructed); | |
53 EXPECT_TRUE(scoper); | |
54 | |
55 scoper.reset(new ConDecLogger(&constructed)); | |
56 EXPECT_EQ(1, constructed); | |
57 EXPECT_TRUE(scoper); | |
58 | |
59 scoper.reset(); | |
60 EXPECT_EQ(0, constructed); | |
61 EXPECT_FALSE(scoper); | |
62 | |
63 scoper.reset(new ConDecLogger(&constructed)); | |
64 EXPECT_EQ(1, constructed); | |
65 EXPECT_TRUE(scoper); | |
66 | |
67 ConDecLogger* take = scoper.release(); | |
68 EXPECT_EQ(1, constructed); | |
69 EXPECT_FALSE(scoper); | |
70 delete take; | |
71 EXPECT_EQ(0, constructed); | |
72 | |
73 scoper.reset(new ConDecLogger(&constructed)); | |
74 EXPECT_EQ(1, constructed); | |
75 EXPECT_TRUE(scoper); | |
76 } | |
77 EXPECT_EQ(0, constructed); | |
78 | |
79 // Test swap(), == and != | |
80 { | |
81 scoped_ptr<ConDecLogger> scoper1; | |
82 scoped_ptr<ConDecLogger> scoper2; | |
83 EXPECT_TRUE(scoper1 == scoper2.get()); | |
84 EXPECT_FALSE(scoper1 != scoper2.get()); | |
85 | |
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()); | |
92 | |
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()); | |
98 } | |
99 EXPECT_EQ(0, constructed); | |
100 | |
101 // Test Pass(). | |
102 { | |
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); | |
108 | |
109 TakePointer(make_scoped_ptr(new ConDecLogger(&constructed))); | |
110 } | |
111 EXPECT_EQ(0, constructed); | |
112 } | |
113 | |
114 } // namespace | |
OLD | NEW |