Skip to content

Commit f251ffd

Browse files
Don't fail Bundle loading if nanos/seconds not set (#2399)
1 parent 1e24541 commit f251ffd

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/bundle/BundleSerializer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,9 @@ private Value decodeValue(JSONObject value) throws JSONException {
251251
} else if (value.has("booleanValue")) {
252252
builder.setBooleanValue(value.optBoolean("booleanValue", false));
253253
} else if (value.has("integerValue")) {
254-
builder.setIntegerValue(value.optLong("integerValue", 0));
254+
builder.setIntegerValue(value.optLong("integerValue"));
255255
} else if (value.has("doubleValue")) {
256-
builder.setDoubleValue(value.optDouble("doubleValue", 0.0));
256+
builder.setDoubleValue(value.optDouble("doubleValue"));
257257
} else if (value.has("timestampValue")) {
258258
decodeTimestamp(builder, value.get("timestampValue"));
259259
} else if (value.has("stringValue")) {
@@ -302,12 +302,12 @@ private void decodeMapValue(Value.Builder builder, @Nullable JSONObject map)
302302
private void decodeGeoPoint(Value.Builder builder, JSONObject geoPoint) {
303303
builder.setGeoPointValue(
304304
LatLng.newBuilder()
305-
.setLatitude(geoPoint.optDouble("latitude", 0.0))
306-
.setLongitude(geoPoint.optDouble("longitude", 0.0)));
305+
.setLatitude(geoPoint.optDouble("latitude"))
306+
.setLongitude(geoPoint.optDouble("longitude")));
307307
}
308308

309-
private Timestamp decodeTimestamp(JSONObject timestamp) throws JSONException {
310-
return new Timestamp(timestamp.getLong("seconds"), timestamp.getInt("nanos"));
309+
private Timestamp decodeTimestamp(JSONObject timestamp) {
310+
return new Timestamp(timestamp.optLong("seconds"), timestamp.optInt("nanos"));
311311
}
312312

313313
private Timestamp decodeTimestamp(String timestamp) {

firebase-firestore/src/test/java/com/google/firebase/firestore/bundle/BundleSerializerTest.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,19 +148,34 @@ public void testDecodesStringValues() throws JSONException {
148148
public void testDecodesDateValues() throws JSONException {
149149
String[] json =
150150
new String[] {
151-
"'2020-01-01T01:00:00.001Z'", "{ seconds: 1577840400, nanos: 1000000 }",
152-
"'2020-01-01T01:02:00.001002Z'", "{ seconds: '1577840520', nanos: 1002000 }",
153-
"'2020-01-01T01:02:03.001002003Z'", "{ seconds: 1577840523, nanos: 1002003 }",
151+
"'1970-01-01T00:00:00.000Z'",
152+
"{ }",
153+
"'1970-01-01T00:00:00.001Z'",
154+
"{ nanos: 1000000 }",
155+
"'2020-01-01T01:00:00.000Z'",
156+
"{ seconds: 1577840400 }",
157+
"'2020-01-01T01:00:00.001Z'",
158+
"{ seconds: 1577840400, nanos: 1000000 }",
159+
"'2020-01-01T01:02:00.001002Z'",
160+
"{ seconds: '1577840520', nanos: 1002000 }",
161+
"'2020-01-01T01:02:03.001002003Z'",
162+
"{ seconds: 1577840523, nanos: 1002003 }",
154163
};
155164

156165
Timestamp[] timestamps =
157166
new Timestamp[] {
167+
Timestamp.newBuilder().setNanos(0).setSeconds(0).build(),
168+
Timestamp.newBuilder().setNanos(0).setSeconds(0).build(),
169+
Timestamp.newBuilder().setNanos(1000000).setSeconds(0).build(),
170+
Timestamp.newBuilder().setNanos(1000000).setSeconds(0).build(),
171+
Timestamp.newBuilder().setNanos(0).setSeconds(1577840400).build(),
172+
Timestamp.newBuilder().setNanos(0).setSeconds(1577840400).build(),
158173
Timestamp.newBuilder().setNanos(1000000).setSeconds(1577840400).build(),
159-
Timestamp.newBuilder().setNanos(1000000).setSeconds(1577840400).build(),
174+
Timestamp.newBuilder().setNanos(1000000).setSeconds(1577840400).build(),
175+
Timestamp.newBuilder().setNanos(1002000).setSeconds(1577840520).build(),
160176
Timestamp.newBuilder().setNanos(1002000).setSeconds(1577840520).build(),
161-
Timestamp.newBuilder().setNanos(1002000).setSeconds(1577840520).build(),
162177
Timestamp.newBuilder().setNanos(1002003).setSeconds(1577840523).build(),
163-
Timestamp.newBuilder().setNanos(1002003).setSeconds(1577840523).build()
178+
Timestamp.newBuilder().setNanos(1002003).setSeconds(1577840523).build()
164179
};
165180

166181
for (int i = 0; i < json.length; i++) {

0 commit comments

Comments
 (0)