From 03d8dc6fe3efc904f9e1d3a8e4226bdca13742e5 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Wed, 31 Jan 2018 12:04:05 +0100 Subject: [PATCH 1/2] Display number of seconds left correctly when show seconds flag is used --- .../java/io/bisq/gui/util/BSFormatter.java | 60 +++++-------------- .../io/bisq/gui/util/BSFormatterTest.java | 20 ++++++- 2 files changed, 31 insertions(+), 49 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/util/BSFormatter.java b/gui/src/main/java/io/bisq/gui/util/BSFormatter.java index 698b3ce767..8d19ca3587 100644 --- a/gui/src/main/java/io/bisq/gui/util/BSFormatter.java +++ b/gui/src/main/java/io/bisq/gui/util/BSFormatter.java @@ -30,6 +30,7 @@ import io.bisq.core.offer.Offer; import io.bisq.core.offer.OfferPayload; import io.bisq.network.p2p.NodeAddress; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DurationFormatUtils; import org.bitcoinj.core.Coin; import org.bitcoinj.core.Monetary; @@ -492,7 +493,7 @@ public class BSFormatter { } public static String formatDurationAsWords(long durationMillis, boolean showSeconds) { - String format; + String format = ""; String second = Res.get("time.second"); String minute = Res.get("time.minute"); String hour = Res.get("time.hour").toLowerCase(); @@ -501,55 +502,22 @@ public class BSFormatter { String hours = Res.get("time.hours"); String minutes = Res.get("time.minutes"); String seconds = Res.get("time.seconds"); + + if (durationMillis >= DateUtils.MILLIS_PER_DAY) { + format = "d\' " + days + ", \'"; + } + if (showSeconds) { - format = "d\' " + days + ", \'H\' " + hours + ", \'m\' " + minutes + ", \'s\' " + seconds + "\'"; + format += "H\' " + hours + ", \'m\' " + minutes + ", \'s\' " + seconds + "\'"; } else - format = "d\' " + days + ", \'H\' " + hours + ", \'m\' " + minutes + "\'"; - String duration = DurationFormatUtils.formatDuration(durationMillis, format); - String tmp; - duration = " " + duration; - tmp = StringUtils.replaceOnce(duration, " 0 " + days, ""); - if (tmp.length() != duration.length()) { - duration = tmp; - tmp = StringUtils.replaceOnce(tmp, " 0 " + hours, ""); - if (tmp.length() != duration.length()) { - tmp = StringUtils.replaceOnce(tmp, " 0 " + minutes, ""); - duration = tmp; - if (tmp.length() != tmp.length()) { - duration = StringUtils.replaceOnce(tmp, " 0 " + seconds, ""); - } - } - } + format += "H\' " + hours + ", \'m\' " + minutes + "\'"; - if (duration.length() != 0) { - duration = duration.substring(1); - } + String duration = durationMillis > 0 ? DurationFormatUtils.formatDuration(durationMillis, format) : Res.get("formatter.tradePeriodOver"); - tmp = StringUtils.replaceOnce(duration, " 0 " + seconds, ""); - - if (tmp.length() != duration.length()) { - duration = tmp; - tmp = StringUtils.replaceOnce(tmp, " 0 " + minutes, ""); - if (tmp.length() != duration.length()) { - duration = tmp; - tmp = StringUtils.replaceOnce(tmp, " 0 " + hours, ""); - if (tmp.length() != duration.length()) { - duration = StringUtils.replaceOnce(tmp, " 0 " + days, ""); - } - } - } - - duration = " " + duration; - duration = StringUtils.replaceOnce(duration, " 1 " + seconds, " 1 " + second); - duration = StringUtils.replaceOnce(duration, " 1 " + minutes, " 1 " + minute); - duration = StringUtils.replaceOnce(duration, " 1 " + hours, " 1 " + hour); - duration = StringUtils.replaceOnce(duration, " 1 " + days, " 1 " + day); - if (duration.startsWith(" ,")) - duration = duration.replace(" ,", ""); - else if (duration.startsWith(", ")) - duration = duration.replace(", ", ""); - if (duration.equals("")) - duration = Res.get("formatter.tradePeriodOver"); + duration = StringUtils.replaceOnce(duration, "1 " + seconds, "1 " + second); + duration = StringUtils.replaceOnce(duration, "1 " + minutes, "1 " + minute); + duration = StringUtils.replaceOnce(duration, "1 " + hours, "1 " + hour); + duration = StringUtils.replaceOnce(duration, "1 " + days, "1 " + day); return duration.trim(); } diff --git a/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java b/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java index b2239d9040..a3720f7670 100644 --- a/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java +++ b/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java @@ -28,16 +28,18 @@ import static org.junit.Assert.assertEquals; public class BSFormatterTest { + private BSFormatter formatter; + @Before public void setup() { Locale.setDefault(new Locale("en", "US")); + formatter = new BSFormatter(); + Res.setBaseCurrencyCode("BTC"); + Res.setBaseCurrencyName("Bitcoin"); } @Test public void testIsValid() { - BSFormatter formatter = new BSFormatter(); - Res.setBaseCurrencyCode("BTC"); - Res.setBaseCurrencyName("Bitcoin"); assertEquals("0 days", formatter.formatAccountAge(TimeUnit.HOURS.toMillis(23))); assertEquals("0 days", formatter.formatAccountAge(0)); assertEquals("0 days", formatter.formatAccountAge(-1)); @@ -46,4 +48,16 @@ public class BSFormatterTest { assertEquals("30 days", formatter.formatAccountAge(TimeUnit.DAYS.toMillis(30))); assertEquals("60 days", formatter.formatAccountAge(TimeUnit.DAYS.toMillis(60))); } + + @Test + public void testFormatDurationAsWords() { + assertEquals("1 hour, 0 minutes", formatter.formatDurationAsWords(60 * 60 * 1000)); + assertEquals("1 day, 0 hours, 0 minutes", formatter.formatDurationAsWords(24 * 60 * 60 * 1000)); + assertEquals("2 days, 0 hours, 1 minute", formatter.formatDurationAsWords((2 * 24 * 60 + 1) * 60 * 1000)); + assertEquals("2 days, 0 hours, 2 minutes", formatter.formatDurationAsWords((2 * 24 * 60 + 2) * 60 * 1000)); + assertEquals("1 hour, 0 minutes, 0 seconds", formatter.formatDurationAsWords(60 * 60 * 1000, true)); + assertEquals("1 hour, 0 minutes, 1 second", formatter.formatDurationAsWords((60 * 60 + 1) * 1000, true)); + assertEquals("1 hour, 0 minutes, 2 seconds", formatter.formatDurationAsWords((60 * 60 + 2) * 1000, true)); + assertEquals("Trade period is over", formatter.formatDurationAsWords(0)); + } } From 697b42af81854478151523cd00d14c58d76e7c1a Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Wed, 31 Jan 2018 12:34:13 +0100 Subject: [PATCH 2/2] Use TimeUnit --- .../io/bisq/gui/util/BSFormatterTest.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java b/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java index a3720f7670..c29a9401ce 100644 --- a/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java +++ b/gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java @@ -51,13 +51,18 @@ public class BSFormatterTest { @Test public void testFormatDurationAsWords() { - assertEquals("1 hour, 0 minutes", formatter.formatDurationAsWords(60 * 60 * 1000)); - assertEquals("1 day, 0 hours, 0 minutes", formatter.formatDurationAsWords(24 * 60 * 60 * 1000)); - assertEquals("2 days, 0 hours, 1 minute", formatter.formatDurationAsWords((2 * 24 * 60 + 1) * 60 * 1000)); - assertEquals("2 days, 0 hours, 2 minutes", formatter.formatDurationAsWords((2 * 24 * 60 + 2) * 60 * 1000)); - assertEquals("1 hour, 0 minutes, 0 seconds", formatter.formatDurationAsWords(60 * 60 * 1000, true)); - assertEquals("1 hour, 0 minutes, 1 second", formatter.formatDurationAsWords((60 * 60 + 1) * 1000, true)); - assertEquals("1 hour, 0 minutes, 2 seconds", formatter.formatDurationAsWords((60 * 60 + 2) * 1000, true)); + long oneDay = TimeUnit.DAYS.toMillis(1); + long oneHour = TimeUnit.HOURS.toMillis(1); + long oneMinute = TimeUnit.MINUTES.toMillis(1); + long oneSecond = TimeUnit.SECONDS.toMillis(1); + + assertEquals("1 hour, 0 minutes", formatter.formatDurationAsWords(oneHour)); + assertEquals("1 day, 0 hours, 0 minutes", formatter.formatDurationAsWords(oneDay)); + assertEquals("2 days, 0 hours, 1 minute", formatter.formatDurationAsWords(oneDay * 2 + oneMinute)); + assertEquals("2 days, 0 hours, 2 minutes", formatter.formatDurationAsWords(oneDay * 2 + oneMinute * 2)); + assertEquals("1 hour, 0 minutes, 0 seconds", formatter.formatDurationAsWords(oneHour, true)); + assertEquals("1 hour, 0 minutes, 1 second", formatter.formatDurationAsWords(oneHour + oneSecond, true)); + assertEquals("1 hour, 0 minutes, 2 seconds", formatter.formatDurationAsWords(oneHour + oneSecond * 2, true)); assertEquals("Trade period is over", formatter.formatDurationAsWords(0)); } }