summaryrefslogtreecommitdiffstats
path: root/ppapi/shared_impl/var_value_conversions_unittest.cc
diff options
context:
space:
mode:
authoryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-29 03:29:20 +0000
committeryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-29 03:29:20 +0000
commit27db60abdea8b46b6ff1ec9958d3b2b0a20e7ce7 (patch)
tree16154c3bfc019af7a692891fa08c498ac801a9f1 /ppapi/shared_impl/var_value_conversions_unittest.cc
parent4252a15b70480f78d951f50d2699cd30e71c752b (diff)
downloadchromium_src-27db60abdea8b46b6ff1ec9958d3b2b0a20e7ce7.zip
chromium_src-27db60abdea8b46b6ff1ec9958d3b2b0a20e7ce7.tar.gz
chromium_src-27db60abdea8b46b6ff1ec9958d3b2b0a20e7ce7.tar.bz2
Apps V2 in Pepper: introduce singleton resource ExtensionsCommon.
ExtensionsCommon will be the plugin-renderer bridge for those 'simple' APIs whose input/output can be easily represented by base::ListValue. The host side implementation will be in a separate CL. BUG=None TEST=None Review URL: https://chromiumcodereview.appspot.com/13080002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191278 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/shared_impl/var_value_conversions_unittest.cc')
-rw-r--r--ppapi/shared_impl/var_value_conversions_unittest.cc173
1 files changed, 126 insertions, 47 deletions
diff --git a/ppapi/shared_impl/var_value_conversions_unittest.cc b/ppapi/shared_impl/var_value_conversions_unittest.cc
index 8dd2c42..88d645a 100644
--- a/ppapi/shared_impl/var_value_conversions_unittest.cc
+++ b/ppapi/shared_impl/var_value_conversions_unittest.cc
@@ -77,22 +77,24 @@ bool Equals(const base::Value& value, const PP_Var& var) {
if (!dict_var)
return false;
- size_t non_undefined_count = 0;
+ size_t count = 0;
for (DictionaryVar::KeyValueMap::const_iterator iter =
dict_var->key_value_map().begin();
iter != dict_var->key_value_map().end();
++iter) {
- if (iter->second.get().type == PP_VARTYPE_UNDEFINED)
+ if (iter->second.get().type == PP_VARTYPE_UNDEFINED ||
+ iter->second.get().type == PP_VARTYPE_NULL) {
continue;
+ }
- ++non_undefined_count;
+ ++count;
const base::Value* sub_value = NULL;
if (!dict_value.GetWithoutPathExpansion(iter->first, &sub_value) ||
!Equals(*sub_value, iter->second.get())) {
return false;
}
}
- return non_undefined_count == dict_value.size();
+ return count == dict_value.size();
}
case base::Value::TYPE_LIST: {
const base::ListValue& list_value =
@@ -117,6 +119,20 @@ bool Equals(const base::Value& value, const PP_Var& var) {
return false;
}
+bool ConvertVarAndVerify(const PP_Var& var) {
+ scoped_ptr<base::Value> value(CreateValueFromVar(var));
+ if (value.get())
+ return Equals(*value, var);
+ return false;
+}
+
+bool ConvertValueAndVerify(const base::Value& value) {
+ ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(value));
+ if (var.get().type != PP_VARTYPE_UNDEFINED)
+ return Equals(value, var.get());
+ return false;
+}
+
class VarValueConversionsTest : public testing::Test {
public:
VarValueConversionsTest() {
@@ -148,11 +164,10 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
ScopedPPVar var_2(ScopedPPVar::PassRef(), array_var->GetPPVar());
ASSERT_TRUE(dict_var->SetWithStringKey("key_1", var_2.get()));
- scoped_ptr<base::Value> value(CreateValueFromVar(var_1.get()));
- ASSERT_TRUE(value.get());
+ ASSERT_TRUE(ConvertVarAndVerify(var_1.get()));
ASSERT_TRUE(array_var->Set(0, var_1.get()));
- value.reset(CreateValueFromVar(var_1.get()));
+ scoped_ptr<base::Value> value(CreateValueFromVar(var_1.get()));
ASSERT_EQ(NULL, value.get());
// Make sure |var_1| doesn't indirectly hold a ref to itself, otherwise it
@@ -162,13 +177,8 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
// Vars of null or undefined type are converted to null values.
{
- scoped_ptr<base::Value> value(CreateValueFromVar(PP_MakeNull()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, PP_MakeNull()));
-
- value.reset(CreateValueFromVar(PP_MakeUndefined()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, PP_MakeUndefined()));
+ ASSERT_TRUE(ConvertVarAndVerify(PP_MakeNull()));
+ ASSERT_TRUE(ConvertVarAndVerify(PP_MakeUndefined()));
}
{
@@ -176,21 +186,18 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
ScopedPPVar var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
- scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, var.get()));
+ ASSERT_TRUE(ConvertVarAndVerify(var.get()));
}
{
- // Key-value pairs whose value is undefined are ignored.
+ // Key-value pairs whose value is undefined or null are ignored.
scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
ASSERT_TRUE(dict_var->SetWithStringKey("key_1", PP_MakeUndefined()));
ASSERT_TRUE(dict_var->SetWithStringKey("key_2", PP_MakeInt32(1)));
+ ASSERT_TRUE(dict_var->SetWithStringKey("key_3", PP_MakeNull()));
ScopedPPVar var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
- scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, var.get()));
+ ASSERT_TRUE(ConvertVarAndVerify(var.get()));
}
{
@@ -207,9 +214,7 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
ASSERT_TRUE(dict_var_1->SetWithStringKey("key_3", string_pp_var.get()));
ASSERT_TRUE(dict_var_2->SetWithStringKey("key_4", string_pp_var.get()));
- scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, dict_pp_var_1.get()));
+ ASSERT_TRUE(ConvertVarAndVerify(dict_pp_var_1.get()));
}
{
@@ -217,14 +222,11 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
scoped_refptr<ArrayVar> array_var(new ArrayVar());
ScopedPPVar var(ScopedPPVar::PassRef(), array_var->GetPPVar());
- scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, var.get()));
+ ASSERT_TRUE(ConvertVarAndVerify(var.get()));
ASSERT_TRUE(array_var->Set(0, PP_MakeDouble(1)));
- value.reset(CreateValueFromVar(var.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, var.get()));
+
+ ASSERT_TRUE(ConvertVarAndVerify(var.get()));
}
{
@@ -252,9 +254,7 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
ASSERT_TRUE(array_var->Set(1, PP_MakeBool(PP_TRUE)));
ASSERT_TRUE(array_var->SetLength(4));
- scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, dict_pp_var_1.get()));
+ ASSERT_TRUE(ConvertVarAndVerify(dict_pp_var_1.get()));
}
{
@@ -265,9 +265,7 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) {
ASSERT_TRUE(dict_var->SetWithStringKey("double.key", PP_MakeDouble(1)));
ASSERT_TRUE(dict_var->SetWithStringKey("int.key..name", PP_MakeInt32(2)));
- scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var.get()));
- ASSERT_TRUE(value.get());
- ASSERT_TRUE(Equals(*value, dict_pp_var.get()));
+ ASSERT_TRUE(ConvertVarAndVerify(dict_pp_var.get()));
}
}
@@ -275,29 +273,24 @@ TEST_F(VarValueConversionsTest, CreateVarFromValue) {
{
// Test basic cases for dictionary.
base::DictionaryValue dict_value;
- ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
- ASSERT_TRUE(Equals(dict_value, var.get()));
+ ASSERT_TRUE(ConvertValueAndVerify(dict_value));
dict_value.SetInteger("int_key", 1);
- var = ScopedPPVar(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
- ASSERT_TRUE(Equals(dict_value, var.get()));
+ ASSERT_TRUE(ConvertValueAndVerify(dict_value));
}
{
// Test basic cases for array.
base::ListValue list_value;
- ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(list_value));
- ASSERT_TRUE(Equals(list_value, var.get()));
+ ASSERT_TRUE(ConvertValueAndVerify(list_value));
list_value.AppendInteger(1);
- var = ScopedPPVar(ScopedPPVar::PassRef(), CreateVarFromValue(list_value));
- ASSERT_TRUE(Equals(list_value, var.get()));
+ ASSERT_TRUE(ConvertValueAndVerify(list_value));
}
{
// Test more complex inputs.
base::DictionaryValue dict_value;
- dict_value.Set("null_key", base::Value::CreateNullValue());
dict_value.SetString("string_key", "string_value");
dict_value.SetDouble("dict_key.double_key", 1);
@@ -308,8 +301,94 @@ TEST_F(VarValueConversionsTest, CreateVarFromValue) {
dict_value.Set("dict_key.array_key", list_value.release());
- ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
- ASSERT_TRUE(Equals(dict_value, var.get()));
+ ASSERT_TRUE(ConvertValueAndVerify(dict_value));
+ }
+}
+
+TEST_F(VarValueConversionsTest, CreateListValueFromVarVector) {
+ {
+ // Test empty var vector.
+ scoped_ptr<base::ListValue> list_value(
+ CreateListValueFromVarVector(std::vector<PP_Var>()));
+ ASSERT_TRUE(list_value.get());
+ ASSERT_EQ(0u, list_value->GetSize());
+ }
+
+ {
+ // Test more complex inputs.
+ scoped_refptr<StringVar> string_var(new StringVar("string_value"));
+ ScopedPPVar string_pp_var(ScopedPPVar::PassRef(), string_var->GetPPVar());
+
+ scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
+ ScopedPPVar dict_pp_var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
+ ASSERT_TRUE(dict_var->SetWithStringKey("null_key", PP_MakeNull()));
+ ASSERT_TRUE(dict_var->SetWithStringKey("string_key", string_pp_var.get()));
+
+ scoped_refptr<ArrayVar> array_var(new ArrayVar());
+ ScopedPPVar array_pp_var(ScopedPPVar::PassRef(), array_var->GetPPVar());
+ ASSERT_TRUE(array_var->Set(0, PP_MakeInt32(2)));
+ ASSERT_TRUE(array_var->Set(1, PP_MakeBool(PP_TRUE)));
+ ASSERT_TRUE(array_var->SetLength(4));
+
+ std::vector<PP_Var> vars;
+ vars.push_back(dict_pp_var.get());
+ vars.push_back(string_pp_var.get());
+ vars.push_back(array_pp_var.get());
+ vars.push_back(PP_MakeDouble(1));
+ vars.push_back(PP_MakeUndefined());
+ vars.push_back(PP_MakeNull());
+
+ scoped_ptr<base::ListValue> list_value(CreateListValueFromVarVector(vars));
+
+ ASSERT_TRUE(list_value.get());
+ ASSERT_EQ(vars.size(), list_value->GetSize());
+
+ for (size_t i = 0; i < list_value->GetSize(); ++i) {
+ const base::Value* value = NULL;
+ ASSERT_TRUE(list_value->Get(i, &value));
+ ASSERT_TRUE(Equals(*value, vars[i]));
+ }
+ }
+}
+
+TEST_F(VarValueConversionsTest, CreateVarVectorFromListValue) {
+ {
+ // Test empty list.
+ base::ListValue list_value;
+ std::vector<PP_Var> vars;
+ ASSERT_TRUE(CreateVarVectorFromListValue(list_value, &vars));
+ ASSERT_EQ(0u, vars.size());
+ }
+
+ {
+ // Test more complex inputs.
+ base::ListValue list_value;
+
+ scoped_ptr<base::DictionaryValue> dict_value(new base::DictionaryValue());
+ dict_value->SetString("string_key", "string_value");
+
+ scoped_ptr<base::ListValue> sub_list_value(new base::ListValue());
+ sub_list_value->AppendInteger(2);
+ sub_list_value->AppendBoolean(true);
+
+ list_value.Append(dict_value.release());
+ list_value.AppendString("string_value");
+ list_value.Append(sub_list_value.release());
+ list_value.AppendDouble(1);
+ list_value.Append(base::Value::CreateNullValue());
+
+ std::vector<PP_Var> vars;
+ ASSERT_TRUE(CreateVarVectorFromListValue(list_value, &vars));
+
+ ASSERT_EQ(list_value.GetSize(), vars.size());
+
+ for (size_t i = 0; i < list_value.GetSize(); ++i) {
+ const base::Value* value = NULL;
+ ASSERT_TRUE(list_value.Get(i, &value));
+ ASSERT_TRUE(Equals(*value, vars[i]));
+
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(vars[i]);
+ }
}
}