Browse Source

Merge branch 'feature-app' into development

development
Nick Stolbov 2 years ago
parent
commit
61e18b11db
  1. 144
      src/main/java/Application/App.java
  2. 10
      src/main/java/Application/Cli.java
  3. 10
      src/main/java/Main.java
  4. 53
      src/test/java/Application/AppTest.java

144
src/main/java/Application/App.java

@ -0,0 +1,144 @@
package Application;
import Game.Game;
import Game.Tictactoe;
import java.util.ArrayList;
import java.util.Scanner;
public class App {
private boolean isRunning = false;
private Cli cli;
private boolean inMenu = true;
private MenuManager menuManager;
private Game currentGame;
public App(Cli cli) {
this.cli = cli;
init();
}
private void init() {
menuManager = initMenuManager();
goToMenu();
}
public void start() {
isRunning = true;
while (isRunning) {
String input = cli.getScanner().nextLine();
if (input.equals("exit")) {
stop();
return;
} else {
if (inMenu) {
cli.clearConsole();
selectMenuItem(input);
} else {
if (input.equals("q")) {
goToMenu();
continue;
}
cli.clearConsole();
currentGame.update(input);
currentGame.print(cli);
}
}
}
}
public void stop() {
isRunning = false;
cli.getPrintStream().println("Stopping application...");
}
public boolean isRunning() {
return isRunning;
}
public Game getCurrentGame() {
return this.currentGame;
}
private MenuManager initMenuManager() {
MenuManager mm = new MenuManager();
ArrayList<Menu> gameList = new ArrayList<>();
gameList.add(new Menu("Tic Tac Toe"));
Menu gameMenu = new Menu("Games");
gameMenu.addMenu(new Menu("Back"));
for (Menu game : gameList) {
game.addMenu(new Menu("Back"));
gameMenu.addMenu(game);
}
mm.addMenu(gameMenu);
return mm;
}
protected void selectMenuItem(String input) {
Scanner scanner = new Scanner(input);
if (input.equals("q") && !menuManager.inRootMenu()) {
goToMenu();
}
if (scanner.hasNextInt()) {
int index = scanner.nextInt() - 1;
menuManager.select(index);
if (menuManager.getCurrentMenu() != null) {
switch (menuManager.getCurrentMenu().getName()) {
case "Back":
try {
menuManager.back();
menuManager.back();
} catch (Exception e) {
e.printStackTrace();
}
break;
case "Tic Tac Toe":
setCurrentGame(new Tictactoe());
return;
default:
break;
}
}
}
printMenu();
}
private void setCurrentGame(Game game) {
inMenu = false;
currentGame = game;
cli.clearConsole();
currentGame.print(cli);
}
private void goToMenu() {
inMenu = true;
currentGame = null;
while (!menuManager.inRootMenu()) {
try {
menuManager.back();
} catch (Exception e) {
e.printStackTrace();
}
}
printMenu();
}
private void printMenu() {
cli.clearConsole();
cli.getPrintStream().println("Welcome to the Cli Arcade Service!");
cli.getPrintStream().println("Type 'exit' at any time to stop the application");
cli.getPrintStream().println("Select a item by typing the number next to it");
cli.getPrintStream().print(menuManager.getFormattedMenuList());
}
}

10
src/main/java/Application/Cli.java

@ -6,6 +6,8 @@ import java.util.Scanner;
public class Cli {
private boolean isClearConsoleActive = true;
private PrintStream printStream;
private InputStream inputStream;
private Scanner scanner;
@ -14,6 +16,7 @@ public class Cli {
this.printStream = printStream;
this.inputStream = inputStream;
this.scanner = new Scanner(inputStream);
isClearConsoleActive = true;
}
public PrintStream getPrintStream() {
@ -25,6 +28,8 @@ public class Cli {
}
public void clearConsole(){
if(!isClearConsoleActive)
return;
try{
String operatingSystem = System.getProperty("os.name");//Check the current operating system
@ -42,4 +47,9 @@ public class Cli {
this.getPrintStream().println(e);
}
}
public void setClearConsoleActive(boolean clearConsoleActive) {
isClearConsoleActive = clearConsoleActive;
}
}

10
src/main/java/Main.java

@ -1,3 +1,4 @@
import Application.App;
import Application.Cli;
import Game.Tictactoe;
@ -6,13 +7,8 @@ import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Tictactoe ttt = new Tictactoe();
Cli cli = new Cli(System.out, System.in);
Scanner scan = cli.getScanner();
ttt.print(cli);
while (scan.hasNext()) {
ttt.update(scan.next());
ttt.print(cli);
}
App app = new App(cli);
app.start();
}
}

53
src/test/java/Application/AppTest.java

@ -0,0 +1,53 @@
package Application;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import static org.junit.jupiter.api.Assertions.*;
class AppTest {
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayInputStream inContent = new ByteArrayInputStream("1\n2\nexit\n".getBytes());
App app;
Cli cli;
@BeforeEach
void setUp() {
cli = new Cli(new PrintStream(outContent), inContent);
cli.setClearConsoleActive(false);
app = new App(cli);
}
@AfterEach
void tearDown() {
}
//inContent has the 'q' at the end, to terminated the loop and set isRunning to false
@Test
void stop() {
ByteArrayInputStream input = new ByteArrayInputStream("1\n2\nexit\n".getBytes());
cli = new Cli(new PrintStream(outContent), input);
cli.setClearConsoleActive(false);
app = new App(cli);
app.start();
assertFalse(app.isRunning());
}
@Test
void selectMenuItem() {
assertNull(app.getCurrentGame());
app.selectMenuItem("1");
assertNull(app.getCurrentGame());
app.selectMenuItem("2");
assertNotNull(app.getCurrentGame());
app.selectMenuItem("q");
assertNull(app.getCurrentGame());
}
}
Loading…
Cancel
Save