OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "o3d/gpu_plugin/np_utils/base_np_object_mock.h" | 5 #include "o3d/gpu_plugin/np_utils/np_class.h" |
| 6 #include "o3d/gpu_plugin/np_utils/np_object_mock.h" |
6 #include "o3d/gpu_plugin/np_utils/np_browser_stub.h" | 7 #include "o3d/gpu_plugin/np_utils/np_browser_stub.h" |
7 #include "o3d/gpu_plugin/np_utils/np_object_pointer.h" | 8 #include "o3d/gpu_plugin/np_utils/np_object_pointer.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
10 | 11 |
11 using testing::Return; | 12 using testing::Return; |
12 using testing::StrictMock; | 13 using testing::StrictMock; |
13 | 14 |
14 namespace o3d { | 15 namespace o3d { |
15 namespace gpu_plugin { | 16 namespace gpu_plugin { |
16 | 17 |
17 class DerivedNPObject : public MockBaseNPObject { | 18 class DerivedNPObject : public MockNPObject { |
18 public: | 19 public: |
19 explicit DerivedNPObject(NPP npp) : MockBaseNPObject(npp) { | 20 explicit DerivedNPObject(NPP npp) : MockNPObject(npp) { |
20 } | 21 } |
21 }; | 22 }; |
22 | 23 |
23 class NPObjectPointerTest : public testing::Test { | 24 class NPObjectPointerTest : public testing::Test { |
24 protected: | 25 protected: |
25 virtual void SetUp() { | 26 virtual void SetUp() { |
26 np_class_ = BaseNPObject::GetNPClass<StrictMock<MockBaseNPObject> >(); | 27 np_class_ = NPGetClass<StrictMock<MockNPObject> >(); |
27 | 28 |
28 // Make sure no MockBaseNPObject objects exist before test. | 29 raw_pointer_ = static_cast<MockNPObject*>( |
29 ASSERT_EQ(0, MockBaseNPObject::count()); | |
30 | |
31 raw_pointer_ = static_cast<MockBaseNPObject*>( | |
32 NPBrowser::get()->CreateObject(NULL, np_class_)); | 30 NPBrowser::get()->CreateObject(NULL, np_class_)); |
33 | 31 |
34 raw_derived_pointer_ = static_cast<DerivedNPObject*>( | 32 raw_derived_pointer_ = static_cast<DerivedNPObject*>( |
35 NPBrowser::get()->CreateObject(NULL, np_class_)); | 33 NPBrowser::get()->CreateObject(NULL, np_class_)); |
36 } | 34 } |
37 | 35 |
38 virtual void TearDown() { | 36 virtual void TearDown() { |
39 NPBrowser::get()->ReleaseObject(raw_pointer_); | 37 NPBrowser::get()->ReleaseObject(raw_pointer_); |
40 NPBrowser::get()->ReleaseObject(raw_derived_pointer_); | 38 NPBrowser::get()->ReleaseObject(raw_derived_pointer_); |
41 | |
42 // Make sure no MockBaseNPObject leaked an object. | |
43 ASSERT_EQ(0, MockBaseNPObject::count()); | |
44 } | 39 } |
45 | 40 |
46 StubNPBrowser stub_browser_; | 41 StubNPBrowser stub_browser_; |
47 const NPClass* np_class_; | 42 const NPClass* np_class_; |
48 MockBaseNPObject* raw_pointer_; | 43 MockNPObject* raw_pointer_; |
49 DerivedNPObject* raw_derived_pointer_; | 44 DerivedNPObject* raw_derived_pointer_; |
50 }; | 45 }; |
51 | 46 |
52 TEST_F(NPObjectPointerTest, PointerIsNullByDefault) { | 47 TEST_F(NPObjectPointerTest, PointerIsNullByDefault) { |
53 NPObjectPointer<MockBaseNPObject> p; | 48 NPObjectPointer<MockNPObject> p; |
54 ASSERT_TRUE(NULL == p.Get()); | 49 ASSERT_TRUE(NULL == p.Get()); |
55 } | 50 } |
56 | 51 |
57 TEST_F(NPObjectPointerTest, PointerCanBeExplicitlyConstructedFromRawPointer) { | 52 TEST_F(NPObjectPointerTest, PointerCanBeExplicitlyConstructedFromRawPointer) { |
58 EXPECT_EQ(1, raw_pointer_->referenceCount); | 53 EXPECT_EQ(1, raw_pointer_->referenceCount); |
59 { | 54 { |
60 NPObjectPointer<MockBaseNPObject> p(raw_pointer_); | 55 NPObjectPointer<MockNPObject> p(raw_pointer_); |
61 ASSERT_TRUE(raw_pointer_ == p.Get()); | 56 ASSERT_TRUE(raw_pointer_ == p.Get()); |
62 EXPECT_EQ(2, raw_pointer_->referenceCount); | 57 EXPECT_EQ(2, raw_pointer_->referenceCount); |
63 } | 58 } |
64 EXPECT_EQ(1, raw_pointer_->referenceCount); | 59 EXPECT_EQ(1, raw_pointer_->referenceCount); |
65 } | 60 } |
66 | 61 |
67 TEST_F(NPObjectPointerTest, | 62 TEST_F(NPObjectPointerTest, |
68 PointerCanBeExplicitlyConstructedFromNullRawPointer) { | 63 PointerCanBeExplicitlyConstructedFromNullRawPointer) { |
69 NPObjectPointer<MockBaseNPObject> p(NULL); | 64 NPObjectPointer<MockNPObject> p(NULL); |
70 ASSERT_TRUE(NULL == p.Get()); | 65 ASSERT_TRUE(NULL == p.Get()); |
71 } | 66 } |
72 | 67 |
73 TEST_F(NPObjectPointerTest, PointerCanBeCopyConstructed) { | 68 TEST_F(NPObjectPointerTest, PointerCanBeCopyConstructed) { |
74 NPObjectPointer<MockBaseNPObject> p1(raw_pointer_); | 69 NPObjectPointer<MockNPObject> p1(raw_pointer_); |
75 EXPECT_EQ(2, raw_pointer_->referenceCount); | 70 EXPECT_EQ(2, raw_pointer_->referenceCount); |
76 { | 71 { |
77 NPObjectPointer<MockBaseNPObject> p2(p1); | 72 NPObjectPointer<MockNPObject> p2(p1); |
78 ASSERT_TRUE(raw_pointer_ == p2.Get()); | 73 ASSERT_TRUE(raw_pointer_ == p2.Get()); |
79 EXPECT_EQ(3, raw_pointer_->referenceCount); | 74 EXPECT_EQ(3, raw_pointer_->referenceCount); |
80 } | 75 } |
81 EXPECT_EQ(2, raw_pointer_->referenceCount); | 76 EXPECT_EQ(2, raw_pointer_->referenceCount); |
82 } | 77 } |
83 | 78 |
84 TEST_F(NPObjectPointerTest, PointerCanBeConstructedFromDerived) { | 79 TEST_F(NPObjectPointerTest, PointerCanBeConstructedFromDerived) { |
85 NPObjectPointer<DerivedNPObject> p1(raw_derived_pointer_); | 80 NPObjectPointer<DerivedNPObject> p1(raw_derived_pointer_); |
86 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); | 81 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); |
87 { | 82 { |
88 NPObjectPointer<MockBaseNPObject> p2(p1); | 83 NPObjectPointer<MockNPObject> p2(p1); |
89 ASSERT_TRUE(raw_derived_pointer_ == p2.Get()); | 84 ASSERT_TRUE(raw_derived_pointer_ == p2.Get()); |
90 EXPECT_EQ(3, raw_derived_pointer_->referenceCount); | 85 EXPECT_EQ(3, raw_derived_pointer_->referenceCount); |
91 } | 86 } |
92 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); | 87 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); |
93 } | 88 } |
94 | 89 |
95 TEST_F(NPObjectPointerTest, | 90 TEST_F(NPObjectPointerTest, |
96 PointerCanBeCopyConstructedFromNull) { | 91 PointerCanBeCopyConstructedFromNull) { |
97 NPObjectPointer<MockBaseNPObject> p(NULL); | 92 NPObjectPointer<MockNPObject> p(NULL); |
98 ASSERT_TRUE(NULL == p.Get()); | 93 ASSERT_TRUE(NULL == p.Get()); |
99 } | 94 } |
100 | 95 |
101 TEST_F(NPObjectPointerTest, PointerCanBeAssigned) { | 96 TEST_F(NPObjectPointerTest, PointerCanBeAssigned) { |
102 NPObjectPointer<MockBaseNPObject> p1(raw_pointer_); | 97 NPObjectPointer<MockNPObject> p1(raw_pointer_); |
103 EXPECT_EQ(2, raw_pointer_->referenceCount); | 98 EXPECT_EQ(2, raw_pointer_->referenceCount); |
104 { | 99 { |
105 NPObjectPointer<MockBaseNPObject> p2; | 100 NPObjectPointer<MockNPObject> p2; |
106 p2 = p1; | 101 p2 = p1; |
107 ASSERT_TRUE(raw_pointer_ == p2.Get()); | 102 ASSERT_TRUE(raw_pointer_ == p2.Get()); |
108 EXPECT_EQ(3, raw_pointer_->referenceCount); | 103 EXPECT_EQ(3, raw_pointer_->referenceCount); |
109 | 104 |
110 p2 = NPObjectPointer<MockBaseNPObject>(); | 105 p2 = NPObjectPointer<MockNPObject>(); |
111 ASSERT_TRUE(NULL == p2.Get()); | 106 ASSERT_TRUE(NULL == p2.Get()); |
112 EXPECT_EQ(2, raw_pointer_->referenceCount); | 107 EXPECT_EQ(2, raw_pointer_->referenceCount); |
113 | 108 |
114 p2 = p1; | 109 p2 = p1; |
115 ASSERT_TRUE(raw_pointer_ == p2.Get()); | 110 ASSERT_TRUE(raw_pointer_ == p2.Get()); |
116 EXPECT_EQ(3, raw_pointer_->referenceCount); | 111 EXPECT_EQ(3, raw_pointer_->referenceCount); |
117 } | 112 } |
118 EXPECT_EQ(2, raw_pointer_->referenceCount); | 113 EXPECT_EQ(2, raw_pointer_->referenceCount); |
119 } | 114 } |
120 | 115 |
121 TEST_F(NPObjectPointerTest, PointerCanBeAssignedToSelf) { | 116 TEST_F(NPObjectPointerTest, PointerCanBeAssignedToSelf) { |
122 NPObjectPointer<MockBaseNPObject> p(raw_pointer_); | 117 NPObjectPointer<MockNPObject> p(raw_pointer_); |
123 NPBrowser::get()->ReleaseObject(raw_pointer_); | 118 NPBrowser::get()->ReleaseObject(raw_pointer_); |
124 EXPECT_EQ(1, raw_pointer_->referenceCount); | 119 EXPECT_EQ(1, raw_pointer_->referenceCount); |
125 p = p; | 120 p = p; |
126 EXPECT_EQ(1, raw_pointer_->referenceCount); | 121 EXPECT_EQ(1, raw_pointer_->referenceCount); |
127 NPBrowser::get()->RetainObject(raw_pointer_); | 122 NPBrowser::get()->RetainObject(raw_pointer_); |
128 } | 123 } |
129 | 124 |
130 TEST_F(NPObjectPointerTest, PointerCanBeAssignedDerived) { | 125 TEST_F(NPObjectPointerTest, PointerCanBeAssignedDerived) { |
131 NPObjectPointer<DerivedNPObject> p1(raw_derived_pointer_); | 126 NPObjectPointer<DerivedNPObject> p1(raw_derived_pointer_); |
132 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); | 127 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); |
133 { | 128 { |
134 NPObjectPointer<MockBaseNPObject> p2; | 129 NPObjectPointer<MockNPObject> p2; |
135 p2 = p1; | 130 p2 = p1; |
136 ASSERT_TRUE(raw_derived_pointer_ == p2.Get()); | 131 ASSERT_TRUE(raw_derived_pointer_ == p2.Get()); |
137 EXPECT_EQ(3, raw_derived_pointer_->referenceCount); | 132 EXPECT_EQ(3, raw_derived_pointer_->referenceCount); |
138 | 133 |
139 p2 = NPObjectPointer<MockBaseNPObject>(); | 134 p2 = NPObjectPointer<MockNPObject>(); |
140 ASSERT_TRUE(NULL == p2.Get()); | 135 ASSERT_TRUE(NULL == p2.Get()); |
141 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); | 136 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); |
142 | 137 |
143 p2 = p1; | 138 p2 = p1; |
144 ASSERT_TRUE(raw_derived_pointer_ == p2.Get()); | 139 ASSERT_TRUE(raw_derived_pointer_ == p2.Get()); |
145 EXPECT_EQ(3, raw_derived_pointer_->referenceCount); | 140 EXPECT_EQ(3, raw_derived_pointer_->referenceCount); |
146 } | 141 } |
147 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); | 142 EXPECT_EQ(2, raw_derived_pointer_->referenceCount); |
148 } | 143 } |
149 | 144 |
150 TEST_F(NPObjectPointerTest, DerivedPointerCanBeAssignedToSelf) { | 145 TEST_F(NPObjectPointerTest, DerivedPointerCanBeAssignedToSelf) { |
151 NPObjectPointer<MockBaseNPObject> p1(raw_derived_pointer_); | 146 NPObjectPointer<MockNPObject> p1(raw_derived_pointer_); |
152 NPObjectPointer<DerivedNPObject> p2(raw_derived_pointer_); | 147 NPObjectPointer<DerivedNPObject> p2(raw_derived_pointer_); |
153 NPBrowser::get()->ReleaseObject(raw_derived_pointer_); | 148 NPBrowser::get()->ReleaseObject(raw_derived_pointer_); |
154 NPBrowser::get()->ReleaseObject(raw_derived_pointer_); | 149 NPBrowser::get()->ReleaseObject(raw_derived_pointer_); |
155 EXPECT_EQ(1, raw_derived_pointer_->referenceCount); | 150 EXPECT_EQ(1, raw_derived_pointer_->referenceCount); |
156 p1 = p2; | 151 p1 = p2; |
157 EXPECT_EQ(1, raw_derived_pointer_->referenceCount); | 152 EXPECT_EQ(1, raw_derived_pointer_->referenceCount); |
158 NPBrowser::get()->RetainObject(raw_derived_pointer_); | 153 NPBrowser::get()->RetainObject(raw_derived_pointer_); |
159 NPBrowser::get()->RetainObject(raw_derived_pointer_); | 154 NPBrowser::get()->RetainObject(raw_derived_pointer_); |
160 } | 155 } |
161 | 156 |
162 TEST_F(NPObjectPointerTest, CanComparePointersForEqual) { | 157 TEST_F(NPObjectPointerTest, CanComparePointersForEqual) { |
163 NPObjectPointer<MockBaseNPObject> p1(raw_pointer_); | 158 NPObjectPointer<MockNPObject> p1(raw_pointer_); |
164 NPObjectPointer<DerivedNPObject> p2(raw_derived_pointer_); | 159 NPObjectPointer<DerivedNPObject> p2(raw_derived_pointer_); |
165 EXPECT_TRUE(p1 == p1); | 160 EXPECT_TRUE(p1 == p1); |
166 EXPECT_FALSE(p1 == p2); | 161 EXPECT_FALSE(p1 == p2); |
167 EXPECT_FALSE(p2 == p1); | 162 EXPECT_FALSE(p2 == p1); |
168 EXPECT_FALSE(p1 == NPObjectPointer<MockBaseNPObject>()); | 163 EXPECT_FALSE(p1 == NPObjectPointer<MockNPObject>()); |
169 } | 164 } |
170 | 165 |
171 TEST_F(NPObjectPointerTest, CanComparePointersForNotEqual) { | 166 TEST_F(NPObjectPointerTest, CanComparePointersForNotEqual) { |
172 NPObjectPointer<MockBaseNPObject> p1(raw_pointer_); | 167 NPObjectPointer<MockNPObject> p1(raw_pointer_); |
173 NPObjectPointer<DerivedNPObject> p2(raw_derived_pointer_); | 168 NPObjectPointer<DerivedNPObject> p2(raw_derived_pointer_); |
174 EXPECT_FALSE(p1 != p1); | 169 EXPECT_FALSE(p1 != p1); |
175 EXPECT_TRUE(p1 != p2); | 170 EXPECT_TRUE(p1 != p2); |
176 EXPECT_TRUE(p2 != p1); | 171 EXPECT_TRUE(p2 != p1); |
177 EXPECT_TRUE(p1 != NPObjectPointer<MockBaseNPObject>()); | 172 EXPECT_TRUE(p1 != NPObjectPointer<MockNPObject>()); |
178 } | 173 } |
179 | 174 |
180 TEST_F(NPObjectPointerTest, ArrowOperatorCanBeUsedToAccessNPObjectMembers) { | 175 TEST_F(NPObjectPointerTest, ArrowOperatorCanBeUsedToAccessNPObjectMembers) { |
181 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("hello"); | 176 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("hello"); |
182 | 177 |
183 EXPECT_CALL(*raw_pointer_, HasProperty(name)).WillOnce(Return(true)); | 178 EXPECT_CALL(*raw_pointer_, HasProperty(name)).WillOnce(Return(true)); |
184 | 179 |
185 NPObjectPointer<MockBaseNPObject> p(raw_pointer_); | 180 NPObjectPointer<MockNPObject> p(raw_pointer_); |
186 EXPECT_TRUE(p->HasProperty(name)); | 181 EXPECT_TRUE(p->HasProperty(name)); |
187 } | 182 } |
188 | 183 |
189 TEST_F(NPObjectPointerTest, StarOperatorReturnsNPObjectReference) { | 184 TEST_F(NPObjectPointerTest, StarOperatorReturnsNPObjectReference) { |
190 NPObjectPointer<MockBaseNPObject> p(raw_pointer_); | 185 NPObjectPointer<MockNPObject> p(raw_pointer_); |
191 EXPECT_EQ(raw_pointer_, &*p); | 186 EXPECT_EQ(raw_pointer_, &*p); |
192 } | 187 } |
193 | 188 |
194 TEST_F(NPObjectPointerTest, PointerCanBeConstructedFromReturnedNPObject) { | 189 TEST_F(NPObjectPointerTest, PointerCanBeConstructedFromReturnedNPObject) { |
195 NPBrowser::get()->RetainObject(raw_pointer_); | 190 NPBrowser::get()->RetainObject(raw_pointer_); |
196 EXPECT_EQ(2, raw_pointer_->referenceCount); | 191 EXPECT_EQ(2, raw_pointer_->referenceCount); |
197 { | 192 { |
198 NPObjectPointer<MockBaseNPObject> p( | 193 NPObjectPointer<MockNPObject> p( |
199 NPObjectPointer<MockBaseNPObject>::FromReturned(raw_pointer_)); | 194 NPObjectPointer<MockNPObject>::FromReturned(raw_pointer_)); |
200 EXPECT_EQ(2, raw_pointer_->referenceCount); | 195 EXPECT_EQ(2, raw_pointer_->referenceCount); |
201 } | 196 } |
202 EXPECT_EQ(1, raw_pointer_->referenceCount); | 197 EXPECT_EQ(1, raw_pointer_->referenceCount); |
203 } | 198 } |
204 | 199 |
205 TEST_F(NPObjectPointerTest, PointerCanBeConstructedFromReturnedNullNPObject) { | 200 TEST_F(NPObjectPointerTest, PointerCanBeConstructedFromReturnedNullNPObject) { |
206 NPObjectPointer<MockBaseNPObject> p( | 201 NPObjectPointer<MockNPObject> p( |
207 NPObjectPointer<MockBaseNPObject>::FromReturned(NULL)); | 202 NPObjectPointer<MockNPObject>::FromReturned(NULL)); |
208 EXPECT_TRUE(NULL == p.Get()); | 203 EXPECT_TRUE(NULL == p.Get()); |
209 } | 204 } |
210 | 205 |
211 TEST_F(NPObjectPointerTest, PointerCanBeReturnedAsARawNPObject) { | 206 TEST_F(NPObjectPointerTest, PointerCanBeReturnedAsARawNPObject) { |
212 NPObjectPointer<MockBaseNPObject> p(raw_pointer_); | 207 NPObjectPointer<MockNPObject> p(raw_pointer_); |
213 EXPECT_EQ(raw_pointer_, p.ToReturned()); | 208 EXPECT_EQ(raw_pointer_, p.ToReturned()); |
214 | 209 |
215 // Check reference count is incremented before return for caller. | 210 // Check reference count is incremented before return for caller. |
216 EXPECT_EQ(3, raw_pointer_->referenceCount); | 211 EXPECT_EQ(3, raw_pointer_->referenceCount); |
217 | 212 |
218 NPBrowser::get()->ReleaseObject(raw_pointer_); | 213 NPBrowser::get()->ReleaseObject(raw_pointer_); |
219 } | 214 } |
220 | 215 |
221 TEST_F(NPObjectPointerTest, NULLPointerCanBeReturnedAsARawNPObject) { | 216 TEST_F(NPObjectPointerTest, NULLPointerCanBeReturnedAsARawNPObject) { |
222 NPObjectPointer<MockBaseNPObject> p; | 217 NPObjectPointer<MockNPObject> p; |
223 EXPECT_TRUE(NULL == p.ToReturned()); | 218 EXPECT_TRUE(NULL == p.ToReturned()); |
224 } | 219 } |
225 | 220 |
226 } // namespace gpu_plugin | 221 } // namespace gpu_plugin |
227 } // namespace o3d | 222 } // namespace o3d |
OLD | NEW |