summaryrefslogtreecommitdiff
path: root/src/test/java/sevenUnitsGUI
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2022-02-12 14:23:30 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2022-02-12 14:23:30 -0500
commite42994251882208e2a2ad0ce5f318b4c90823991 (patch)
tree806801b65c40d87128dcb24bc16475937ca5fa38 /src/test/java/sevenUnitsGUI
parent47b71bb5170fc2c3e1e052452864890826e6848d (diff)
Made some basic Presenter tests
Diffstat (limited to 'src/test/java/sevenUnitsGUI')
-rw-r--r--src/test/java/sevenUnitsGUI/PresenterTest.java135
-rw-r--r--src/test/java/sevenUnitsGUI/package-info.java23
2 files changed, 158 insertions, 0 deletions
diff --git a/src/test/java/sevenUnitsGUI/PresenterTest.java b/src/test/java/sevenUnitsGUI/PresenterTest.java
new file mode 100644
index 0000000..675e3ab
--- /dev/null
+++ b/src/test/java/sevenUnitsGUI/PresenterTest.java
@@ -0,0 +1,135 @@
+/**
+ * Copyright (C) 2022 Adrien Hopkins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package sevenUnitsGUI;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.junit.jupiter.api.Test;
+
+import sevenUnits.unit.BaseDimension;
+import sevenUnits.unit.Metric;
+import sevenUnits.unit.NameSymbol;
+import sevenUnits.unit.Unit;
+import sevenUnits.utils.NamedObjectProduct;
+
+/**
+ * @author Adrien Hopkins
+ *
+ * @since 2022-02-10
+ */
+public final class PresenterTest {
+ List<Unit> testUnits = List.of(Metric.METRE, Metric.KILOMETRE,
+ Metric.METRE_PER_SECOND, Metric.KILOMETRE_PER_HOUR);
+ List<NamedObjectProduct<BaseDimension>> testDimensions = List.of(
+ Metric.Dimensions.LENGTH.withName(NameSymbol.ofName("Length")),
+ Metric.Dimensions.VELOCITY.withName(NameSymbol.ofName("Velocity")));
+
+ /**
+ * Test for {@link Presenter#applyDimensionFilter()}
+ *
+ * @since 2022-02-12
+ */
+ @Test
+ void testApplyDimensionFilter() {
+ // setup
+ final ViewBot viewBot = new ViewBot();
+ final Presenter presenter = new Presenter(viewBot);
+
+ viewBot.setFromUnits(this.testUnits);
+ viewBot.setToUnits(this.testUnits);
+ viewBot.setDimensions(this.testDimensions);
+ viewBot.setSelectedDimension(Optional.of(this.testDimensions.get(0)));
+
+ // filter to length units only, then get the filtered sets of units
+ presenter.applyDimensionFilter();
+ final List<Unit> fromUnits = viewBot.getFromUnits();
+ final List<Unit> toUnits = viewBot.getToUnits();
+
+ // test that fromUnits/toUnits is [METRE, KILOMETRE]
+ // HOWEVER I don't care about the order so I'm testing it this way
+ assertEquals(2, fromUnits.size(),
+ "Invalid fromUnits (length != 2): " + fromUnits);
+ assertEquals(2, toUnits.size(),
+ "Invalid toUnits (length != 2): " + toUnits);
+ assertTrue(fromUnits.contains(Metric.METRE),
+ "Invaild fromUnits (METRE missing): " + fromUnits);
+ assertTrue(toUnits.contains(Metric.METRE),
+ "Invaild toUnits (METRE missing): " + toUnits);
+ assertTrue(fromUnits.contains(Metric.KILOMETRE),
+ "Invaild fromUnits (KILOMETRE missing): " + fromUnits);
+ assertTrue(toUnits.contains(Metric.KILOMETRE),
+ "Invaild toUnits (KILOMETRE missing): " + toUnits);
+ }
+
+ /**
+ * Test method for {@link Presenter#convertExpressions}
+ *
+ * @since 2022-02-12
+ */
+ @Test
+ void testConvertExpressions() {
+ // 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<String> outputs = viewBot.getExpressionConversionOutputs();
+ assertEquals("10000.0 m = 10.0 km", outputs.get(outputs.size() - 1));
+ }
+
+ /**
+ * Tests that unit-conversion Views can correctly convert units
+ *
+ * @since 2022-02-12
+ */
+ @Test
+ void testConvertUnits() {
+ // setup
+ final ViewBot viewBot = new ViewBot();
+ final Presenter presenter = new Presenter(viewBot);
+
+ viewBot.setFromUnits(this.testUnits);
+ viewBot.setToUnits(this.testUnits);
+ viewBot.setFromSelection(Optional.of(Metric.METRE));
+ viewBot.setToSelection(Optional.of(Metric.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
+ * calls the unit conversion system
+ */
+ final String expected = String
+ .valueOf(Metric.METRE.convertTo(Metric.KILOMETRE, 10000.0));
+
+ final List<String> outputs = viewBot.getUnitConversionOutputValues();
+ assertEquals(expected, outputs.get(outputs.size() - 1));
+ }
+}
diff --git a/src/test/java/sevenUnitsGUI/package-info.java b/src/test/java/sevenUnitsGUI/package-info.java
new file mode 100644
index 0000000..96bdbd9
--- /dev/null
+++ b/src/test/java/sevenUnitsGUI/package-info.java
@@ -0,0 +1,23 @@
+/**
+ * Copyright (C) 2022 Adrien Hopkins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+/**
+ * Tests for the new 7Units GUI
+ *
+ * @author Adrien Hopkins
+ * @since 2022-01-29
+ */
+package sevenUnitsGUI; \ No newline at end of file