From f1feb3f6a0c012992ad9970b78cf3801cd81f74c Mon Sep 17 00:00:00 2001 From: EdisonE3 <52118917+EdisonE3@users.noreply.github.com> Date: Tue, 11 May 2021 21:46:11 +0800 Subject: [PATCH] feature: Implement Presentation Model Pattern (#1710) * #415 initial all componets * #415 add src and tests * #415 add diagram * #415 add README * #415 add README * #415 change pom.xml * #415 change pom.xml * #415 change pom.xml * #415 update pom.xml * #415 change some code smell * #415 change some code smell * #415 update test * #415 add javadoc * #415 remove author tag * #415 add lombok @AllArgsConstructor * #415 fix code converge * #415 fix code converge * #415 fix code converge * #415 add javadoc * #415 fix code smell * #415 fix code smell * #415 add log information * #415 remove unused import * #415 add javadoc and more test * #415 modify test * #415 fix checkstyle * #415 remove useless code and add more javadoc and test. * #415 add package-info.java. * #415 add package-info.java. * #415 add more test. * #415 fix code smell. * #415 fix code smell and increase code coverage. * #415 fix code smell. * #415 update README.md * #415 update README.md * #415 make this demo better * #415 satisfy checkstyle * #415 make some field static. * #415 make some fields static. * #415 rename some fields static. * Delete package-info.java Co-authored-by: Subhrodip Mohanta --- pom.xml | 1 + presentation/README.md | 193 ++++++++++++++++++ presentation/etc/presentation.urm.png | Bin 0 -> 123766 bytes presentation/etc/presentation.urm.puml | 59 ++++++ presentation/etc/result.png | Bin 0 -> 13254 bytes presentation/pom.xml | 63 ++++++ .../java/com/iluwatar/presentation/Album.java | 31 +++ .../java/com/iluwatar/presentation/App.java | 27 +++ .../presentation/DisplayedAlbums.java | 46 +++++ .../presentation/PresentationModel.java | 163 +++++++++++++++ .../java/com/iluwatar/presentation/View.java | 167 +++++++++++++++ .../com/iluwatar/presentation/AlbumTest.java | 37 ++++ .../com/iluwatar/presentation/AppTest.java | 42 ++++ .../presentation/DisplayedAlbumsTest.java | 22 ++ .../presentation/PresentationTest.java | 117 +++++++++++ .../com/iluwatar/presentation/ViewTest.java | 55 +++++ 16 files changed, 1023 insertions(+) create mode 100644 presentation/README.md create mode 100644 presentation/etc/presentation.urm.png create mode 100644 presentation/etc/presentation.urm.puml create mode 100644 presentation/etc/result.png create mode 100644 presentation/pom.xml create mode 100644 presentation/src/main/java/com/iluwatar/presentation/Album.java create mode 100644 presentation/src/main/java/com/iluwatar/presentation/App.java create mode 100644 presentation/src/main/java/com/iluwatar/presentation/DisplayedAlbums.java create mode 100644 presentation/src/main/java/com/iluwatar/presentation/PresentationModel.java create mode 100644 presentation/src/main/java/com/iluwatar/presentation/View.java create mode 100644 presentation/src/test/java/com/iluwatar/presentation/AlbumTest.java create mode 100644 presentation/src/test/java/com/iluwatar/presentation/AppTest.java create mode 100644 presentation/src/test/java/com/iluwatar/presentation/DisplayedAlbumsTest.java create mode 100644 presentation/src/test/java/com/iluwatar/presentation/PresentationTest.java create mode 100644 presentation/src/test/java/com/iluwatar/presentation/ViewTest.java diff --git a/pom.xml b/pom.xml index b9da466ed..9cd6b6adb 100644 --- a/pom.xml +++ b/pom.xml @@ -225,6 +225,7 @@ active-object model-view-viewmodel composite-entity + presentation diff --git a/presentation/README.md b/presentation/README.md new file mode 100644 index 000000000..ac0ee31f7 --- /dev/null +++ b/presentation/README.md @@ -0,0 +1,193 @@ +--- +layout: pattern +title: Presentation +folder: presentation +permalink: /patterns/presentation/ +categories: Behavioral +tags: + - Decoupling +--- +## Also known as +Application Model + +## Intent +Presentation Model pulls the state and behavior of the view out into a model class that is part of the presentation. + +## Explanation + +Real world example + +> When we need to write a program with GUI, there is no need for us to put all presentation behavior in the view class. Because it will test become harder. So we can use Presentation Model Pattern to separate the behavior and view. The view only need to load the data and states from other class and show these data on the screen according to the states. + +In plain words + +> a pattern that used to divide the presentation and controlling. + +Code Example + +Class `view` is the GUI of albums. Methods `saveToPMod` and `loadFromPMod` are used to achieve synchronization. + +```java +public class View { + /** + * the model that controls this view. + */ + private final PresentationModel model; + + private TextField txtTitle; + private TextField txtArtist; + private JCheckBox chkClassical; + private TextField txtComposer; + private JList albumList; + private JButton apply; + private JButton cancel; + + public View() { + model = new PresentationModel(PresentationModel.albumDataSet()); + } + + /** + * save the data to PresentationModel. + */ + public void saveToPMod() { + LOGGER.info("Save data to PresentationModel"); + model.setArtist(txtArtist.getText()); + model.setTitle(txtTitle.getText()); + model.setIsClassical(chkClassical.isSelected()); + model.setComposer(txtComposer.getText()); + } + + /** + * load the data from PresentationModel. + */ + public void loadFromPMod() { + LOGGER.info("Load data from PresentationModel"); + txtArtist.setText(model.getArtist()); + txtTitle.setText(model.getTitle()); + chkClassical.setSelected(model.getIsClassical()); + txtComposer.setEditable(model.getIsClassical()); + txtComposer.setText(model.getComposer()); + } + + public void createView() { + // the detail of GUI information like size, listenser and so on. + } +} +``` + +Class `Album` is to store information of a album. + +```java +public class Album { + + private String title; + private String artist; + private boolean isClassical; + /** + * only when the album is classical, + * composer can have content. + */ + private String composer; +} + +``` + +Class `DisplatedAlbums` is store the information of all the albums that will be displayed on GUI. + +```java +public class DisplayedAlbums { + private final List albums; + + public DisplayedAlbums() { + this.albums = new ArrayList<>(); + } + + public void addAlbums(final String title, + final String artist, final boolean isClassical, + final String composer) { + if (isClassical) { + this.albums.add(new Album(title, artist, true, composer)); + } else { + this.albums.add(new Album(title, artist, false, "")); + } + } +} +``` + + Class `PresentationMod` is used to control all the action of GUI. + +```java +public class PresentationModel { + private final DisplayedAlbums data; + + private int selectedAlbumNumber; + private Album selectedAlbum; + + public PresentationModel(final DisplayedAlbums dataOfAlbums) { + this.data = dataOfAlbums; + this.selectedAlbumNumber = 1; + this.selectedAlbum = this.data.getAlbums().get(0); + } + + /** + * Changes the value of selectedAlbumNumber. + * + * @param albumNumber the number of album which is shown on the view. + */ + public void setSelectedAlbumNumber(final int albumNumber) { + LOGGER.info("Change select number from {} to {}", + this.selectedAlbumNumber, albumNumber); + this.selectedAlbumNumber = albumNumber; + this.selectedAlbum = data.getAlbums().get(this.selectedAlbumNumber - 1); + } + + public String getTitle() { + return selectedAlbum.getTitle(); + } + // other get methods are like this, which are used to get information of selected album. + + public void setTitle(final String value) { + LOGGER.info("Change album title from {} to {}", + selectedAlbum.getTitle(), value); + selectedAlbum.setTitle(value); + } + // other set methods are like this, which are used to get information of selected album. + + /** + * Gets a list of albums. + * + * @return the names of all the albums. + */ + public String[] getAlbumList() { + var result = new String[data.getAlbums().size()]; + for (var i = 0; i < result.length; i++) { + result[i] = data.getAlbums().get(i).getTitle(); + } + return result; + } +} +``` + +We can run class `App` to start this demo. the checkbox is the album classical; the first text field is the name of album artist; the second is the name of album title; the last one is the name of the composer: + +![](./etc/result.png) + + +## Class diagram +![](./etc/presentation.urm.png "presentation model") + +## Applicability +Use the Presentation Model Pattern when + +* Testing a presentation through a GUI window is often awkward, and in some cases impossible. +* Do not determine which GUI will be used. + +## Related patterns + +- [Supervising Controller](https://martinfowler.com/eaaDev/SupervisingPresenter.html) +- [Passive View](https://martinfowler.com/eaaDev/PassiveScreen.html) + +## Credits + +* [Presentation Model Patterns](https://martinfowler.com/eaaDev/PresentationModel.html) + diff --git a/presentation/etc/presentation.urm.png b/presentation/etc/presentation.urm.png new file mode 100644 index 0000000000000000000000000000000000000000..46690641cb8290cbe19ce5d6f649d53237d3e147 GIT binary patch literal 123766 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 + + albumsCache : List + + DsAlbum() + + acceptChanges() + + addAlbums(rowId : int, title : String, artist : String, isClassical : boolean, composer : String) + } + class PresentationMod { + - data : DsAlbum + - selectedAlbum : Album + - selectedAlbumNumber : int + + PresentationMod(data : DsAlbum) + + albumDataSet() : DsAlbum {static} + + getAlbumList() : String[] + + getArtist() : String + + getComposer() : String + + getIsClassical() : boolean + + getTitle() : String + + setArtist(value : String) + + setComposer(value : String) + + setIsClassical(value : boolean) + + setSelectedAlbumNumber(selectedAlbumNumber : int) + + setTitle(value : String) + } + class View { + ~ albumList : JList + ~ apply : JButton + ~ cancel : JButton + ~ chkClassical : JCheckBox + ~ model : PresentationMod + ~ notLoadView : boolean + ~ txtArtist : TextField + ~ txtComposer : TextField + ~ txtTitle : TextField + + View() + + createView() + + loadFromPMod() + + saveToPMod() + } +} +PresentationMod --> "-selectedAlbum" Album +View --> "-model" PresentationMod +DsAlbum --> "-albums" Album +PresentationMod --> "-data" DsAlbum +@enduml \ No newline at end of file diff --git a/presentation/etc/result.png b/presentation/etc/result.png new file mode 100644 index 0000000000000000000000000000000000000000..6b104968f302fd52aeb40108fa24ee3a919958f3 GIT binary patch literal 13254 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 + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.25.0-SNAPSHOT + + presentation + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + + com.iluwatar.presentation.App + + + + + + + + + diff --git a/presentation/src/main/java/com/iluwatar/presentation/Album.java b/presentation/src/main/java/com/iluwatar/presentation/Album.java new file mode 100644 index 000000000..742e49b7b --- /dev/null +++ b/presentation/src/main/java/com/iluwatar/presentation/Album.java @@ -0,0 +1,31 @@ +package com.iluwatar.presentation; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +/** + *A class used to store the information of album. + */ +@Setter +@Getter +@AllArgsConstructor +public class Album { + /** + * the title of the album. + */ + private String title; + /** + * the artist name of the album. + */ + private String artist; + /** + * is the album classical, true or false. + */ + private boolean isClassical; + /** + * only when the album is classical, + * composer can have content. + */ + private String composer; +} diff --git a/presentation/src/main/java/com/iluwatar/presentation/App.java b/presentation/src/main/java/com/iluwatar/presentation/App.java new file mode 100644 index 000000000..dc22e6bb2 --- /dev/null +++ b/presentation/src/main/java/com/iluwatar/presentation/App.java @@ -0,0 +1,27 @@ +package com.iluwatar.presentation; + +import lombok.extern.slf4j.Slf4j; + +/** + * The Presentation model pattern is used to divide the presentation and controlling. + * This demo is a used to information of some albums with GUI. + */ +@Slf4j +public final class App { + /** + * the constructor. + */ + private App() { + } + + /** + * main method. + * + * @param args args + */ + public static void main(final String[] args) { + var view = new View(); + view.createView(); + } +} + diff --git a/presentation/src/main/java/com/iluwatar/presentation/DisplayedAlbums.java b/presentation/src/main/java/com/iluwatar/presentation/DisplayedAlbums.java new file mode 100644 index 000000000..6d8b23906 --- /dev/null +++ b/presentation/src/main/java/com/iluwatar/presentation/DisplayedAlbums.java @@ -0,0 +1,46 @@ +package com.iluwatar.presentation; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * a class used to deal with albums. + * + */ +@Slf4j +@Getter +public class DisplayedAlbums { + /** + * albums a list of albums. + */ + private final List albums; + + /** + * a constructor method. + */ + public DisplayedAlbums() { + this.albums = new ArrayList<>(); + } + + /** + * a method used to add a new album to album list. + * + * @param title the title of the album. + * @param artist the artist name of the album. + * @param isClassical is the album classical, true or false. + * @param composer only when the album is classical, + * composer can have content. + */ + public void addAlbums(final String title, + final String artist, final boolean isClassical, + final String composer) { + if (isClassical) { + this.albums.add(new Album(title, artist, true, composer)); + } else { + this.albums.add(new Album(title, artist, false, "")); + } + } +} diff --git a/presentation/src/main/java/com/iluwatar/presentation/PresentationModel.java b/presentation/src/main/java/com/iluwatar/presentation/PresentationModel.java new file mode 100644 index 000000000..b5044cbc3 --- /dev/null +++ b/presentation/src/main/java/com/iluwatar/presentation/PresentationModel.java @@ -0,0 +1,163 @@ +package com.iluwatar.presentation; + +import lombok.extern.slf4j.Slf4j; + +/** + * The class between view and albums, it is used to control the data. + */ +@Slf4j +public class PresentationModel { + /** + * the data of all albums that will be shown. + */ + private final DisplayedAlbums data; + /** + * the no of selected album. + */ + private int selectedAlbumNumber; + /** + * the selected album. + */ + private Album selectedAlbum; + + /** + * Generates a set of data for testing. + * + * @return a instance of DsAlbum which store the data. + */ + public static DisplayedAlbums albumDataSet() { + var titleList = new String[]{"HQ", "The Rough Dancer and Cyclical Night", + "The Black Light", "Symphony No.5"}; + var artistList = new String[]{"Roy Harper", "Astor Piazzola", + "The Black Light", "CBSO"}; + var isClassicalList = new boolean[]{false, false, false, true}; + var composerList = new String[]{null, null, null, "Sibelius"}; + + var result = new DisplayedAlbums(); + for (var i = 1; i <= titleList.length; i++) { + result.addAlbums(titleList[i - 1], artistList[i - 1], + isClassicalList[i - 1], composerList[i - 1]); + } + return result; + } + + /** + * constructor method. + * + * @param dataOfAlbums the data of all the albums + */ + public PresentationModel(final DisplayedAlbums dataOfAlbums) { + this.data = dataOfAlbums; + this.selectedAlbumNumber = 1; + this.selectedAlbum = this.data.getAlbums().get(0); + } + + /** + * Changes the value of selectedAlbumNumber. + * + * @param albumNumber the number of album which is shown on the view. + */ + public void setSelectedAlbumNumber(final int albumNumber) { + LOGGER.info("Change select number from {} to {}", + this.selectedAlbumNumber, albumNumber); + this.selectedAlbumNumber = albumNumber; + this.selectedAlbum = data.getAlbums().get(this.selectedAlbumNumber - 1); + } + + /** + * get the title of selected album. + * + * @return the tile of selected album. + */ + public String getTitle() { + return selectedAlbum.getTitle(); + } + + /** + * set the title of selected album. + * + * @param value the title which user want to user. + */ + public void setTitle(final String value) { + LOGGER.info("Change album title from {} to {}", + selectedAlbum.getTitle(), value); + selectedAlbum.setTitle(value); + } + + /** + * get the artist of selected album. + * + * @return the artist of selected album. + */ + public String getArtist() { + return selectedAlbum.getArtist(); + } + + /** + * set the name of artist. + * + * @param value the name want artist to be. + */ + public void setArtist(final String value) { + LOGGER.info("Change album artist from {} to {}", + selectedAlbum.getArtist(), value); + selectedAlbum.setArtist(value); + } + + /** + * Gets a boolean value which represents whether the album is classical. + * + * @return is the album classical. + */ + public boolean getIsClassical() { + return selectedAlbum.isClassical(); + } + + /** + * set the isClassical of album. + * + * @param value is the album classical. + */ + public void setIsClassical(final boolean value) { + LOGGER.info("Change album isClassical from {} to {}", + selectedAlbum.isClassical(), value); + selectedAlbum.setClassical(value); + } + + /** + * get is classical of the selected album. + * + * @return is the album classical. + */ + public String getComposer() { + return selectedAlbum.isClassical() ? selectedAlbum.getComposer() : ""; + } + + /** + * Sets the name of composer when the album is classical. + * + * @param value the name of composer. + */ + public void setComposer(final String value) { + if (selectedAlbum.isClassical()) { + LOGGER.info("Change album composer from {} to {}", + selectedAlbum.getComposer(), value); + selectedAlbum.setComposer(value); + } else { + LOGGER.info("Composer can not be changed"); + } + } + + /** + * Gets a list of albums. + * + * @return the names of all the albums. + */ + public String[] getAlbumList() { + var result = new String[data.getAlbums().size()]; + for (var i = 0; i < result.length; i++) { + result[i] = data.getAlbums().get(i).getTitle(); + } + return result; + } +} diff --git a/presentation/src/main/java/com/iluwatar/presentation/View.java b/presentation/src/main/java/com/iluwatar/presentation/View.java new file mode 100644 index 000000000..92a1c62f4 --- /dev/null +++ b/presentation/src/main/java/com/iluwatar/presentation/View.java @@ -0,0 +1,167 @@ +package com.iluwatar.presentation; + +import java.awt.TextField; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JList; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * Generates the GUI of albums. + */ +@Getter +@Slf4j +public class View { + /** + * the model that controls this view. + */ + private final PresentationModel model; + + /** + * the filed to show and modify title. + */ + private TextField txtTitle; + /** + * the filed to show and modify the name of artist. + */ + private TextField txtArtist; + /** + * the checkbox for is classical. + */ + private JCheckBox chkClassical; + /** + * the filed to show and modify composer. + */ + private TextField txtComposer; + /** + * a list to show all the name of album. + */ + private JList albumList; + /** + * a button to apply of all the change. + */ + private JButton apply; + /** + * roll back the change. + */ + private JButton cancel; + + /** + * the value of the text field size. + */ + static final int WIDTH_TXT = 200; + static final int HEIGHT_TXT = 50; + + /** + * the value of the GUI size and location. + */ + static final int LOCATION_X = 200; + static final int LOCATION_Y = 200; + static final int WIDTH = 500; + static final int HEIGHT = 300; + + /** + * constructor method. + */ + public View() { + model = new PresentationModel(PresentationModel.albumDataSet()); + } + + /** + * save the data to PresentationModel. + */ + public void saveToPMod() { + LOGGER.info("Save data to PresentationModel"); + model.setArtist(txtArtist.getText()); + model.setTitle(txtTitle.getText()); + model.setIsClassical(chkClassical.isSelected()); + model.setComposer(txtComposer.getText()); + } + + /** + * load the data from PresentationModel. + */ + public void loadFromPMod() { + LOGGER.info("Load data from PresentationModel"); + txtArtist.setText(model.getArtist()); + txtTitle.setText(model.getTitle()); + chkClassical.setSelected(model.getIsClassical()); + txtComposer.setEditable(model.getIsClassical()); + txtComposer.setText(model.getComposer()); + } + + /** + * initialize the GUI. + */ + public void createView() { + var frame = new JFrame("Album"); + var b1 = Box.createHorizontalBox(); + + frame.add(b1); + albumList = new JList<>(model.getAlbumList()); + albumList.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(final MouseEvent e) { + model.setSelectedAlbumNumber(albumList.getSelectedIndex() + 1); + loadFromPMod(); + } + }); + b1.add(albumList); + + var b2 = Box.createVerticalBox(); + b1.add(b2); + + txtArtist = new TextField(); + txtTitle = new TextField(); + + txtArtist.setSize(WIDTH_TXT, HEIGHT_TXT); + txtTitle.setSize(WIDTH_TXT, HEIGHT_TXT); + + chkClassical = new JCheckBox(); + txtComposer = new TextField(); + chkClassical.addActionListener(itemEvent -> { + txtComposer.setEditable(chkClassical.isSelected()); + if (!chkClassical.isSelected()) { + txtComposer.setText(""); + } + }); + txtComposer.setSize(WIDTH_TXT, HEIGHT_TXT); + txtComposer.setEditable(model.getIsClassical()); + + apply = new JButton("Apply"); + apply.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(final MouseEvent e) { + saveToPMod(); + loadFromPMod(); + } + }); + cancel = new JButton("Cancel"); + cancel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(final MouseEvent e) { + loadFromPMod(); + } + }); + + b2.add(txtArtist); + b2.add(txtTitle); + + b2.add(chkClassical); + b2.add(txtComposer); + + b2.add(apply); + b2.add(cancel); + + frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + frame.setBounds(LOCATION_X, LOCATION_Y, WIDTH, HEIGHT); + frame.setVisible(true); + } + +} diff --git a/presentation/src/test/java/com/iluwatar/presentation/AlbumTest.java b/presentation/src/test/java/com/iluwatar/presentation/AlbumTest.java new file mode 100644 index 000000000..251a45bd4 --- /dev/null +++ b/presentation/src/test/java/com/iluwatar/presentation/AlbumTest.java @@ -0,0 +1,37 @@ +package com.iluwatar.presentation; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class AlbumTest { + @Test + void testSetTitle(){ + Album album = new Album("a", "b", false, ""); + album.setTitle("b"); + assertEquals("b", album.getTitle()); + } + + @Test + void testSetArtist(){ + Album album = new Album("a", "b", false, ""); + album.setArtist("c"); + assertEquals("c", album.getArtist()); + } + + @Test + void testSetClassical(){ + Album album = new Album("a", "b", false, ""); + album.setClassical(true); + assertTrue(album.isClassical()); + } + + @Test + void testSetComposer(){ + Album album = new Album("a", "b", false, ""); + album.setClassical(true); + album.setComposer("w"); + assertEquals("w", album.getComposer()); + } +} diff --git a/presentation/src/test/java/com/iluwatar/presentation/AppTest.java b/presentation/src/test/java/com/iluwatar/presentation/AppTest.java new file mode 100644 index 000000000..b29c0f3a3 --- /dev/null +++ b/presentation/src/test/java/com/iluwatar/presentation/AppTest.java @@ -0,0 +1,42 @@ +/* + * The MIT License + * Copyright © 2014-2021 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.presentation; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +/** + * Issue: Add at least one assertion to this test case. + * + * Solution: Inserted assertion to check whether the execution of the main method in {@link App} + * throws an exception. + */ +class AppTest { + + @Test + void shouldExecuteApplicationWithoutException() { + assertDoesNotThrow(() -> App.main(new String[]{})); + } +} diff --git a/presentation/src/test/java/com/iluwatar/presentation/DisplayedAlbumsTest.java b/presentation/src/test/java/com/iluwatar/presentation/DisplayedAlbumsTest.java new file mode 100644 index 000000000..7b850c01d --- /dev/null +++ b/presentation/src/test/java/com/iluwatar/presentation/DisplayedAlbumsTest.java @@ -0,0 +1,22 @@ +package com.iluwatar.presentation; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DisplayedAlbumsTest { + @Test + void testAdd_true(){ + DisplayedAlbums displayedAlbums = new DisplayedAlbums(); + displayedAlbums.addAlbums("title", "artist", true, "composer"); + assertEquals("composer", displayedAlbums.getAlbums().get(0).getComposer()); + + } + + @Test + void testAdd_false(){ + DisplayedAlbums displayedAlbums = new DisplayedAlbums(); + displayedAlbums.addAlbums("title", "artist", false, "composer"); + assertEquals("", displayedAlbums.getAlbums().get(0).getComposer()); + } +} diff --git a/presentation/src/test/java/com/iluwatar/presentation/PresentationTest.java b/presentation/src/test/java/com/iluwatar/presentation/PresentationTest.java new file mode 100644 index 000000000..52a5e31ed --- /dev/null +++ b/presentation/src/test/java/com/iluwatar/presentation/PresentationTest.java @@ -0,0 +1,117 @@ +/* + * The MIT License + * Copyright © 2014-2021 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.presentation; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PresentationTest { + String[] albumList = {"HQ", "The Rough Dancer and Cyclical Night", "The Black Light", "Symphony No.5"}; + + @Test + void testCreateAlbumList() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String[] list = model.getAlbumList(); + assertEquals(Arrays.toString(albumList), Arrays.toString(list)); + } + + @Test + void testSetSelectedAlbumNumber_1() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + final int selectId = 2; + model.setSelectedAlbumNumber(selectId); + assertEquals(albumList[selectId - 1], model.getTitle()); + } + + @Test + void testSetSelectedAlbumNumber_2() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + final int selectId = 4; + model.setSelectedAlbumNumber(selectId); + assertEquals(albumList[selectId - 1], model.getTitle()); + } + + @Test + void testSetTitle_1() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String testTitle = "TestTile"; + model.setTitle(testTitle); + assertEquals(testTitle, model.getTitle()); + } + + @Test + void testSetTitle_2() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String testTitle = ""; + model.setTitle(testTitle); + assertEquals(testTitle, model.getTitle()); + } + + @Test + void testSetArtist_1() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String testArtist = "TestArtist"; + model.setArtist(testArtist); + assertEquals(testArtist, model.getArtist()); + } + + @Test + void testSetArtist_2() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String testArtist = ""; + model.setArtist(testArtist); + assertEquals(testArtist, model.getArtist()); + } + + @Test + void testSetIsClassical() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + model.setIsClassical(true); + assertTrue(model.getIsClassical()); + } + + @Test + void testSetComposer_false() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String testComposer = "TestComposer"; + + model.setIsClassical(false); + model.setComposer(testComposer); + assertEquals("", model.getComposer()); + } + + @Test + void testSetComposer_true() { + PresentationModel model = new PresentationModel(PresentationModel.albumDataSet()); + String testComposer = "TestComposer"; + + model.setIsClassical(true); + model.setComposer(testComposer); + assertEquals(testComposer, model.getComposer()); + } +} diff --git a/presentation/src/test/java/com/iluwatar/presentation/ViewTest.java b/presentation/src/test/java/com/iluwatar/presentation/ViewTest.java new file mode 100644 index 000000000..c50a6b796 --- /dev/null +++ b/presentation/src/test/java/com/iluwatar/presentation/ViewTest.java @@ -0,0 +1,55 @@ +package com.iluwatar.presentation; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ViewTest { + String[] albumList = {"HQ", "The Rough Dancer and Cyclical Night", "The Black Light", "Symphony No.5"}; + + @Test + void testSave_setArtistAndTitle(){ + View view = new View(); + view.createView(); + String testTitle = "testTitle"; + String testArtist = "testArtist"; + view.getTxtArtist().setText(testArtist); + view.getTxtTitle().setText(testTitle); + view.saveToPMod(); + view.loadFromPMod(); + assertEquals(testTitle, view.getModel().getTitle()); + assertEquals(testArtist, view.getModel().getArtist()); + } + + @Test + void testSave_setClassicalAndComposer(){ + View view = new View(); + view.createView(); + boolean isClassical = true; + String testComposer = "testComposer"; + view.getChkClassical().setSelected(isClassical); + view.getTxtComposer().setText(testComposer); + view.saveToPMod(); + view.loadFromPMod(); + assertTrue(view.getModel().getIsClassical()); + assertEquals(testComposer, view.getModel().getComposer()); + } + + @Test + void testLoad_1(){ + View view = new View(); + view.createView(); + view.getModel().setSelectedAlbumNumber(2); + view.loadFromPMod(); + assertEquals(albumList[1], view.getModel().getTitle()); + } + + @Test + void testLoad_2(){ + View view = new View(); + view.createView(); + view.getModel().setSelectedAlbumNumber(4); + view.loadFromPMod(); + assertEquals(albumList[3], view.getModel().getTitle()); + } +}