|
|
@@ -0,0 +1,72 @@
|
|
|
+package org.leumasjaffe.recipe.model;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.*;
|
|
|
+
|
|
|
+import static org.hamcrest.MatcherAssert.*;
|
|
|
+import static org.hamcrest.core.IsNot.*;
|
|
|
+import static org.hamcrest.core.StringContains.*;
|
|
|
+import static org.hamcrest.core.StringStartsWith.*;
|
|
|
+
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+import org.junit.jupiter.params.ParameterizedTest;
|
|
|
+import org.junit.jupiter.params.provider.EnumSource;
|
|
|
+
|
|
|
+class DurationTest {
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testPlusConvertsToLowestUnit() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, false, 10, 20);
|
|
|
+ final Duration inMin = new Duration(Duration.Display.MINUTES, false, 60, 120);
|
|
|
+
|
|
|
+ assertEquals(inSec.plus(inMin).getDisplayAs(), Duration.Display.SECONDS);
|
|
|
+ assertEquals(inMin.plus(inSec).getDisplayAs(), Duration.Display.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testPlusWillCarryOverApproximation() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, true, 10, 20);
|
|
|
+ final Duration inMin = new Duration(Duration.Display.MINUTES, false, 60, 120);
|
|
|
+
|
|
|
+ assertEquals(inSec.plus(inMin).isApproximate(), true);
|
|
|
+ assertEquals(inMin.plus(inSec).isApproximate(), true);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testToStringApproxAddsTilde() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, true, 0, 0);
|
|
|
+ assertThat(inSec.toString(), startsWith("~"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testToStringNonApproxDoesNotHaveTilde() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, false, 0, 0);
|
|
|
+ assertThat(inSec.toString(), not(containsString("~")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testNonZeroMinProducesRange() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, false, 10, 0);
|
|
|
+ assertThat(inSec.toString(), containsString("-"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testZeroMinProducesSingleNumber() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, false, 0, 0);
|
|
|
+ assertThat(inSec.toString(), not(containsString("-")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(Duration.Display.class)
|
|
|
+ void testUnitStringIsIncludedInOutput(final Duration.Display as) {
|
|
|
+ final Duration dur = new Duration(as, false, 0, 0);
|
|
|
+ assertThat(dur.toString(), containsString(as.abbreviation));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testUnitControlsOutputScale() {
|
|
|
+ final Duration inSec = new Duration(Duration.Display.SECONDS, false, 10, 20);
|
|
|
+ final Duration inMin = new Duration(Duration.Display.MINUTES, false, 10, 20);
|
|
|
+ assertEquals(inSec.toString(), "10 - 20 s");
|
|
|
+ assertEquals(inMin.toString(), "0 - 0 min");
|
|
|
+ }
|
|
|
+}
|