summaryrefslogtreecommitdiff
path: root/src/test/java/sevenUnitsGUI/PresenterTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/sevenUnitsGUI/PresenterTest.java')
-rw-r--r--src/test/java/sevenUnitsGUI/PresenterTest.java98
1 files changed, 50 insertions, 48 deletions
diff --git a/src/test/java/sevenUnitsGUI/PresenterTest.java b/src/test/java/sevenUnitsGUI/PresenterTest.java
index 13d7986..9e25a08 100644
--- a/src/test/java/sevenUnitsGUI/PresenterTest.java
+++ b/src/test/java/sevenUnitsGUI/PresenterTest.java
@@ -18,6 +18,7 @@ package sevenUnitsGUI;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
import java.math.RoundingMode;
import java.nio.file.Path;
@@ -63,14 +64,14 @@ public final class PresenterTest {
"test-settings.txt");
static final Set<Unit> testUnits = Set.of(Metric.METRE, Metric.KILOMETRE,
Metric.METRE_PER_SECOND, Metric.KILOMETRE_PER_HOUR);
-
+
static final Set<ObjectProduct<BaseDimension>> testDimensions = Set
.of(Metric.Dimensions.LENGTH, Metric.Dimensions.VELOCITY);
-
+
private static final Stream<Function<Map.Entry<String, LinearUnit>, Map<String, LinearUnit>>> SEARCH_RULES = Stream
.of(PrefixSearchRule.NO_PREFIXES, PrefixSearchRule.COMMON_PREFIXES,
PrefixSearchRule.ALL_METRIC_PREFIXES);
-
+
/**
* @return rounding rules used by {@link #testRoundingRules}
* @since v0.4.0
@@ -80,18 +81,18 @@ public final class PresenterTest {
final var SCIENTIFIC_ROUNDING = StandardDisplayRules.uncertaintyBased();
final var INTEGER_ROUNDING = StandardDisplayRules.fixedDecimals(0);
final var SIG_FIG_ROUNDING = StandardDisplayRules.fixedPrecision(4);
-
+
return Stream.of(SCIENTIFIC_ROUNDING, INTEGER_ROUNDING, SIG_FIG_ROUNDING);
}
-
+
private static final Stream<Function<Map.Entry<String, LinearUnit>, Map<String, LinearUnit>>> getSearchRules() {
return SEARCH_RULES;
}
-
+
private static final Set<String> names(Set<? extends Nameable> units) {
return units.stream().map(Nameable::getName).collect(Collectors.toSet());
}
-
+
/**
* Test method for {@link Presenter#convertExpressions}
*
@@ -103,20 +104,20 @@ public final class PresenterTest {
// setup
final ViewBot viewBot = new ViewBot();
final Presenter presenter = new Presenter(viewBot);
-
+
viewBot.setFromExpression("10000.0 m");
viewBot.setToExpression("km");
-
+
// convert expression
presenter.convertExpressions();
-
+
// test result
final List<UnitConversionRecord> outputs = viewBot
.expressionConversionList();
assertEquals("10000.0 m = 10.00000 km",
outputs.get(outputs.size() - 1).toString());
}
-
+
/**
* Tests that unit-conversion Views can correctly convert units
*
@@ -128,16 +129,16 @@ public final class PresenterTest {
// setup
final ViewBot viewBot = new ViewBot();
final Presenter presenter = new Presenter(viewBot);
-
+
viewBot.setFromUnitNames(names(testUnits));
viewBot.setToUnitNames(names(testUnits));
viewBot.setFromSelection("metre");
viewBot.setToSelection("kilometre");
viewBot.setInputValue("10000.0");
-
+
// convert units
presenter.convertUnits();
-
+
/*
* use result from system as expected - I'm not testing unit conversion
* here (that's for the backend tests), I'm just testing that it correctly
@@ -153,7 +154,7 @@ public final class PresenterTest {
expectedOutput.getValue().toString(false, RoundingMode.HALF_EVEN));
assertEquals(List.of(expectedUC), viewBot.unitConversionList());
}
-
+
/**
* Tests that duplicate units are successfully removed, if that is asked for
*
@@ -164,7 +165,7 @@ public final class PresenterTest {
void testDuplicateUnits() {
final var metre = Metric.METRE;
final var meter = Metric.METRE.withName(NameSymbol.of("meter", "m"));
-
+
// load 2 duplicate units
final var viewBot = new ViewBot();
final var presenter = new Presenter(viewBot);
@@ -173,20 +174,20 @@ public final class PresenterTest {
presenter.database.addUnit("meter", meter);
presenter.setOneWayConversionEnabled(false);
presenter.setSearchRule(PrefixSearchRule.NO_PREFIXES);
-
+
// test that only one of them is included if duplicate units disabled
presenter.setShowDuplicates(false);
presenter.updateView();
assertEquals(1, viewBot.getFromUnitNames().size());
assertEquals(1, viewBot.getToUnitNames().size());
-
+
// test that both of them is included if duplicate units enabled
presenter.setShowDuplicates(true);
presenter.updateView();
assertEquals(2, viewBot.getFromUnitNames().size());
assertEquals(2, viewBot.getToUnitNames().size());
}
-
+
/**
* Tests that one-way conversion correctly filters From and To units
*
@@ -199,7 +200,7 @@ public final class PresenterTest {
final var allNames = Set.of("metre", "inch", "tempC");
final var metricNames = Set.of("metre", "tempC");
final var nonMetricNames = Set.of("inch", "tempC");
-
+
// load view with one metric and one non-metric unit
final var viewBot = new ViewBot();
final var presenter = new Presenter(viewBot);
@@ -208,19 +209,19 @@ public final class PresenterTest {
presenter.database.addUnit("inch", BritishImperial.Length.INCH);
presenter.database.addUnit("tempC", Metric.CELSIUS);
presenter.setSearchRule(PrefixSearchRule.NO_PREFIXES);
-
+
// test that units are removed from each side when one-way conversion is
// enabled
presenter.setOneWayConversionEnabled(true);
assertEquals(nonMetricNames, viewBot.getFromUnitNames());
assertEquals(metricNames, viewBot.getToUnitNames());
-
+
// test that units are kept when one-way conversion is disabled
presenter.setOneWayConversionEnabled(false);
assertEquals(allNames, viewBot.getFromUnitNames());
assertEquals(allNames, viewBot.getToUnitNames());
}
-
+
/**
* Tests the prefix-viewing functionality.
*
@@ -234,23 +235,23 @@ public final class PresenterTest {
final var presenter = new Presenter(viewBot);
viewBot.setViewablePrefixNames(Set.of("kilo", "milli"));
presenter.setNumberDisplayRule(UncertainDouble::toString);
-
+
// view prefix
viewBot.setViewedPrefixName("kilo");
presenter.prefixSelected(); // just in case
-
+
// get correct values
final var expectedNameSymbol = presenter.database.getPrefix("kilo")
.getNameSymbol();
final var expectedMultiplierString = String
.valueOf(Metric.KILO.getMultiplier());
-
+
// test that presenter's values are correct
final var prefixRecord = viewBot.prefixViewList().get(0);
assertEquals(expectedNameSymbol, prefixRecord.getNameSymbol());
assertEquals(expectedMultiplierString, prefixRecord.multiplierString());
}
-
+
/**
* Tests that rounding rules are used correctly.
*
@@ -264,13 +265,13 @@ public final class PresenterTest {
final var viewBot = new ViewBot();
final var presenter = new Presenter(viewBot);
presenter.setNumberDisplayRule(roundingRule);
-
+
// convert and round
viewBot.setInputValue("12345.6789");
viewBot.setFromSelection("metre");
viewBot.setToSelection("kilometre");
presenter.convertUnits();
-
+
// test the result of the rounding
final String expectedOutputString = roundingRule
.apply(UncertainDouble.fromRoundedString("12.3456789"));
@@ -278,7 +279,7 @@ public final class PresenterTest {
.outputValueString();
assertEquals(expectedOutputString, actualOutputString);
}
-
+
/**
* Tests that the Presenter correctly applies search rules.
*
@@ -293,15 +294,15 @@ public final class PresenterTest {
// setup
final var viewBot = new ViewBot();
final var presenter = new Presenter(viewBot);
-
+
presenter.setSearchRule(searchRule);
presenter.setOneWayConversionEnabled(false);
-
+
presenter.database.clear();
presenter.database.addUnit("metre", Metric.METRE);
presenter.database.addUnit("inch", BritishImperial.Length.INCH);
presenter.updateView();
-
+
// create expected output based on rule
final Set<String> expectedOutput = new HashSet<>();
expectedOutput.addAll(searchRule
@@ -309,11 +310,11 @@ public final class PresenterTest {
expectedOutput.addAll(
searchRule.apply(Map.entry("metre", Metric.METRE)).keySet());
final Set<String> actualOutput = viewBot.getFromUnitNames();
-
+
// test output
assertEquals(expectedOutput, actualOutput);
}
-
+
/**
* Tests that settings can be saved to and loaded from a file.
*
@@ -325,20 +326,21 @@ public final class PresenterTest {
// setup
final var viewBot = new ViewBot();
final var presenter = new Presenter(viewBot);
-
+
// set and save custom settings
presenter.setOneWayConversionEnabled(true);
presenter.setShowDuplicates(true);
presenter.setNumberDisplayRule(StandardDisplayRules.fixedPrecision(11));
presenter.setPrefixRepetitionRule(
DefaultPrefixRepetitionRule.COMPLEX_REPETITION);
- presenter.saveSettings(TEST_SETTINGS);
-
+ assumeTrue(presenter.writeSettings(TEST_SETTINGS),
+ "Could not write to settings file.");
+
// overwrite custom settings
presenter.setOneWayConversionEnabled(false);
presenter.setShowDuplicates(false);
presenter.setNumberDisplayRule(StandardDisplayRules.uncertaintyBased());
-
+
// load settings & test that they're the same
presenter.loadSettings(TEST_SETTINGS);
assertTrue(presenter.oneWayConversionEnabled());
@@ -346,7 +348,7 @@ public final class PresenterTest {
assertEquals(StandardDisplayRules.fixedPrecision(11),
presenter.getNumberDisplayRule());
}
-
+
/**
* Ensures the Presenter generates the correct data upon a unit-viewing.
*
@@ -359,12 +361,12 @@ public final class PresenterTest {
final var viewBot = new ViewBot();
final var presenter = new Presenter(viewBot);
viewBot.setViewableUnitNames(names(testUnits));
-
+
// view unit
viewBot.setViewedUnitName("metre");
presenter.unitNameSelected(); // just in case this isn't triggered
// automatically
-
+
// get correct values
final var expectedNameSymbol = presenter.database.getUnit("metre")
.getNameSymbol();
@@ -372,7 +374,7 @@ public final class PresenterTest {
final var expectedDimensionName = presenter
.getDimensionName(Metric.METRE.getDimension());
final var expectedUnitType = UnitType.METRIC;
-
+
// test for correctness
final var viewRecord = viewBot.unitViewList().get(0);
assertEquals(expectedNameSymbol, viewRecord.getNameSymbol());
@@ -380,7 +382,7 @@ public final class PresenterTest {
assertEquals(expectedDimensionName, viewRecord.dimensionName());
assertEquals(expectedUnitType, viewRecord.unitType());
}
-
+
/**
* Test for {@link Presenter#updateView()}
*
@@ -394,7 +396,7 @@ public final class PresenterTest {
final Presenter presenter = new Presenter(viewBot);
presenter.setOneWayConversionEnabled(false);
presenter.setSearchRule(PrefixSearchRule.NO_PREFIXES);
-
+
// override default database units
presenter.database.clear();
for (final Unit unit : testUnits) {
@@ -404,18 +406,18 @@ public final class PresenterTest {
presenter.database.addDimension(
dimension.getPrimaryName().orElseThrow(), dimension);
}
-
+
// set from and to units
viewBot.setFromUnitNames(names(testUnits));
viewBot.setToUnitNames(names(testUnits));
viewBot.setDimensionNames(names(testDimensions));
viewBot.setSelectedDimensionName(Metric.Dimensions.LENGTH.getName());
-
+
// filter to length units only, then get the filtered sets of units
presenter.updateView();
final Set<String> fromUnits = viewBot.getFromUnitNames();
final Set<String> toUnits = viewBot.getToUnitNames();
-
+
// test that fromUnits/toUnits is [METRE, KILOMETRE]
assertEquals(Set.of("metre", "kilometre"), fromUnits);
assertEquals(Set.of("metre", "kilometre"), toUnits);