Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit 2696f6d

Browse files
authored
Merge pull request #186 from proppy/fix-number-decoding
firebaseobject: fix number decoding
2 parents 0b02525 + 1bb5527 commit 2696f6d

File tree

2 files changed

+34
-16
lines changed

2 files changed

+34
-16
lines changed

src/FirebaseObject.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@ bool FirebaseObject::getBool(const String& path) {
3636

3737
int FirebaseObject::getInt(const String& path) {
3838
JsonVariant variant = getJsonVariant(path);
39-
if (!variant.is<int>()) {
40-
error_ = "failed to convert to int";
39+
if (!variant.is<int>() && !variant.is<float>()) {
40+
error_ = "failed to convert to number";
4141
return 0;
4242
}
4343
return static_cast<int>(variant);
4444
}
4545

4646
float FirebaseObject::getFloat(const String& path) {
4747
JsonVariant variant = getJsonVariant(path);
48-
if (!variant.is<float>()) {
49-
error_ = "failed to convert to float";
48+
if (!variant.is<float>() && !variant.is<int>()) {
49+
error_ = "failed to convert to number";
5050
return 0;
5151
}
5252
return static_cast<float>(variant);

test/FirebaseArduino_test.cpp

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,37 @@ TEST(FirebaseObjectTest, GetBool) {
2626
}
2727

2828
TEST(FirebaseObjectTest, GetInt) {
29-
FirebaseObject obj("42");
30-
EXPECT_EQ(42, obj.getInt());
31-
EXPECT_TRUE(obj.success());
32-
EXPECT_FALSE(obj.failed());
33-
EXPECT_EQ(obj.error(), "");
29+
{
30+
FirebaseObject obj("42");
31+
EXPECT_EQ(42, obj.getInt());
32+
EXPECT_TRUE(obj.success());
33+
EXPECT_FALSE(obj.failed());
34+
EXPECT_EQ(obj.error(), "");
35+
}
36+
{
37+
FirebaseObject obj("42.0");
38+
EXPECT_EQ(42, obj.getInt());
39+
EXPECT_TRUE(obj.success());
40+
EXPECT_FALSE(obj.failed());
41+
EXPECT_EQ(obj.error(), "");
42+
}
3443
}
3544

3645
TEST(FirebaseObjectTest, GetFloat) {
37-
FirebaseObject obj("43.0");
38-
EXPECT_EQ(43, obj.getFloat());
39-
EXPECT_TRUE(obj.success());
40-
EXPECT_FALSE(obj.failed());
41-
EXPECT_EQ(obj.error(), "");
46+
{
47+
FirebaseObject obj("43.0");
48+
EXPECT_EQ(43, obj.getFloat());
49+
EXPECT_TRUE(obj.success());
50+
EXPECT_FALSE(obj.failed());
51+
EXPECT_EQ(obj.error(), "");
52+
}
53+
{
54+
FirebaseObject obj("43");
55+
EXPECT_EQ(43, obj.getFloat());
56+
EXPECT_TRUE(obj.success());
57+
EXPECT_FALSE(obj.failed());
58+
EXPECT_EQ(obj.error(), "");
59+
}
4260
}
4361

4462
TEST(FirebaseObjectTest, GetString) {
@@ -66,15 +84,15 @@ TEST(FirebaseObjectTest, GetIntFailure) {
6684
EXPECT_EQ(obj.getInt(), 0);
6785
EXPECT_FALSE(obj.success());
6886
EXPECT_TRUE(obj.failed());
69-
EXPECT_EQ(obj.error(), "failed to convert to int");
87+
EXPECT_EQ(obj.error(), "failed to convert to number");
7088
}
7189

7290
TEST(FirebaseObjectTest, GetFloatFailure) {
7391
FirebaseObject obj("{\"foo\":\"bar\"}");
7492
EXPECT_EQ(obj.getFloat(), 0);
7593
EXPECT_FALSE(obj.success());
7694
EXPECT_TRUE(obj.failed());
77-
EXPECT_EQ(obj.error(), "failed to convert to float");
95+
EXPECT_EQ(obj.error(), "failed to convert to number");
7896
}
7997

8098
TEST(FirebaseObjectTest, GetBoolFailure) {

0 commit comments

Comments
 (0)