OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
6 #include "base/thread.h" | 6 #include "base/thread.h" |
7 #include "base/weak_ptr.h" | 7 #include "base/weak_ptr.h" |
8 | 8 |
9 namespace base { | 9 namespace base { |
10 namespace { | 10 namespace { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 TEST(WeakPtrTest, Comparison) { | 47 TEST(WeakPtrTest, Comparison) { |
48 int data; | 48 int data; |
49 WeakPtrFactory<int> factory(&data); | 49 WeakPtrFactory<int> factory(&data); |
50 WeakPtr<int> ptr = factory.GetWeakPtr(); | 50 WeakPtr<int> ptr = factory.GetWeakPtr(); |
51 WeakPtr<int> ptr2 = ptr; | 51 WeakPtr<int> ptr2 = ptr; |
52 EXPECT_TRUE(ptr == ptr2); | 52 EXPECT_TRUE(ptr == ptr2); |
53 } | 53 } |
54 | 54 |
55 TEST(WeakPtrTest, OutOfScope) { | 55 TEST(WeakPtrTest, OutOfScope) { |
56 WeakPtr<int> ptr; | 56 WeakPtr<int> ptr; |
57 EXPECT_EQ(NULL, ptr.get()); | 57 EXPECT_TRUE(ptr.get() == NULL); |
58 { | 58 { |
59 int data; | 59 int data; |
60 WeakPtrFactory<int> factory(&data); | 60 WeakPtrFactory<int> factory(&data); |
61 ptr = factory.GetWeakPtr(); | 61 ptr = factory.GetWeakPtr(); |
62 } | 62 } |
63 EXPECT_EQ(NULL, ptr.get()); | 63 EXPECT_TRUE(ptr.get() == NULL); |
64 } | 64 } |
65 | 65 |
66 TEST(WeakPtrTest, Multiple) { | 66 TEST(WeakPtrTest, Multiple) { |
67 WeakPtr<int> a, b; | 67 WeakPtr<int> a, b; |
68 { | 68 { |
69 int data; | 69 int data; |
70 WeakPtrFactory<int> factory(&data); | 70 WeakPtrFactory<int> factory(&data); |
71 a = factory.GetWeakPtr(); | 71 a = factory.GetWeakPtr(); |
72 b = factory.GetWeakPtr(); | 72 b = factory.GetWeakPtr(); |
73 EXPECT_EQ(&data, a.get()); | 73 EXPECT_EQ(&data, a.get()); |
74 EXPECT_EQ(&data, b.get()); | 74 EXPECT_EQ(&data, b.get()); |
75 } | 75 } |
76 EXPECT_EQ(NULL, a.get()); | 76 EXPECT_TRUE(a.get() == NULL); |
77 EXPECT_EQ(NULL, b.get()); | 77 EXPECT_TRUE(b.get() == NULL); |
78 } | 78 } |
79 | 79 |
80 TEST(WeakPtrTest, UpCast) { | 80 TEST(WeakPtrTest, UpCast) { |
81 Derived data; | 81 Derived data; |
82 WeakPtrFactory<Derived> factory(&data); | 82 WeakPtrFactory<Derived> factory(&data); |
83 WeakPtr<Base> ptr = factory.GetWeakPtr(); | 83 WeakPtr<Base> ptr = factory.GetWeakPtr(); |
84 ptr = factory.GetWeakPtr(); | 84 ptr = factory.GetWeakPtr(); |
85 EXPECT_EQ(ptr.get(), &data); | 85 EXPECT_EQ(ptr.get(), &data); |
86 } | 86 } |
87 | 87 |
88 TEST(WeakPtrTest, SupportsWeakPtr) { | 88 TEST(WeakPtrTest, SupportsWeakPtr) { |
89 Producer f; | 89 Producer f; |
90 WeakPtr<Producer> ptr = f.AsWeakPtr(); | 90 WeakPtr<Producer> ptr = f.AsWeakPtr(); |
91 EXPECT_EQ(&f, ptr.get()); | 91 EXPECT_EQ(&f, ptr.get()); |
92 } | 92 } |
93 | 93 |
94 TEST(WeakPtrTest, InvalidateWeakPtrs) { | 94 TEST(WeakPtrTest, InvalidateWeakPtrs) { |
95 int data; | 95 int data; |
96 WeakPtrFactory<int> factory(&data); | 96 WeakPtrFactory<int> factory(&data); |
97 WeakPtr<int> ptr = factory.GetWeakPtr(); | 97 WeakPtr<int> ptr = factory.GetWeakPtr(); |
98 EXPECT_EQ(&data, ptr.get()); | 98 EXPECT_EQ(&data, ptr.get()); |
99 EXPECT_TRUE(factory.HasWeakPtrs()); | 99 EXPECT_TRUE(factory.HasWeakPtrs()); |
100 factory.InvalidateWeakPtrs(); | 100 factory.InvalidateWeakPtrs(); |
101 EXPECT_EQ(NULL, ptr.get()); | 101 EXPECT_TRUE(ptr.get() == NULL); |
102 EXPECT_FALSE(factory.HasWeakPtrs()); | 102 EXPECT_FALSE(factory.HasWeakPtrs()); |
103 } | 103 } |
104 | 104 |
105 TEST(WeakPtrTest, HasWeakPtrs) { | 105 TEST(WeakPtrTest, HasWeakPtrs) { |
106 int data; | 106 int data; |
107 WeakPtrFactory<int> factory(&data); | 107 WeakPtrFactory<int> factory(&data); |
108 { | 108 { |
109 WeakPtr<int> ptr = factory.GetWeakPtr(); | 109 WeakPtr<int> ptr = factory.GetWeakPtr(); |
110 EXPECT_TRUE(factory.HasWeakPtrs()); | 110 EXPECT_TRUE(factory.HasWeakPtrs()); |
111 } | 111 } |
(...skipping 13 matching lines...) Expand all Loading... |
125 // Test that it is OK to create a class that has a WeakPtr member on one | 125 // Test that it is OK to create a class that has a WeakPtr member on one |
126 // thread, but use it on another. This tests that we do not trip runtime | 126 // thread, but use it on another. This tests that we do not trip runtime |
127 // checks that ensure that a weak reference is not used by multiple threads. | 127 // checks that ensure that a weak reference is not used by multiple threads. |
128 scoped_ptr<Consumer> consumer(OffThreadObjectCreator<Consumer>::NewObject()); | 128 scoped_ptr<Consumer> consumer(OffThreadObjectCreator<Consumer>::NewObject()); |
129 Producer producer; | 129 Producer producer; |
130 consumer->producer = producer.AsWeakPtr(); | 130 consumer->producer = producer.AsWeakPtr(); |
131 EXPECT_EQ(&producer, consumer->producer.get()); | 131 EXPECT_EQ(&producer, consumer->producer.get()); |
132 } | 132 } |
133 | 133 |
134 } // namespace base | 134 } // namespace base |
OLD | NEW |