| 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 |