Chromium Code Reviews

Side by Side Diff: core/fxcrt/cfx_observable_unittest.cpp

Issue 2587233002: Make CFX_Observable copy constructable. (Closed)
Patch Set: better-test Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « core/fxcrt/cfx_observable.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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...)
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...)
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 }
OLDNEW
« no previous file with comments | « core/fxcrt/cfx_observable.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine