Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(527)

Side by Side Diff: base/memory/pass_scoped_ptr_unittest.cc

Issue 8224026: Add a PassScopedPtr into base/memory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Anchroed PassOwnPtr with Bind. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« base/memory/pass_scoped_ptr.h ('K') | « base/memory/pass_scoped_ptr.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #include "base/memory/pass_scoped_ptr.h"
6
7 #include "base/basictypes.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace base {
11
12 namespace {
13
14 class ConDecLogger {
15 public:
16 ConDecLogger() : ptr_(NULL) { }
17 explicit ConDecLogger(int* ptr) { set_ptr(ptr); }
18 ~ConDecLogger() { --*ptr_; }
19
20 private:
21 void set_ptr(int* ptr) { ptr_ = ptr; ++*ptr_; }
22
23 int* ptr_;
24 DISALLOW_COPY_AND_ASSIGN(ConDecLogger);
25 };
26
27 } // namespace
28
29 TEST(PassScopedPtrTest, BasicMethods) {
30 int constructed = 0;
31
32 {
33 ConDecLogger* logger = new ConDecLogger(&constructed);
34 PassScopedPtr<ConDecLogger> pass_scoped_ptr(logger);
35 EXPECT_EQ(1, constructed);
36 EXPECT_EQ(logger, pass_scoped_ptr.value_.raw_ptr);
37 EXPECT_TRUE(pass_scoped_ptr.is_valid());
38 }
39 EXPECT_EQ(0, constructed);
40
41 // Test ToScopedPtr();
42 {
43 ConDecLogger* logger = new ConDecLogger(&constructed);
44 PassScopedPtr<ConDecLogger> pass_scoped_ptr(logger);
45 EXPECT_EQ(1, constructed);
46
47 scoped_ptr<ConDecLogger> scoped;
48 pass_scoped_ptr.ToScopedPtr(&scoped);
49 EXPECT_EQ(logger, scoped.get());
50 EXPECT_TRUE(pass_scoped_ptr.value_.raw_ptr == NULL);
51 EXPECT_FALSE(pass_scoped_ptr.is_valid());
52 EXPECT_EQ(1, constructed);
53 }
54 EXPECT_EQ(0, constructed);
55 }
56
57 TEST(PassScopedPtrTest, PassBehavior) {
58 int constructed = 0;
59 // Test Pass constructor;
60 {
61 ConDecLogger* logger = new ConDecLogger(&constructed);
62 PassScopedPtr<ConDecLogger> pass_scoped_ptr(logger);
63 EXPECT_EQ(1, constructed);
64
65 PassScopedPtr<ConDecLogger> pass_scoped_ptr2(pass_scoped_ptr.Pass());
66 EXPECT_EQ(1, constructed);
67 EXPECT_FALSE(pass_scoped_ptr.is_valid());
68 EXPECT_TRUE(pass_scoped_ptr2.is_valid());
69 }
70 EXPECT_EQ(0, constructed);
71 }
72
73 TEST(PassScopedPtrTest, AnchorBehavior) {
74 int constructed = 0;
75 // Test destruction semantics when anchored.
76 {
77 ConDecLogger* logger = new ConDecLogger(&constructed);
78 subtle::PassScopedPtrAnchor<ConDecLogger> anchor(
79 MakePassScopedPtr(logger));
levin 2011/11/02 00:51:30 If I call MakePassScopedPtr on a scoped_ptr, will
awong 2011/11/11 00:21:58 I like that you have explicitly tell the scoped_pt
80 EXPECT_EQ(1, constructed);
81 {
82 // Deletion of PassScopedPtr when anchored does nothing.
83 PassScopedPtr<ConDecLogger> pass_scoped_ptr(&anchor);
84 EXPECT_EQ(1, constructed);
85 }
86 EXPECT_EQ(1, constructed);
87
88 PassScopedPtr<ConDecLogger> pass_scoped_ptr(&anchor);
89 pass_scoped_ptr.Pass();
90 EXPECT_EQ(0, constructed);
91 EXPECT_FALSE(pass_scoped_ptr.is_valid());
92
93 // A second PassScopedPtr for an anchor should be immediately invalid.
94 PassScopedPtr<ConDecLogger> pass_scoped_ptr2(&anchor);
95 EXPECT_FALSE(pass_scoped_ptr2.is_valid());
96 }
97 EXPECT_EQ(0, constructed);
98 }
99
levin 2011/11/02 00:51:30 Why doesn't returntype need to be used/tested here
awong 2011/11/11 00:21:58 ...cause I forgot to do it? :P Added unittest.
100 } // namespace base
OLDNEW
« base/memory/pass_scoped_ptr.h ('K') | « base/memory/pass_scoped_ptr.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698