feature: Completed component design pattern implementation, testing and respective README (#2153)

* update the explanation in README.md

* #556 update initial files

* added README to component design pattern

* Rearrange the file

* Finalize the directory

* Add test sample

* Update the title for README.md

* Update the title for README.md

* Update the title for README.md

* Update the title for README.md

* Finish the component design pattern

* Updated comments and docstrings for component DP, added basic tests for App and GameObject java classes. Slight modifications to pom.xml to reflect the test suite introduction.

* updated comments/docstrings for all classes - wrote v1 of README.md for component design pattern.

This still requires the class diagram sketch.

* Update the UML and linked with the README.md

* Update the README.md

* Remove the additional update method and rearrange the file based on the CheckStyle plugin

* Changed the structure based on the code smells feedback from PR

* Documentation update - uml

* Documentation update - grammar

* Updated readme to reflect the use of the LOGGER instead of the system output prints.

* Correct the constant name

* Uses Lombok to remove getter/setter boilerplate

* Rename the constant name

* Branch out from master and finish all the review changes

* Correct the CheckStyle warning

Co-authored-by: Samman Palihapitiya Gamage <u7287889@anu.edu.au>
Co-authored-by: SammanPali <110753804+SammanPali@users.noreply.github.com>
This commit is contained in:
Qixiang Chen
2022-11-21 00:19:26 +11:00
committed by GitHub
parent 0a53b23c61
commit 1a14fa4f40
17 changed files with 636 additions and 0 deletions
@@ -0,0 +1,17 @@
package com.iluwatar.component;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
/**
* Tests App class : src/main/java/com/iluwatar/component/App.java
* General execution test of the application.
*/
class AppTest {
@Test
void shouldExecuteComponentWithoutException() {
assertDoesNotThrow(() -> App.main(new String[]{}));
}
}
@@ -0,0 +1,71 @@
package com.iluwatar.component;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.awt.event.KeyEvent;
import lombok.extern.slf4j.Slf4j;
/**
* Tests GameObject class.
* src/main/java/com/iluwatar/component/GameObject.java
*/
@Slf4j
class GameObjectTest {
GameObject playerTest;
GameObject npcTest;
@BeforeEach
public void initEach() {
//creates player & npc objects for testing
//note that velocity and coordinates are initialised to 0 in GameObject.java
playerTest = GameObject.createPlayer();
npcTest = GameObject.createNpc();
}
/**
* Tests the create methods - createPlayer() and createNPC().
*/
@Test
void objectTest(){
LOGGER.info("objectTest:");
assertEquals("player",playerTest.getName());
assertEquals("npc",npcTest.getName());
}
/**
* Tests the input component with varying key event inputs.
* Targets the player game object.
*/
@Test
void eventInputTest(){
LOGGER.info("eventInputTest:");
playerTest.update(KeyEvent.KEY_LOCATION_LEFT);
assertEquals(-1, playerTest.getVelocity());
assertEquals(-1, playerTest.getCoordinate());
playerTest.update(KeyEvent.KEY_LOCATION_RIGHT);
playerTest.update(KeyEvent.KEY_LOCATION_RIGHT);
assertEquals(1, playerTest.getVelocity());
assertEquals(0, playerTest.getCoordinate());
LOGGER.info(Integer.toString(playerTest.getCoordinate()));
LOGGER.info(Integer.toString(playerTest.getVelocity()));
GameObject p2 = GameObject.createPlayer();
p2.update(KeyEvent.KEY_LOCATION_LEFT);
//in the case of an unknown, object stats are set to default
p2.update(KeyEvent.KEY_LOCATION_UNKNOWN);
assertEquals(-1, p2.getVelocity());
}
/**
* Tests the demo component interface.
*/
@Test
void npcDemoTest(){
LOGGER.info("npcDemoTest:");
npcTest.demoUpdate();
assertEquals(2, npcTest.getVelocity());
assertEquals(2, npcTest.getCoordinate());
}
}