| 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...) Expand all 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...) Expand 10 before | Expand all | Expand 10 after 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 |