You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/03/28 03:21:55 UTC

[james-project] 11/23: JAMES-2702 Improve DurationParser tests

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d983389d9d9eb2cb8d5f218eba6abbe27b04a72c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Mar 26 11:16:37 2019 +0700

    JAMES-2702 Improve DurationParser tests
    
     - Rely on parametrized tests
     - Rename out of date methods
     - Add some edge cases tests
---
 server/container/util/pom.xml                      |   5 +
 .../java/org/apache/james/util/DurationParser.java |   2 +-
 .../org/apache/james/util/DurationParserTest.java  | 164 ++++++++-------------
 3 files changed, 67 insertions(+), 104 deletions(-)

diff --git a/server/container/util/pom.xml b/server/container/util/pom.xml
index 9177ff6..e14c5f1 100644
--- a/server/container/util/pom.xml
+++ b/server/container/util/pom.xml
@@ -94,6 +94,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-params</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.junit.platform</groupId>
             <artifactId>junit-platform-launcher</artifactId>
             <scope>test</scope>
diff --git a/server/container/util/src/main/java/org/apache/james/util/DurationParser.java b/server/container/util/src/main/java/org/apache/james/util/DurationParser.java
index f30fb6d..6a562f9 100644
--- a/server/container/util/src/main/java/org/apache/james/util/DurationParser.java
+++ b/server/container/util/src/main/java/org/apache/james/util/DurationParser.java
@@ -40,7 +40,7 @@ public class DurationParser {
 
     private enum Unit {
         MILLI_SECONDS(ImmutableList.of("ms", "msec", "msecs"), ChronoUnit.MILLIS),
-        SECONDS(ImmutableList.of("s", "sec", "secs"), ChronoUnit.SECONDS),
+        SECONDS(ImmutableList.of("s", "sec", "secs", "second", "seconds"), ChronoUnit.SECONDS),
         MINUTES(ImmutableList.of("m", "min", "mins", "minute", "minutes"), ChronoUnit.MINUTES),
         HOURS(ImmutableList.of("h", "hour", "hours"), ChronoUnit.HOURS),
         DAYS(ImmutableList.of("d", "day", "days"), ChronoUnit.DAYS);
diff --git a/server/container/util/src/test/java/org/apache/james/util/DurationParserTest.java b/server/container/util/src/test/java/org/apache/james/util/DurationParserTest.java
index 7ef870c..e1c962d 100644
--- a/server/container/util/src/test/java/org/apache/james/util/DurationParserTest.java
+++ b/server/container/util/src/test/java/org/apache/james/util/DurationParserTest.java
@@ -25,155 +25,113 @@ import java.time.Duration;
 import java.time.temporal.ChronoUnit;
 
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 class DurationParserTest {
-
-    @Test
-    void getMilliSecondsShouldConvertValueWhenNoUnitAmountAsString() {
-        Duration actual = DurationParser.parse("2");
-        assertThat(actual).isEqualTo(Duration.ofMillis(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldUseProvidedUnitWhenNoUnitAmountAsString() {
-        Duration actual = DurationParser.parse("2", ChronoUnit.SECONDS);
-        assertThat(actual).isEqualTo(Duration.ofSeconds(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldNotUseProvidedUnitWhenNoUnitAmountAsString() {
-        Duration actual = DurationParser.parse("2 minutes", ChronoUnit.SECONDS);
-        assertThat(actual).isEqualTo(Duration.ofMinutes(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMsecAmountAsString() {
-        Duration actual = DurationParser.parse("2 msec");
-        assertThat(actual).isEqualTo(Duration.ofMillis(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMsAmountAsString() {
-        Duration actual = DurationParser.parse("2 ms");
-        assertThat(actual).isEqualTo(Duration.ofMillis(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMsCapitalAmountAsString() {
-        Duration actual = DurationParser.parse("2 Ms");
-        assertThat(actual).isEqualTo(Duration.ofMillis(2));
-    }
-
     @Test
-    void getMilliSecondsShouldConvertValueWhenMsecsAmountAsString() {
-        Duration actual = DurationParser.parse("2 msecs");
-        assertThat(actual).isEqualTo(Duration.ofMillis(2));
+    void parseShouldUseMsAsDefaultUnit() {
+        assertThat(DurationParser.parse("2"))
+            .isEqualTo(Duration.ofMillis(2));
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenSAmountAsString() {
-        Duration actual = DurationParser.parse("2 s");
-        assertThat(actual).isEqualTo(Duration.ofSeconds(2));
+    void parseShouldUseSpecifiedDefaultUnit() {
+        assertThat(DurationParser.parse("2", ChronoUnit.SECONDS))
+            .isEqualTo(Duration.ofSeconds(2));
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenSecAmountAsString() {
-        Duration actual = DurationParser.parse("2 sec");
-        assertThat(actual).isEqualTo(Duration.ofSeconds(2));
+    void parseShouldUseSpecifiedUnit() {
+        assertThat(DurationParser.parse("2 minutes", ChronoUnit.SECONDS))
+            .isEqualTo(Duration.ofMinutes(2));
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenSecCapitalAmountAsString() {
-        Duration actual = DurationParser.parse("2 Sec");
-        assertThat(actual).isEqualTo(Duration.ofSeconds(2));
+    void parseShouldSupportStartingSpaces() {
+        assertThat(DurationParser.parse("  2 minutes"))
+            .isEqualTo(Duration.ofMinutes(2));
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenSecsAmountAsString() {
-        Duration actual = DurationParser.parse("2 secs");
-        assertThat(actual).isEqualTo(Duration.ofSeconds(2));
+    void parseShouldSupportEndingSpaces() {
+        assertThat(DurationParser.parse("2 minutes  "))
+            .isEqualTo(Duration.ofMinutes(2));
     }
 
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMAmountAsString() {
-        Duration actual = DurationParser.parse("2 m");
-        assertThat(actual).isEqualTo(Duration.ofMinutes(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMinuteAmountAsString() {
-        Duration actual = DurationParser.parse("2 minute");
-        assertThat(actual).isEqualTo(Duration.ofMinutes(2));
+    @ParameterizedTest
+    @ValueSource(strings = {"2", "2 ms", "2 msec", "2 msecs", "2 Ms"})
+    void parseShouldHandleMilliseconds(String input) {
+        assertThat(DurationParser.parse(input))
+            .isEqualTo(Duration.ofMillis(2));
     }
 
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMinuteCapitalAmountAsString() {
-        Duration actual = DurationParser.parse("2 Minute");
-        assertThat(actual).isEqualTo(Duration.ofMinutes(2));
-    }
-
-    @Test
-    void getMilliSecondsShouldConvertValueWhenMinutesAmountAsString() {
-        Duration actual = DurationParser.parse("2 minutes");
-        assertThat(actual).isEqualTo(Duration.ofMinutes(2));
+    @ParameterizedTest
+    @ValueSource(strings = {"2 s", "2 sec", "2 Sec", "2 second", "2 seconds"})
+    void parseShouldHandleSeconds(String input) {
+        assertThat(DurationParser.parse(input))
+            .isEqualTo(Duration.ofSeconds(2));
     }
 
-    @Test
-    void getMilliSecondsShouldConvertValueWhenHAmountAsString() {
-        Duration actual = DurationParser.parse("2 h");
-        assertThat(actual).isEqualTo(Duration.ofHours(2));
+    @ParameterizedTest
+    @ValueSource(strings = {"2 m", "2 min", "2 mins", "2 minute", "2 Minute", "2 minutes"})
+    void parseShouldHandleMinutes(String input) {
+        assertThat(DurationParser.parse(input))
+            .isEqualTo(Duration.ofMinutes(2));
     }
 
-    @Test
-    void getMilliSecondsShouldConvertValueWhenHourAmountAsString() {
-        Duration actual = DurationParser.parse("2 hour");
-        assertThat(actual).isEqualTo(Duration.ofHours(2));
+    @ParameterizedTest
+    @ValueSource(strings = {"2 h", "2 hour", "2 Hour", "2 hours"})
+    void parseShouldHandleHours(String input) {
+        assertThat(DurationParser.parse(input))
+            .isEqualTo(Duration.ofHours(2));
     }
 
-    @Test
-    void getMilliSecondsShouldConvertValueWhenHourCapitalAmountAsString() {
-        Duration actual = DurationParser.parse("2 Hour");
-        assertThat(actual).isEqualTo(Duration.ofHours(2));
+    @ParameterizedTest
+    @ValueSource(strings = {"2 d", "2 day", "2 Day", "2 days"})
+    void parseShouldHandleDays(String input) {
+        assertThat(DurationParser.parse(input))
+            .isEqualTo(Duration.ofDays(2));
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenHoursAmountAsString() {
-        Duration actual = DurationParser.parse("2 hours");
-        assertThat(actual).isEqualTo(Duration.ofHours(2));
+    void parseShouldThrowWhenIllegalUnitInRawString() {
+        assertThatThrownBy(() -> DurationParser.parse("2 unknown"))
+            .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenDAmountAsString() {
-        Duration actual = DurationParser.parse("2 d");
-        assertThat(actual).isEqualTo(Duration.ofDays(2));
+    void parseShouldThrowWhenMissingAmount() {
+        assertThatThrownBy(() -> DurationParser.parse("seconds"))
+            .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenDayAmountAsString() {
-        Duration actual = DurationParser.parse("2 day");
-        assertThat(actual).isEqualTo(Duration.ofDays(2));
+    void parseShouldThrowWhenMissingAmountWithExtraWhiteSpace() {
+        assertThatThrownBy(() -> DurationParser.parse(" seconds"))
+            .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenDayCapitalAmountAsString() {
-        Duration actual = DurationParser.parse("2 Day");
-        assertThat(actual).isEqualTo(Duration.ofDays(2));
+    void parseShouldThrowWhenEmpty() {
+        assertThatThrownBy(() -> DurationParser.parse(""))
+            .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
-    void getMilliSecondsShouldConvertValueWhenDaysAmountAsString() {
-        Duration actual = DurationParser.parse("2 days");
-        assertThat(actual).isEqualTo(Duration.ofDays(2));
+    void parseShouldThrowWhenNegativeAmount() {
+        assertThatThrownBy(() -> DurationParser.parse("-1 s"))
+            .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
-    void getMilliSecondsShouldThrowWhenIllegalUnitInRawString() {
-        assertThatThrownBy(() -> DurationParser.parse("2 week"))
-            .isInstanceOf(NumberFormatException.class);
+    void parseShouldThrowWhenZero() {
+        assertThat(DurationParser.parse("0 s"))
+            .isEqualTo(Duration.ofSeconds(0));
     }
 
     @Test
-    void getMilliSecondsShouldThrowWhenIllegalPattern() {
+    void parseShouldThrowWhenIllegalPattern() {
         assertThatThrownBy(() -> DurationParser.parse("illegal pattern"))
             .isInstanceOf(NumberFormatException.class);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org