diff options
author | Adrien Hopkins <ahopk127@my.yorku.ca> | 2022-02-12 14:23:30 -0500 |
---|---|---|
committer | Adrien Hopkins <ahopk127@my.yorku.ca> | 2022-02-12 14:23:30 -0500 |
commit | e42994251882208e2a2ad0ce5f318b4c90823991 (patch) | |
tree | 806801b65c40d87128dcb24bc16475937ca5fa38 /src/test/java/sevenUnitsGUI | |
parent | 47b71bb5170fc2c3e1e052452864890826e6848d (diff) |
Made some basic Presenter tests
Diffstat (limited to 'src/test/java/sevenUnitsGUI')
-rw-r--r-- | src/test/java/sevenUnitsGUI/PresenterTest.java | 135 | ||||
-rw-r--r-- | src/test/java/sevenUnitsGUI/package-info.java | 23 |
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 |