diff options
-rw-r--r-- | base/values.cc | 4 | ||||
-rw-r--r-- | base/values_unittest.cc | 9 |
2 files changed, 10 insertions, 3 deletions
diff --git a/base/values.cc b/base/values.cc index 9f2816a..0f30e379 100644 --- a/base/values.cc +++ b/base/values.cc @@ -179,7 +179,9 @@ bool FundamentalValue::GetAsInteger(int* out_value) const { bool FundamentalValue::GetAsDouble(double* out_value) const { if (out_value && IsType(TYPE_DOUBLE)) *out_value = double_value_; - return (IsType(TYPE_DOUBLE)); + else if (out_value && IsType(TYPE_INTEGER)) + *out_value = integer_value_; + return (IsType(TYPE_DOUBLE) || IsType(TYPE_INTEGER)); } FundamentalValue* FundamentalValue::DeepCopy() const { diff --git a/base/values_unittest.cc b/base/values_unittest.cc index 809fe90..5fac826 100644 --- a/base/values_unittest.cc +++ b/base/values_unittest.cc @@ -74,10 +74,12 @@ TEST_F(ValuesTest, List) { ASSERT_FALSE(mixed_list->GetInteger(0, &int_value)); ASSERT_EQ(0, int_value); - ASSERT_FALSE(mixed_list->GetDouble(1, &double_value)); - ASSERT_EQ(0.0, double_value); + ASSERT_FALSE(mixed_list->GetBoolean(1, &bool_value)); + ASSERT_FALSE(bool_value); ASSERT_FALSE(mixed_list->GetString(2, &string_value)); ASSERT_EQ("", string_value); + ASSERT_FALSE(mixed_list->GetInteger(2, &int_value)); + ASSERT_EQ(0, int_value); ASSERT_FALSE(mixed_list->GetBoolean(3, &bool_value)); ASSERT_FALSE(bool_value); @@ -85,6 +87,9 @@ TEST_F(ValuesTest, List) { ASSERT_TRUE(bool_value); ASSERT_TRUE(mixed_list->GetInteger(1, &int_value)); ASSERT_EQ(42, int_value); + // implicit conversion from Integer to Double should be possible. + ASSERT_TRUE(mixed_list->GetDouble(1, &double_value)); + ASSERT_EQ(42, double_value); ASSERT_TRUE(mixed_list->GetDouble(2, &double_value)); ASSERT_EQ(88.8, double_value); ASSERT_TRUE(mixed_list->GetString(3, &string_value)); |