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