OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium 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 "core/fxcrt/cfx_observable.h" | 5 #include "core/fxcrt/cfx_observable.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> |
8 | 9 |
9 #include "testing/fx_string_testhelpers.h" | 10 #include "testing/fx_string_testhelpers.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
11 | 12 |
12 namespace { | 13 namespace { |
13 | 14 |
14 class PseudoObservable : public CFX_Observable<PseudoObservable> { | 15 class PseudoObservable : public CFX_Observable<PseudoObservable> { |
15 public: | 16 public: |
16 PseudoObservable() {} | 17 PseudoObservable() {} |
17 int SomeMethod() { return 42; } | 18 int SomeMethod() { return 42; } |
(...skipping 19 matching lines...) Loading... |
37 TEST(fxcrt, ObservePtrLivesShorter) { | 38 TEST(fxcrt, ObservePtrLivesShorter) { |
38 PseudoObservable obs; | 39 PseudoObservable obs; |
39 { | 40 { |
40 PseudoObservable::ObservedPtr ptr(&obs); | 41 PseudoObservable::ObservedPtr ptr(&obs); |
41 EXPECT_NE(nullptr, ptr.Get()); | 42 EXPECT_NE(nullptr, ptr.Get()); |
42 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); | 43 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); |
43 } | 44 } |
44 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); | 45 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); |
45 } | 46 } |
46 | 47 |
| 48 TEST(fxcrt, ObserveCopyConstruct) { |
| 49 PseudoObservable obs; |
| 50 { |
| 51 PseudoObservable::ObservedPtr ptr(&obs); |
| 52 EXPECT_NE(nullptr, ptr.Get()); |
| 53 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); |
| 54 { |
| 55 PseudoObservable::ObservedPtr ptr2(ptr); |
| 56 EXPECT_NE(nullptr, ptr2.Get()); |
| 57 EXPECT_EQ(2u, obs.ActiveObservedPtrs()); |
| 58 } |
| 59 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); |
| 60 } |
| 61 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); |
| 62 } |
| 63 |
| 64 TEST(fxcrt, ObserveCopyAssign) { |
| 65 PseudoObservable obs; |
| 66 { |
| 67 PseudoObservable::ObservedPtr ptr(&obs); |
| 68 EXPECT_NE(nullptr, ptr.Get()); |
| 69 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); |
| 70 { |
| 71 PseudoObservable::ObservedPtr ptr2; |
| 72 ptr2 = ptr; |
| 73 EXPECT_NE(nullptr, ptr2.Get()); |
| 74 EXPECT_EQ(2u, obs.ActiveObservedPtrs()); |
| 75 } |
| 76 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); |
| 77 } |
| 78 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); |
| 79 } |
| 80 |
| 81 TEST(fxcrt, ObserveVector) { |
| 82 PseudoObservable obs; |
| 83 { |
| 84 std::vector<PseudoObservable::ObservedPtr> vec1; |
| 85 std::vector<PseudoObservable::ObservedPtr> vec2; |
| 86 vec1.emplace_back(&obs); |
| 87 vec1.emplace_back(&obs); |
| 88 EXPECT_NE(nullptr, vec1[0].Get()); |
| 89 EXPECT_NE(nullptr, vec1[1].Get()); |
| 90 EXPECT_EQ(2u, obs.ActiveObservedPtrs()); |
| 91 vec2 = vec1; |
| 92 EXPECT_NE(nullptr, vec2[0].Get()); |
| 93 EXPECT_NE(nullptr, vec2[1].Get()); |
| 94 EXPECT_EQ(4u, obs.ActiveObservedPtrs()); |
| 95 vec1.clear(); |
| 96 EXPECT_EQ(2u, obs.ActiveObservedPtrs()); |
| 97 vec2.resize(10000); |
| 98 EXPECT_EQ(2u, obs.ActiveObservedPtrs()); |
| 99 vec2.resize(0); |
| 100 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); |
| 101 } |
| 102 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); |
| 103 } |
| 104 |
| 105 TEST(fxcrt, ObserveVectorAutoClear) { |
| 106 std::vector<PseudoObservable::ObservedPtr> vec1; |
| 107 { |
| 108 PseudoObservable obs; |
| 109 vec1.emplace_back(&obs); |
| 110 vec1.emplace_back(&obs); |
| 111 EXPECT_NE(nullptr, vec1[0].Get()); |
| 112 EXPECT_NE(nullptr, vec1[1].Get()); |
| 113 EXPECT_EQ(2u, obs.ActiveObservedPtrs()); |
| 114 } |
| 115 EXPECT_EQ(nullptr, vec1[0].Get()); |
| 116 EXPECT_EQ(nullptr, vec1[1].Get()); |
| 117 } |
| 118 |
47 TEST(fxcrt, ObservePtrResetNull) { | 119 TEST(fxcrt, ObservePtrResetNull) { |
48 PseudoObservable obs; | 120 PseudoObservable obs; |
49 PseudoObservable::ObservedPtr ptr(&obs); | 121 PseudoObservable::ObservedPtr ptr(&obs); |
50 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); | 122 EXPECT_EQ(1u, obs.ActiveObservedPtrs()); |
51 ptr.Reset(); | 123 ptr.Reset(); |
52 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); | 124 EXPECT_EQ(0u, obs.ActiveObservedPtrs()); |
53 } | 125 } |
54 | 126 |
55 TEST(fxcrt, ObservePtrReset) { | 127 TEST(fxcrt, ObservePtrReset) { |
56 PseudoObservable obs1; | 128 PseudoObservable obs1; |
(...skipping 48 matching lines...) Loading... |
105 | 177 |
106 TEST(fxcrt, ObservePtrBool) { | 178 TEST(fxcrt, ObservePtrBool) { |
107 PseudoObservable obj1; | 179 PseudoObservable obj1; |
108 PseudoObservable::ObservedPtr null_ptr; | 180 PseudoObservable::ObservedPtr null_ptr; |
109 PseudoObservable::ObservedPtr obj1_ptr(&obj1); | 181 PseudoObservable::ObservedPtr obj1_ptr(&obj1); |
110 bool null_bool = !!null_ptr; | 182 bool null_bool = !!null_ptr; |
111 bool obj1_bool = !!obj1_ptr; | 183 bool obj1_bool = !!obj1_ptr; |
112 EXPECT_FALSE(null_bool); | 184 EXPECT_FALSE(null_bool); |
113 EXPECT_TRUE(obj1_bool); | 185 EXPECT_TRUE(obj1_bool); |
114 } | 186 } |
OLD | NEW |