Index: webkit/glue/cpp_variant_unittest.cc |
diff --git a/webkit/glue/cpp_variant_unittest.cc b/webkit/glue/cpp_variant_unittest.cc |
index d4eacc6853b2e419486ae641625c1d04a7a00756..0061c3e242ef3f3b24e194ca6675e077f09a8fa8 100644 |
--- a/webkit/glue/cpp_variant_unittest.cc |
+++ b/webkit/glue/cpp_variant_unittest.cc |
@@ -1,8 +1,11 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <vector> |
+ |
#include "base/compiler_specific.h" |
+#include "base/string_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" |
#include "webkit/glue/cpp_variant.h" |
@@ -424,3 +427,67 @@ TEST(CppVariantTest, IsTypeFunctionsWork) { |
WebBindings::releaseObject(obj); |
CheckObject(cpp); |
} |
+ |
+bool MockNPHasPropertyFunction(NPObject *npobj, NPIdentifier name) { |
+ return true; |
+} |
+ |
+bool MockNPGetPropertyFunction(NPObject *npobj, NPIdentifier name, |
+ NPVariant *result) { |
+ if (WebBindings::getStringIdentifier("length") == name) { |
+ DOUBLE_TO_NPVARIANT(4, *result); |
+ } else if (WebBindings::getIntIdentifier(0) == name) { |
+ DOUBLE_TO_NPVARIANT(0, *result); |
+ } else if (WebBindings::getIntIdentifier(1) == name) { |
+ BOOLEAN_TO_NPVARIANT(true, *result); |
+ } else if (WebBindings::getIntIdentifier(2) == name) { |
+ NULL_TO_NPVARIANT(*result); |
+ } else if (WebBindings::getIntIdentifier(3) == name) { |
+ const char* s = "string"; |
+ size_t length = strlen(s); |
+ char* mem = static_cast<char*>(malloc((length + 1) * sizeof(char))); |
Evan Martin
2011/01/27 23:36:55
Still has sizeof(char) here
|
+ base::strlcpy(mem, s, length + 1); |
+ STRINGZ_TO_NPVARIANT(mem, *result); |
+ } |
+ |
+ return true; |
+} |
+ |
+TEST(CppVariantTest, ToVector) { |
+ NPClass array_like_class = { |
+ NP_CLASS_STRUCT_VERSION, |
+ MockNPAllocate, // NPAllocateFunctionPtr allocate; |
+ MockNPDeallocate, // NPDeallocateFunctionPtr deallocate; |
+ 0, // NPInvalidateFunctionPtr invalidate; |
+ 0, // NPHasMethodFunctionPtr hasMethod; |
+ 0, // NPInvokeFunctionPtr invoke; |
+ 0, // NPInvokeDefaultFunctionPtr invokeDefault; |
+ MockNPHasPropertyFunction, // NPHasPropertyFunctionPtr hasProperty; |
+ MockNPGetPropertyFunction, // NPGetPropertyFunctionPtr getProperty; |
+ 0, // NPSetPropertyFunctionPtr setProperty; |
+ 0, // NPRemovePropertyFunctionPtr removeProperty; |
+ 0, // NPEnumerationFunctionPtr enumerate; |
+ 0 // NPConstructFunctionPtr construct; |
+ }; |
+ |
+ NPObject* obj = WebBindings::createObject(NULL, &array_like_class); |
+ |
+ CppVariant cpp; |
+ cpp.Set(obj); |
+ |
+ std::vector<CppVariant> cpp_vector = cpp.ToVector(); |
+ EXPECT_EQ(4u, cpp_vector.size()); |
+ |
+ EXPECT_TRUE(cpp_vector[0].isDouble()); |
+ EXPECT_EQ(0, cpp_vector[0].ToDouble()); |
+ |
+ EXPECT_TRUE(cpp_vector[1].isBool()); |
+ EXPECT_EQ(true, cpp_vector[1].ToBoolean()); |
+ |
+ EXPECT_TRUE(cpp_vector[2].isNull()); |
+ |
+ EXPECT_TRUE(cpp_vector[3].isString()); |
+ CheckString("string", cpp_vector[3]); |
+ |
+ WebBindings::releaseObject(obj); |
+} |