feature: #2151 Feature/mvi pattern (#2177)

* #2151 add module and pom.xml

* #2151 add Calculator Actions

* #2151 add remaining mvi pattern classes (actions already implemented)

* #2151 add Main and unit tests

* add README.md and class diagrams

* #2151 add module and pom.xml

* #2151 add Calculator Actions

* #2151 add remaining mvi pattern classes (actions already implemented)

* #2151 add Main and unit tests

* add README.md and class diagrams

* fixes for lint errors

* #2151 add module and pom.xml

* #2151 add Calculator Actions

* #2151 add remaining mvi pattern classes (actions already implemented)

* #2151 add Main and unit tests

* add README.md and class diagrams

* fixes for lint errors

* use Lombok @Data decorator and decouple View from ViewModel

* add comments and documentation

* fix checkstyle, the smart switch syntax was breaking checkstyle, so I had to change it back
This commit is contained in:
JanFidor
2023-01-21 10:45:07 +01:00
committed by GitHub
parent 6b0a90ee61
commit fb86ca1156
19 changed files with 943 additions and 0 deletions
@@ -0,0 +1,40 @@
/*
* This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt).
*
* The MIT License
* Copyright © 2014-2022 Ilkka Seppälä
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.iluwatar.model.view.intent;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
/**
* Application test
*/
class AppTest {
@Test
void shouldExecuteApplicationWithoutException() {
assertDoesNotThrow(() -> App.main(new String[]{}));
}
}
@@ -0,0 +1,83 @@
package com.iluwatar.model.view.intent;
import com.iluwatar.model.view.intent.actions.*;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
public class CalculatorViewModelTest {
private CalculatorModel modelAfterExecutingActions(List<CalculatorAction> actions) {
CalculatorViewModel viewModel = new CalculatorViewModel();
for (CalculatorAction action : actions) {
viewModel.handleAction(action);
}
return viewModel.getCalculatorModel();
}
@Test
void testSetup() {
CalculatorModel model = modelAfterExecutingActions(new ArrayList<>());
assert model.getVariable() == 0 && model.getOutput() == 0;
}
@Test
void testSetVariable() {
List<CalculatorAction> actions = List.of(
new SetVariableCalculatorAction(10.0)
);
CalculatorModel model = modelAfterExecutingActions(actions);
assert model.getVariable() == 10.0 && model.getOutput() == 0;
}
@Test
void testAddition() {
List<CalculatorAction> actions = List.of(
new SetVariableCalculatorAction(2.0),
new AdditionCalculatorAction(),
new AdditionCalculatorAction(),
new SetVariableCalculatorAction(7.0),
new AdditionCalculatorAction()
);
CalculatorModel model = modelAfterExecutingActions(actions);
assert model.getVariable() == 7.0 && model.getOutput() == 11.0;
}
@Test
void testSubtraction() {
List<CalculatorAction> actions = List.of(
new SetVariableCalculatorAction(2.0),
new AdditionCalculatorAction(),
new AdditionCalculatorAction(),
new SubtractionCalculatorAction()
);
CalculatorModel model = modelAfterExecutingActions(actions);
assert model.getVariable() == 2.0 && model.getOutput() == 2.0;
}
@Test
void testMultiplication() {
List<CalculatorAction> actions = List.of(
new SetVariableCalculatorAction(2.0),
new AdditionCalculatorAction(),
new AdditionCalculatorAction(),
new MultiplicationCalculatorAction()
);
CalculatorModel model = modelAfterExecutingActions(actions);
assert model.getVariable() == 2.0 && model.getOutput() == 8.0;
}
@Test
void testDivision() {
List<CalculatorAction> actions = List.of(
new SetVariableCalculatorAction(2.0),
new AdditionCalculatorAction(),
new AdditionCalculatorAction(),
new SetVariableCalculatorAction(2.0),
new DivisionCalculatorAction()
);
CalculatorModel model = modelAfterExecutingActions(actions);
assert model.getVariable() == 2.0 && model.getOutput() == 2.0;
}
}