Index: ppapi/shared_impl/var_value_conversions_unittest.cc |
diff --git a/ppapi/shared_impl/var_value_conversions_unittest.cc b/ppapi/shared_impl/var_value_conversions_unittest.cc |
index 8dd2c427812abb6839aa6a2eafd5091cef41add5..88d645ad19769b68d9342eb0334e39df32f4c986 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]); |
+ } |
} |
} |