| 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_object_mock.h" | |
| 6 #include "gpu/np_utils/np_browser_stub.h" | |
| 7 #include "gpu/np_utils/np_utils.h" | |
| 8 #include "testing/gmock/include/gmock/gmock.h" | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 | |
| 11 using testing::_; | |
| 12 using testing::DoAll; | |
| 13 using testing::MakeMatcher; | |
| 14 using testing::Matcher; | |
| 15 using testing::Pointee; | |
| 16 using testing::Return; | |
| 17 using testing::SetArgumentPointee; | |
| 18 using testing::StrictMock; | |
| 19 | |
| 20 namespace np_utils { | |
| 21 | |
| 22 class NPUtilsTest : public testing::Test { | |
| 23 protected: | |
| 24 StubNPBrowser stub_browser_; | |
| 25 NPP_t npp_; | |
| 26 NPVariant variant_; | |
| 27 }; | |
| 28 | |
| 29 TEST_F(NPUtilsTest, TestBoolNPVariantToValue) { | |
| 30 bool v; | |
| 31 | |
| 32 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 33 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 34 EXPECT_FALSE(v); | |
| 35 | |
| 36 BOOLEAN_TO_NPVARIANT(true, variant_); | |
| 37 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 38 EXPECT_TRUE(v); | |
| 39 | |
| 40 INT32_TO_NPVARIANT(7, variant_); | |
| 41 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 42 } | |
| 43 | |
| 44 TEST_F(NPUtilsTest, TestIntNPVariantToValue) { | |
| 45 INT32_TO_NPVARIANT(7, variant_); | |
| 46 | |
| 47 int v1; | |
| 48 EXPECT_TRUE(NPVariantToValue(&v1, variant_)); | |
| 49 EXPECT_EQ(7, v1); | |
| 50 | |
| 51 float v2; | |
| 52 EXPECT_TRUE(NPVariantToValue(&v2, variant_)); | |
| 53 EXPECT_EQ(7.0f, v2); | |
| 54 | |
| 55 double v3; | |
| 56 EXPECT_TRUE(NPVariantToValue(&v3, variant_)); | |
| 57 EXPECT_EQ(7.0, v3); | |
| 58 | |
| 59 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 60 EXPECT_FALSE(NPVariantToValue(&v1, variant_)); | |
| 61 } | |
| 62 | |
| 63 TEST_F(NPUtilsTest, TestFloatNPVariantToValue) { | |
| 64 float v; | |
| 65 | |
| 66 DOUBLE_TO_NPVARIANT(7.0, variant_); | |
| 67 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 68 EXPECT_EQ(7.0f, v); | |
| 69 | |
| 70 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 71 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 72 } | |
| 73 | |
| 74 TEST_F(NPUtilsTest, TestDoubleNPVariantToValue) { | |
| 75 double v; | |
| 76 | |
| 77 DOUBLE_TO_NPVARIANT(7.0, variant_); | |
| 78 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 79 EXPECT_EQ(7.0, v); | |
| 80 | |
| 81 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 82 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 83 } | |
| 84 | |
| 85 TEST_F(NPUtilsTest, TestStringNPVariantToValue) { | |
| 86 std::string v; | |
| 87 | |
| 88 STRINGZ_TO_NPVARIANT("hello", variant_); | |
| 89 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 90 EXPECT_EQ(std::string("hello"), v); | |
| 91 | |
| 92 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 93 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 94 } | |
| 95 | |
| 96 TEST_F(NPUtilsTest, TestObjectNPVariantToValue) { | |
| 97 NPObjectPointer<NPObject> object = | |
| 98 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 99 NPObjectPointer<NPObject> v; | |
| 100 | |
| 101 OBJECT_TO_NPVARIANT(object.Get(), variant_); | |
| 102 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 103 EXPECT_EQ(object, v); | |
| 104 | |
| 105 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 106 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 107 } | |
| 108 | |
| 109 TEST_F(NPUtilsTest, TestNullNPVariantToValue) { | |
| 110 NPObjectPointer<NPObject> v; | |
| 111 | |
| 112 NULL_TO_NPVARIANT(variant_); | |
| 113 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 114 EXPECT_TRUE(NPObjectPointer<NPObject>() == v); | |
| 115 | |
| 116 BOOLEAN_TO_NPVARIANT(false, variant_); | |
| 117 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 118 } | |
| 119 | |
| 120 TEST_F(NPUtilsTest, TestDerivedObjectNPVariantToValue) { | |
| 121 NPObjectPointer<NPObject> object = | |
| 122 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 123 NPObjectPointer<StrictMock<MockNPObject> > v; | |
| 124 | |
| 125 OBJECT_TO_NPVARIANT(object.Get(), variant_); | |
| 126 EXPECT_TRUE(NPVariantToValue(&v, variant_)); | |
| 127 EXPECT_EQ(object, v); | |
| 128 } | |
| 129 | |
| 130 TEST_F(NPUtilsTest, | |
| 131 TestDerivedObjectNPVariantToValueFailsIfValueHasDifferentType) { | |
| 132 NPObjectPointer<NPObject> object = | |
| 133 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 134 NPObjectPointer<MockNPObject> v; | |
| 135 | |
| 136 OBJECT_TO_NPVARIANT(object.Get(), variant_); | |
| 137 EXPECT_FALSE(NPVariantToValue(&v, variant_)); | |
| 138 } | |
| 139 | |
| 140 TEST_F(NPUtilsTest, TestBoolValueToNPVariant) { | |
| 141 ValueToNPVariant(true, &variant_); | |
| 142 EXPECT_TRUE(NPVARIANT_IS_BOOLEAN(variant_)); | |
| 143 EXPECT_TRUE(NPVARIANT_TO_BOOLEAN(variant_)); | |
| 144 | |
| 145 ValueToNPVariant(false, &variant_); | |
| 146 EXPECT_TRUE(NPVARIANT_IS_BOOLEAN(variant_)); | |
| 147 EXPECT_FALSE(NPVARIANT_TO_BOOLEAN(variant_)); | |
| 148 } | |
| 149 | |
| 150 TEST_F(NPUtilsTest, TestIntValueToNPVariant) { | |
| 151 ValueToNPVariant(7, &variant_); | |
| 152 EXPECT_TRUE(NPVARIANT_IS_INT32(variant_)); | |
| 153 EXPECT_EQ(7, NPVARIANT_TO_INT32(variant_)); | |
| 154 } | |
| 155 | |
| 156 TEST_F(NPUtilsTest, TestFloatValueToNPVariant) { | |
| 157 ValueToNPVariant(7.0f, &variant_); | |
| 158 EXPECT_TRUE(NPVARIANT_IS_DOUBLE(variant_)); | |
| 159 EXPECT_EQ(7.0, NPVARIANT_TO_DOUBLE(variant_)); | |
| 160 } | |
| 161 | |
| 162 TEST_F(NPUtilsTest, TestDoubleValueToNPVariant) { | |
| 163 ValueToNPVariant(7.0, &variant_); | |
| 164 EXPECT_TRUE(NPVARIANT_IS_DOUBLE(variant_)); | |
| 165 EXPECT_EQ(7.0, NPVARIANT_TO_DOUBLE(variant_)); | |
| 166 } | |
| 167 | |
| 168 TEST_F(NPUtilsTest, TestStringValueToNPVariant) { | |
| 169 ValueToNPVariant(std::string("hello"), &variant_); | |
| 170 EXPECT_TRUE(NPVARIANT_IS_STRING(variant_)); | |
| 171 EXPECT_EQ(std::string("hello"), | |
| 172 std::string(variant_.value.stringValue.UTF8Characters, | |
| 173 variant_.value.stringValue.UTF8Length)); | |
| 174 } | |
| 175 | |
| 176 TEST_F(NPUtilsTest, TestObjectValueToNPVariant) { | |
| 177 NPObjectPointer<NPObject> object = | |
| 178 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 179 | |
| 180 ValueToNPVariant(object, &variant_); | |
| 181 EXPECT_TRUE(NPVARIANT_IS_OBJECT(variant_)); | |
| 182 EXPECT_EQ(object.Get(), NPVARIANT_TO_OBJECT(variant_)); | |
| 183 | |
| 184 NPBrowser::get()->ReleaseVariantValue(&variant_); | |
| 185 } | |
| 186 | |
| 187 TEST_F(NPUtilsTest, TestNullValueToNPVariant) { | |
| 188 ValueToNPVariant(NPObjectPointer<NPObject>(), &variant_); | |
| 189 EXPECT_TRUE(NPVARIANT_IS_NULL(variant_)); | |
| 190 } | |
| 191 | |
| 192 TEST_F(NPUtilsTest, CanCopyObjectSmartVariant) { | |
| 193 NPObjectPointer<NPObject> object = | |
| 194 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 195 EXPECT_EQ(1, object->referenceCount); | |
| 196 { | |
| 197 SmartNPVariant v1(object); | |
| 198 EXPECT_EQ(2, object->referenceCount); | |
| 199 { | |
| 200 SmartNPVariant v2(v1); | |
| 201 EXPECT_EQ(3, object->referenceCount); | |
| 202 } | |
| 203 EXPECT_EQ(2, object->referenceCount); | |
| 204 } | |
| 205 EXPECT_EQ(1, object->referenceCount); | |
| 206 } | |
| 207 | |
| 208 TEST_F(NPUtilsTest, CanCopyStringSmartVariant) { | |
| 209 SmartNPVariant v1(std::string("hello")); | |
| 210 SmartNPVariant v2(v1); | |
| 211 std::string r; | |
| 212 EXPECT_TRUE(NPVariantToValue(&r, v2)); | |
| 213 EXPECT_EQ(std::string("hello"), r); | |
| 214 EXPECT_NE(v1.value.stringValue.UTF8Characters, | |
| 215 v2.value.stringValue.UTF8Characters); | |
| 216 } | |
| 217 | |
| 218 TEST_F(NPUtilsTest, CanReleaseSmartVariant) { | |
| 219 SmartNPVariant variant(std::string("hello")); | |
| 220 EXPECT_FALSE(variant.IsVoid()); | |
| 221 variant.Release(); | |
| 222 EXPECT_TRUE(variant.IsVoid()); | |
| 223 } | |
| 224 | |
| 225 template <typename T> | |
| 226 class VariantMatcher : public testing::MatcherInterface<const NPVariant&> { | |
| 227 public: | |
| 228 explicit VariantMatcher(const T& value) : value_(value) { | |
| 229 } | |
| 230 | |
| 231 virtual bool Matches(const NPVariant& variant) const { | |
| 232 T other_value; | |
| 233 return NPVariantToValue(&other_value, variant) && other_value == value_; | |
| 234 } | |
| 235 | |
| 236 virtual void DescribeTo(::std::ostream* os) const { | |
| 237 *os << "equals " << value_; | |
| 238 } | |
| 239 | |
| 240 virtual void DescribeNegationTo(::std::ostream* os) const { | |
| 241 *os << "does not equal " << value_; | |
| 242 } | |
| 243 | |
| 244 private: | |
| 245 T value_; | |
| 246 }; | |
| 247 | |
| 248 template <typename T> | |
| 249 Matcher<const NPVariant&> VariantMatches(const T& value) { | |
| 250 return MakeMatcher(new VariantMatcher<T>(value)); | |
| 251 } | |
| 252 | |
| 253 TEST_F(NPUtilsTest, CanDetermineIfObjectHasMethod) { | |
| 254 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 255 NPObjectPointer<MockNPObject> object = | |
| 256 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 257 | |
| 258 EXPECT_CALL(*object, HasMethod(name)) | |
| 259 .WillOnce(Return(true)); | |
| 260 | |
| 261 EXPECT_TRUE(NPHasMethod(NULL, object, "foo")); | |
| 262 } | |
| 263 | |
| 264 TEST_F(NPUtilsTest, CanInvokeVoidMethodWithNativeTypes) { | |
| 265 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 266 NPObjectPointer<MockNPObject> object = | |
| 267 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 268 | |
| 269 VOID_TO_NPVARIANT(variant_); | |
| 270 | |
| 271 EXPECT_CALL(*object, Invoke(name, Pointee(VariantMatches<int32>(7)), 1, _)) | |
| 272 .WillOnce(DoAll(SetArgumentPointee<3>(variant_), | |
| 273 Return(true))); | |
| 274 | |
| 275 EXPECT_TRUE(NPInvokeVoid(NULL, object, "foo", 7)); | |
| 276 } | |
| 277 | |
| 278 TEST_F(NPUtilsTest, InvokeVoidMethodCanFail) { | |
| 279 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 280 NPObjectPointer<MockNPObject> object = | |
| 281 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 282 | |
| 283 VOID_TO_NPVARIANT(variant_); | |
| 284 | |
| 285 EXPECT_CALL(*object, Invoke(name, Pointee(VariantMatches<int32>(7)), 1, _)) | |
| 286 .WillOnce(DoAll(SetArgumentPointee<3>(variant_), | |
| 287 Return(false))); | |
| 288 | |
| 289 EXPECT_FALSE(NPInvokeVoid(NULL, object, "foo", 7)); | |
| 290 } | |
| 291 | |
| 292 TEST_F(NPUtilsTest, CanInvokeNonVoidMethodWithNativeTypes) { | |
| 293 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 294 NPObjectPointer<MockNPObject> object = | |
| 295 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 296 | |
| 297 DOUBLE_TO_NPVARIANT(1.5, variant_); | |
| 298 | |
| 299 EXPECT_CALL(*object, Invoke(name, Pointee(VariantMatches<int32>(7)), 1, _)) | |
| 300 .WillOnce(DoAll(SetArgumentPointee<3>(variant_), | |
| 301 Return(true))); | |
| 302 | |
| 303 double r; | |
| 304 EXPECT_TRUE(NPInvoke(NULL, object, "foo", 7, &r)); | |
| 305 EXPECT_EQ(1.5, r); | |
| 306 } | |
| 307 | |
| 308 TEST_F(NPUtilsTest, InvokeNonVoidMethodCanFail) { | |
| 309 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 310 NPObjectPointer<MockNPObject> object = | |
| 311 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 312 | |
| 313 DOUBLE_TO_NPVARIANT(1.5, variant_); | |
| 314 | |
| 315 EXPECT_CALL(*object, Invoke(name, Pointee(VariantMatches<int32>(7)), 1, _)) | |
| 316 .WillOnce(DoAll(SetArgumentPointee<3>(variant_), | |
| 317 Return(false))); | |
| 318 | |
| 319 double r; | |
| 320 EXPECT_FALSE(NPInvoke(NULL, object, "foo", 7, &r)); | |
| 321 } | |
| 322 | |
| 323 TEST_F(NPUtilsTest, InvokeNonVoidMethodFailsIfResultIsIncompatible) { | |
| 324 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 325 NPObjectPointer<MockNPObject> object = | |
| 326 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 327 | |
| 328 DOUBLE_TO_NPVARIANT(1.5, variant_); | |
| 329 | |
| 330 EXPECT_CALL(*object, Invoke(name, Pointee(VariantMatches<int32>(7)), 1, _)) | |
| 331 .WillOnce(DoAll(SetArgumentPointee<3>(variant_), | |
| 332 Return(true))); | |
| 333 | |
| 334 int r; | |
| 335 EXPECT_FALSE(NPInvoke(NULL, object, "foo", 7, &r)); | |
| 336 } | |
| 337 | |
| 338 TEST_F(NPUtilsTest, CanDetermineIfObjectHasProperty) { | |
| 339 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 340 NPObjectPointer<MockNPObject> object = | |
| 341 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 342 | |
| 343 EXPECT_CALL(*object, HasProperty(name)) | |
| 344 .WillOnce(Return(true)); | |
| 345 | |
| 346 EXPECT_TRUE(NPHasProperty(NULL, object, "foo")); | |
| 347 } | |
| 348 | |
| 349 TEST_F(NPUtilsTest, CanGetPropertyValue) { | |
| 350 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 351 NPObjectPointer<MockNPObject> object = | |
| 352 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 353 | |
| 354 DOUBLE_TO_NPVARIANT(1.5, variant_); | |
| 355 | |
| 356 EXPECT_CALL(*object, GetProperty(name, _)) | |
| 357 .WillOnce(DoAll(SetArgumentPointee<1>(variant_), | |
| 358 Return(true))); | |
| 359 | |
| 360 double r; | |
| 361 EXPECT_TRUE(NPGetProperty(NULL, object, "foo", &r)); | |
| 362 } | |
| 363 | |
| 364 TEST_F(NPUtilsTest, NPGetPropertyReportsFailureIfResultTypeIsDifferent) { | |
| 365 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 366 NPObjectPointer<MockNPObject> object = | |
| 367 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 368 | |
| 369 DOUBLE_TO_NPVARIANT(1.5, variant_); | |
| 370 | |
| 371 EXPECT_CALL(*object, GetProperty(name, _)) | |
| 372 .WillOnce(DoAll(SetArgumentPointee<1>(variant_), | |
| 373 Return(true))); | |
| 374 | |
| 375 bool r; | |
| 376 EXPECT_FALSE(NPGetProperty(NULL, object, "foo", &r)); | |
| 377 } | |
| 378 | |
| 379 TEST_F(NPUtilsTest, NPGetPropertyReportsFailureFromGetProperty) { | |
| 380 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 381 NPObjectPointer<MockNPObject> object = | |
| 382 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 383 | |
| 384 EXPECT_CALL(*object, GetProperty(name, _)) | |
| 385 .WillOnce(Return(false)); | |
| 386 | |
| 387 double r; | |
| 388 EXPECT_FALSE(NPGetProperty(NULL, object, "foo", &r)); | |
| 389 } | |
| 390 | |
| 391 TEST_F(NPUtilsTest, CanSetPropertyValue) { | |
| 392 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 393 NPObjectPointer<MockNPObject> object = | |
| 394 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 395 | |
| 396 EXPECT_CALL(*object, SetProperty(name, Pointee(VariantMatches(1.5)))) | |
| 397 .WillOnce(Return(true)); | |
| 398 | |
| 399 EXPECT_TRUE(NPSetProperty(NULL, object, "foo", 1.5)); | |
| 400 } | |
| 401 | |
| 402 TEST_F(NPUtilsTest, NPSetPropertyReportsFailureFromSetProperty) { | |
| 403 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 404 NPObjectPointer<MockNPObject> object = | |
| 405 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 406 | |
| 407 EXPECT_CALL(*object, SetProperty(name, Pointee(VariantMatches(1.5)))) | |
| 408 .WillOnce(Return(false)); | |
| 409 | |
| 410 EXPECT_FALSE(NPSetProperty(NULL, object, "foo", 1.5)); | |
| 411 } | |
| 412 | |
| 413 TEST_F(NPUtilsTest, CanRemovePropertyValue) { | |
| 414 NPIdentifier name = NPBrowser::get()->GetStringIdentifier("foo"); | |
| 415 NPObjectPointer<MockNPObject> object = | |
| 416 NPCreateObject<StrictMock<MockNPObject> >(NULL); | |
| 417 | |
| 418 EXPECT_CALL(*object, RemoveProperty(name)) | |
| 419 .WillOnce(Return(true)); | |
| 420 | |
| 421 EXPECT_TRUE(NPRemoveProperty(NULL, object, "foo")); | |
| 422 } | |
| 423 | |
| 424 } // namespace np_utils | |
| OLD | NEW |