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

Side by Side Diff: base/mac/scoped_nsobject_unittest_arc.mm

Issue 1855483004: [iOS/OS X] Allow base::scoped_nsobject<> to be used when ARC is enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert changes to build/config/compiler/BUILD.gn Created 4 years, 8 months 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 <vector>
6
7 #import <CoreFoundation/CoreFoundation.h>
8
9 #include "base/mac/scoped_nsobject.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace {
13
14 // #if 0
15 template <typename NST>
16 CFIndex GetRetainCount(const base::scoped_nsobject<NST>& nst) {
17 @autoreleasepool {
18 return CFGetRetainCount((__bridge CFTypeRef)nst.get()) - 1;
19 }
20 }
21
22 TEST(ScopedNSObjectTestARC, ScopedNSObject) {
23 base::scoped_nsobject<NSObject> p1([[NSObject alloc] init],
24 base::scoped_policy::RETAIN);
25 @autoreleasepool {
26 EXPECT_TRUE(p1.get());
27 EXPECT_TRUE(p1.get());
28 }
29 EXPECT_EQ(1u, GetRetainCount(p1));
30 base::scoped_nsobject<NSObject> p2(p1);
31 @autoreleasepool {
32 EXPECT_EQ(p1.get(), p2.get());
33 }
34 EXPECT_EQ(2u, GetRetainCount(p1));
35 p2.reset();
36 EXPECT_EQ(nil, p2.get());
37 EXPECT_EQ(1u, GetRetainCount(p1));
38 {
39 base::scoped_nsobject<NSObject> p3 = p1;
40 @autoreleasepool {
41 EXPECT_EQ(p1.get(), p3.get());
42 }
43 EXPECT_EQ(2u, GetRetainCount(p1));
44 p3 = p1;
45 @autoreleasepool {
46 EXPECT_EQ(p1.get(), p3.get());
47 }
48 EXPECT_EQ(2u, GetRetainCount(p1));
49 }
50 EXPECT_EQ(1u, GetRetainCount(p1));
51 base::scoped_nsobject<NSObject> p4;
52 @autoreleasepool {
53 p4 = base::scoped_nsobject<NSObject>(p1.get(), base::scoped_policy::RETAIN);
54 }
55 EXPECT_EQ(2u, GetRetainCount(p1));
56 @autoreleasepool {
57 EXPECT_TRUE(p1 == p1.get());
58 EXPECT_TRUE(p1 == p1);
59 EXPECT_FALSE(p1 != p1);
60 EXPECT_FALSE(p1 != p1.get());
61 }
62 base::scoped_nsobject<NSObject> p5([[NSObject alloc] init],
63 base::scoped_policy::RETAIN);
64 @autoreleasepool {
65 EXPECT_TRUE(p1 != p5);
66 EXPECT_TRUE(p1 != p5.get());
67 EXPECT_FALSE(p1 == p5);
68 EXPECT_FALSE(p1 == p5.get());
69 }
70
71 base::scoped_nsobject<NSObject> p6 = p1;
72 EXPECT_EQ(3u, GetRetainCount(p6));
73 @autoreleasepool {
74 p6.autorelease();
75 EXPECT_EQ(nil, p6.get());
76 EXPECT_EQ(4u, GetRetainCount(p1));
77 }
78 EXPECT_EQ(2u, GetRetainCount(p1));
79 }
80
81 TEST(ScopedNSObjectTestARC, ScopedNSObjectInContainer) {
82 base::scoped_nsobject<id> p([[NSObject alloc] init],
83 base::scoped_policy::RETAIN);
84 @autoreleasepool {
85 EXPECT_TRUE(p.get());
86 }
87 EXPECT_EQ(1u, GetRetainCount(p));
88 @autoreleasepool {
89 std::vector<base::scoped_nsobject<id>> objects;
90 objects.push_back(p);
91 EXPECT_EQ(2u, GetRetainCount(p));
92 @autoreleasepool {
93 EXPECT_EQ(p.get(), objects[0].get());
94 }
95 objects.push_back(base::scoped_nsobject<id>([[NSObject alloc] init],
96 base::scoped_policy::RETAIN));
97 @autoreleasepool {
98 EXPECT_TRUE(objects[1].get());
99 }
100 EXPECT_EQ(1u, GetRetainCount(objects[1]));
101 }
102 EXPECT_EQ(1u, GetRetainCount(p));
103 }
104
105 TEST(ScopedNSObjectTestARC, ScopedNSObjectFreeFunctions) {
106 base::scoped_nsobject<id> p1([[NSObject alloc] init],
107 base::scoped_policy::RETAIN);
108 id o1 = p1.get();
109 EXPECT_TRUE(o1 == p1);
110 EXPECT_FALSE(o1 != p1);
111 base::scoped_nsobject<id> p2([[NSObject alloc] init],
112 base::scoped_policy::RETAIN);
113 EXPECT_TRUE(o1 != p2);
114 EXPECT_FALSE(o1 == p2);
115 id o2 = p2.get();
116 swap(p1, p2);
117 EXPECT_EQ(o2, p1.get());
118 EXPECT_EQ(o1, p2.get());
119 }
120
121 // #endif
122
123 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698