From e42994251882208e2a2ad0ce5f318b4c90823991 Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Sat, 12 Feb 2022 14:23:30 -0500 Subject: Made some basic Presenter tests --- src/test/java/sevenUnitsGUI/PresenterTest.java | 135 +++++++++++++++++++++++++ src/test/java/sevenUnitsGUI/package-info.java | 23 +++++ 2 files changed, 158 insertions(+) create mode 100644 src/test/java/sevenUnitsGUI/PresenterTest.java create mode 100644 src/test/java/sevenUnitsGUI/package-info.java (limited to 'src/test') 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 . + */ +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 testUnits = List.of(Metric.METRE, Metric.KILOMETRE, + Metric.METRE_PER_SECOND, Metric.KILOMETRE_PER_HOUR); + List> 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 fromUnits = viewBot.getFromUnits(); + final List 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 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 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 . + */ +/** + * Tests for the new 7Units GUI + * + * @author Adrien Hopkins + * @since 2022-01-29 + */ +package sevenUnitsGUI; \ No newline at end of file -- cgit v1.2.3