Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / libaddressinput / chromium / cpp / test / util / scoped_ptr_unittest.cc
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_unittest.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