From 315bddea96c5a3b508806e4dda41b85e54d138dd Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 3 Jan 2020 06:40:30 -0600 Subject: [PATCH] Automatically fix invalid timestamps, instead of crashing --- .../java/org/isoron/uhabits/core/models/Timestamp.java | 6 ++++-- .../org/isoron/uhabits/core/models/TimestampTest.java | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java index af311d85f..deca3de9a 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java @@ -30,7 +30,6 @@ import static org.isoron.uhabits.core.utils.StringUtils.*; public final class Timestamp { - public static final long DAY_LENGTH = 86400000; public static final Timestamp ZERO = new Timestamp(0); @@ -39,10 +38,13 @@ public final class Timestamp public Timestamp(long unixTime) { - if (unixTime < 0 || unixTime % DAY_LENGTH != 0) + if (unixTime < 0) throw new IllegalArgumentException( "Invalid unix time: " + unixTime); + if (unixTime % DAY_LENGTH != 0) + unixTime = (unixTime / DAY_LENGTH) * DAY_LENGTH; + this.unixTime = unixTime; } diff --git a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java index 55155a8a4..25b5cd897 100644 --- a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java +++ b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.core.models; import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.utils.*; import org.junit.*; +import org.mockito.internal.verification.*; import static junit.framework.TestCase.assertFalse; import static org.hamcrest.MatcherAssert.*; @@ -64,5 +65,10 @@ public class TimestampTest extends BaseUnitTest assertThat(t.daysUntil(t.minus(300)), equalTo(-300)); } - + @Test + public void testInexact() throws Exception + { + Timestamp t = new Timestamp(1578054764000L); + assertThat(t.getUnixTime(), equalTo(1578009600000L)); + } }