Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/memory/weak_ptr.h" | 6 #include "base/memory/weak_ptr.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 73 WeakPtrFactory<int> factory(&data); | 73 WeakPtrFactory<int> factory(&data); |
| 74 a = factory.GetWeakPtr(); | 74 a = factory.GetWeakPtr(); |
| 75 b = factory.GetWeakPtr(); | 75 b = factory.GetWeakPtr(); |
| 76 EXPECT_EQ(&data, a.get()); | 76 EXPECT_EQ(&data, a.get()); |
| 77 EXPECT_EQ(&data, b.get()); | 77 EXPECT_EQ(&data, b.get()); |
| 78 } | 78 } |
| 79 EXPECT_TRUE(a.get() == NULL); | 79 EXPECT_TRUE(a.get() == NULL); |
| 80 EXPECT_TRUE(b.get() == NULL); | 80 EXPECT_TRUE(b.get() == NULL); |
| 81 } | 81 } |
| 82 | 82 |
| 83 TEST(WeakPtrTest, MultipleStaged) { | |
| 84 WeakPtr<int> a; | |
| 85 { | |
| 86 int data; | |
| 87 WeakPtrFactory<int> factory(&data); | |
| 88 a = factory.GetWeakPtr(); | |
| 89 { | |
| 90 WeakPtr<int> b = factory.GetWeakPtr(); | |
|
willchan no longer on Chromium
2011/05/24 22:29:24
Maybe you should also add EXPECTs for b? Up to you
| |
| 91 } | |
| 92 EXPECT_TRUE(a.get() != NULL); | |
| 93 } | |
| 94 EXPECT_TRUE(a.get() == NULL); | |
| 95 } | |
| 96 | |
| 83 TEST(WeakPtrTest, UpCast) { | 97 TEST(WeakPtrTest, UpCast) { |
| 84 Derived data; | 98 Derived data; |
| 85 WeakPtrFactory<Derived> factory(&data); | 99 WeakPtrFactory<Derived> factory(&data); |
| 86 WeakPtr<Base> ptr = factory.GetWeakPtr(); | 100 WeakPtr<Base> ptr = factory.GetWeakPtr(); |
| 87 ptr = factory.GetWeakPtr(); | 101 ptr = factory.GetWeakPtr(); |
| 88 EXPECT_EQ(ptr.get(), &data); | 102 EXPECT_EQ(ptr.get(), &data); |
| 89 } | 103 } |
| 90 | 104 |
| 91 TEST(WeakPtrTest, SupportsWeakPtr) { | 105 TEST(WeakPtrTest, SupportsWeakPtr) { |
| 92 Producer f; | 106 Producer f; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 // Test that it is OK to create a class that has a WeakPtr member on one | 142 // Test that it is OK to create a class that has a WeakPtr member on one |
| 129 // thread, but use it on another. This tests that we do not trip runtime | 143 // thread, but use it on another. This tests that we do not trip runtime |
| 130 // checks that ensure that a weak reference is not used by multiple threads. | 144 // checks that ensure that a weak reference is not used by multiple threads. |
| 131 scoped_ptr<Consumer> consumer(OffThreadObjectCreator<Consumer>::NewObject()); | 145 scoped_ptr<Consumer> consumer(OffThreadObjectCreator<Consumer>::NewObject()); |
| 132 Producer producer; | 146 Producer producer; |
| 133 consumer->producer = producer.AsWeakPtr(); | 147 consumer->producer = producer.AsWeakPtr(); |
| 134 EXPECT_EQ(&producer, consumer->producer.get()); | 148 EXPECT_EQ(&producer, consumer->producer.get()); |
| 135 } | 149 } |
| 136 | 150 |
| 137 } // namespace base | 151 } // namespace base |
| OLD | NEW |