summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/values.cc4
-rw-r--r--base/values_unittest.cc9
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));