/** * 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 java.util.Set; 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 { Set testUnits = Set.of(Metric.METRE, Metric.KILOMETRE, Metric.METRE_PER_SECOND, Metric.KILOMETRE_PER_HOUR); Set> testDimensions = Set.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.iterator().next())); // filter to length units only, then get the filtered sets of units presenter.applyDimensionFilter(); final Set fromUnits = viewBot.getFromUnits(); final Set 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)); } }