Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / libaddressinput / src / cpp / test / util / scoped_ptr_unittest.cc
1 // Copyright (c) 2011 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 <cstddef>
13
14 #include <gtest/gtest.h>
15
16 namespace {
17
18 using i18n::addressinput::scoped_ptr;
19
20 class ConDecLogger {
21  public:
22   ConDecLogger() : ptr_(NULL) { }
23   explicit ConDecLogger(int* ptr) { set_ptr(ptr); }
24   ~ConDecLogger() { --*ptr_; }
25
26   void set_ptr(int* ptr) { ptr_ = ptr; ++*ptr_; }
27
28   int SomeMeth(int x) { return x; }
29
30  private:
31   int* ptr_;
32   DISALLOW_COPY_AND_ASSIGN(ConDecLogger);
33 };
34
35 TEST(ScopedPtrTest, ScopedPtr) {
36   int constructed = 0;
37
38   {
39     scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed));
40     EXPECT_EQ(1, constructed);
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.get());
54
55     scoper.reset(new ConDecLogger(&constructed));
56     EXPECT_EQ(1, constructed);
57     EXPECT_TRUE(scoper.get());
58
59     scoper.reset();
60     EXPECT_EQ(0, constructed);
61     EXPECT_FALSE(scoper.get());
62
63     scoper.reset(new ConDecLogger(&constructed));
64     EXPECT_EQ(1, constructed);
65     EXPECT_TRUE(scoper.get());
66
67     ConDecLogger* take = scoper.release();
68     EXPECT_EQ(1, constructed);
69     EXPECT_FALSE(scoper.get());
70     delete take;
71     EXPECT_EQ(0, constructed);
72
73     scoper.reset(new ConDecLogger(&constructed));
74     EXPECT_EQ(1, constructed);
75     EXPECT_TRUE(scoper.get());
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
102 }  // namespace