| 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 |