From a4efd0a563cf40246bf392dbebe541151980c888 Mon Sep 17 00:00:00 2001 From: 3010293 <3010293@stud.hs-mannheim.de> Date: Thu, 16 Jan 2025 14:52:20 +0100 Subject: [PATCH] split test classes, changed variables from static to non-static, formatted code, no more gui elements in facade or domain, made new GameBoard, FieldDataResult (DTO) and CSVReader classes, main class is now in its own package, removed mvn from package names --- PR2Projekt/pom.xml | 2 +- .../informatik/domain/CSVReader.java | 66 ++++++ .../informatik/domain/FieldDataResult.java | 27 +++ .../informatik/domain/GameBoard.java | 69 ++++++ .../{mvn => }/domain/HighscoreEintrag.java | 2 +- .../{mvn => }/domain/HighscoreManager.java | 4 +- .../{mvn => }/domain/Highscores.java | 2 +- .../informatik/domain/HitoriLogic.java | 82 +++++++ .../informatik/facade/HitoriAPI.java | 82 +++++++ .../informatik/{mvn => }/gui/GameGUI.java | 52 +++-- .../{mvn => }/gui/HighscoreMenuGUI.java | 22 +- .../{mvn => }/gui/HighscoreTableGUI.java | 5 +- .../hs_mannheim/informatik/gui/MenuGUI.java | 86 +++++++ .../informatik/{mvn => }/gui/NewEntryGUI.java | 4 +- .../de/hs_mannheim/informatik/main/Main.java | 9 + .../informatik/mvn/domain/HitoriMain.java | 197 ---------------- .../informatik/mvn/facade/HitoriAPI.java | 128 ----------- .../informatik/mvn/gui/MenuGUI.java | 59 ----- .../informatik/test/CSVReaderTest.java | 117 ++++++++++ .../informatik/test/GameGUITest.java | 13 ++ .../informatik/test/HighscoreEintragTest.java | 22 ++ .../informatik/test/HighscoreManagerTest.java | 35 +++ .../HitoriLogicTest.java} | 211 +++--------------- .../informatik/{mvn => }/test/log4j2.xml | 0 24 files changed, 684 insertions(+), 612 deletions(-) create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/CSVReader.java create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/FieldDataResult.java create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/GameBoard.java rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/domain/HighscoreEintrag.java (87%) rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/domain/HighscoreManager.java (98%) rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/domain/Highscores.java (97%) create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HitoriLogic.java create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/facade/HitoriAPI.java rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/gui/GameGUI.java (86%) rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/gui/HighscoreMenuGUI.java (74%) rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/gui/HighscoreTableGUI.java (96%) create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/MenuGUI.java rename PR2Projekt/src/main/java/de/hs_mannheim/informatik/{mvn => }/gui/NewEntryGUI.java (93%) create mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/main/Main.java delete mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java delete mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/facade/HitoriAPI.java delete mode 100644 PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java create mode 100644 PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/CSVReaderTest.java create mode 100644 PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/GameGUITest.java create mode 100644 PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreEintragTest.java create mode 100644 PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreManagerTest.java rename PR2Projekt/src/test/java/de/hs_mannheim/informatik/{mvn/test/HitoriTest.java => test/HitoriLogicTest.java} (54%) rename PR2Projekt/src/test/java/de/hs_mannheim/informatik/{mvn => }/test/log4j2.xml (100%) diff --git a/PR2Projekt/pom.xml b/PR2Projekt/pom.xml index 607057c..cbd7ae7 100644 --- a/PR2Projekt/pom.xml +++ b/PR2Projekt/pom.xml @@ -61,7 +61,7 @@ -de.hs_mannheim.informatik.mvn.domain.HitoriMain +de.hs_mannheim.informatik.main.Main diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/CSVReader.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/CSVReader.java new file mode 100644 index 0000000..1625e82 --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/CSVReader.java @@ -0,0 +1,66 @@ +package de.hs_mannheim.informatik.domain; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; + +public class CSVReader { + + public ArrayList readFromFile(InputStream inputStream){ + ArrayList lines = new ArrayList<>(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + lines.add(line); + } + } catch (IOException e) { + e.getMessage(); + } + return lines; + } + + public ArrayList getSolution(InputStream inputStream) throws FileNotFoundException{ + ArrayList filteredData = new ArrayList<>(); + boolean isUnderComment = false; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.equals("//Lösung (schwarze Felder)")) { + isUnderComment = true; + continue; + } + if (isUnderComment && !line.isEmpty()) { + String[] lineArray = line.split(","); + int firstNumn = Integer.parseInt(lineArray[0]); + int secondNum = Integer.parseInt(lineArray[1]); + String firstNumAsString = String.valueOf(firstNumn - 1); + String secondNumAsString = String.valueOf(secondNum - 1); + String newLine = firstNumAsString + "," + secondNumAsString; + filteredData.add(newLine); + } + } + } catch (IOException e) { + e.getMessage(); + } + return filteredData; + } + + public String[][] getData(InputStream inputStream, int rows) throws FileNotFoundException{ + String[][] data = new String[rows][rows]; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + int rowInt = 0; + while ((line = reader.readLine()) != null && rowInt < rows) { + data[rowInt] = line.split(","); + rowInt++; + } + } catch (IOException e) { + e.printStackTrace(); + } + return data; + } +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/FieldDataResult.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/FieldDataResult.java new file mode 100644 index 0000000..e65248d --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/FieldDataResult.java @@ -0,0 +1,27 @@ +package de.hs_mannheim.informatik.domain; + +import java.io.InputStream; + +public class FieldDataResult { + private final String[][] data; + private final String[][] colors; + private final InputStream gameStream; + + public FieldDataResult(String[][] data, String[][] colors, InputStream gameStream) { + this.data = data; + this.colors = colors; + this.gameStream = gameStream; + } + + public String[][] getData() { + return data; + } + + public String[][] getColors() { + return colors; + } + + public InputStream getGameStream() { + return gameStream; + } +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/GameBoard.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/GameBoard.java new file mode 100644 index 0000000..e37d21c --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/GameBoard.java @@ -0,0 +1,69 @@ +package de.hs_mannheim.informatik.domain; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Stack; +import de.hs_mannheim.informatik.facade.HitoriAPI; + +public class GameBoard { + + public FieldDataResult initializeFieldData(byte[] gameData, int rows, Stack madeMoves, String path) throws IOException { + InputStream newStream = new ByteArrayInputStream(gameData); + String[][] data = new CSVReader().getData(newStream, rows); + System.out.println(data.length + " FNABLKJFABW"); + String[][] colors = new HitoriLogic().makeColorArray(data.length); + InputStream gameStream = new ByteArrayInputStream(gameData); + return new FieldDataResult(data, colors, gameStream); + } + + public String[] getGameButtonNames() { + String[] buttonNames = { + "4x4 - leicht", + "5x5 - leicht", + "8x8 - leicht", + "8x8 - medium", + "10x10 - medium", + "15x15 - medium" + }; + return buttonNames; + } + + public String[] getGamePath() { + String[] buttonPaths = { + "/Hitori_Spielfelder/Hitori4x4_leicht.csv", + "/Hitori_Spielfelder/Hitori5x5leicht.csv", + "/Hitori_Spielfelder/Hitori8x8leicht.csv", + "/Hitori_Spielfelder/Hitori8x8medium.csv", + "/Hitori_Spielfelder/Hitori10x10medium.csv", + "/Hitori_Spielfelder/Hitori15x15_medium.csv" + }; + return buttonPaths; + } + + public String[] getHighscorePathNames() { + String[] buttonPaths = { + "resources/Hitori_Highscores/Hitori4x4_leicht.txt", + "resources/Hitori_Highscores/Hitori5x5leicht.txt", + "resources/Hitori_Highscores/Hitori8x8leicht.txt", + "resources/Hitori_Highscores/Hitori8x8medium.txt", + "resources/Hitori_Highscores/Hitori10x10medium.txt", + "resources/Hitori_Highscores/Hitori15x15_medium.txt" + }; + return buttonPaths; + } + + public String[] getHighscoreButtonNames() { + String[] buttonNames = { + "Highscore 4x4 - leicht", + "Highscore 5x5 - leicht", + "Highscore 8x8 - leicht", + "Highscore 8x8 - medium", + "Highscore 10x10 - medium", + "Highscore 15x15 - medium" + }; + return buttonNames; + } + + +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HighscoreEintrag.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HighscoreEintrag.java similarity index 87% rename from PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HighscoreEintrag.java rename to PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HighscoreEintrag.java index 4d06a1f..8fcfd03 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HighscoreEintrag.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HighscoreEintrag.java @@ -1,4 +1,4 @@ -package de.hs_mannheim.informatik.mvn.domain; +package de.hs_mannheim.informatik.domain; import java.time.LocalTime; diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HighscoreManager.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HighscoreManager.java similarity index 98% rename from PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HighscoreManager.java rename to PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HighscoreManager.java index b570030..4f52d37 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HighscoreManager.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HighscoreManager.java @@ -1,4 +1,4 @@ -package de.hs_mannheim.informatik.mvn.domain; +package de.hs_mannheim.informatik.domain; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -19,7 +19,7 @@ import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.Comparator; -import de.hs_mannheim.informatik.mvn.gui.HighscoreMenuGUI; +import de.hs_mannheim.informatik.gui.HighscoreMenuGUI; public class HighscoreManager { diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/Highscores.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/Highscores.java similarity index 97% rename from PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/Highscores.java rename to PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/Highscores.java index 75a3903..df34231 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/Highscores.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/Highscores.java @@ -1,4 +1,4 @@ -package de.hs_mannheim.informatik.mvn.domain; +package de.hs_mannheim.informatik.domain; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HitoriLogic.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HitoriLogic.java new file mode 100644 index 0000000..934f0fd --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/domain/HitoriLogic.java @@ -0,0 +1,82 @@ +package de.hs_mannheim.informatik.domain; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Stack; + +public class HitoriLogic { + + public String[][] makeColorArray(int size){ + String[][] colors = new String[size][size]; + for(int i=0;i filteredData = new CSVReader().getSolution(inputStream); + String[][] ergebnis = getErgebnisArray(result, filteredData); + boolean abgabeMöglich = checkArraySame(result, ergebnis); + return abgabeMöglich; + } + + public void addMove(String[][] colors, int i, int j, String lastLetterString, Stack madeMoves){ + colors[i][j] += lastLetterString; + String newMove = i+"."+j+"."+lastLetterString; + madeMoves.push(newMove); + } + + public String[] getCords(int i, int j){ + String yKoordinate = String.valueOf(i); + String xKoordinate = String.valueOf(j); + String[] position = {yKoordinate, xKoordinate}; + return position; + } + + public String[][] getResult(String[][] data, String[][] colors){ + String[][] result = new String[data.length][data.length]; + for(int i=0;i filteredData){ + String[][] ergebnis = new String[result.length][result.length]; + for(int i=0;i= 0 && row < ergebnis.length && col >= 0 && col < ergebnis[row].length) { + ergebnis[row][col] = "B"; + } + } + return ergebnis; + } +} \ No newline at end of file diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/facade/HitoriAPI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/facade/HitoriAPI.java new file mode 100644 index 0000000..a7ec165 --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/facade/HitoriAPI.java @@ -0,0 +1,82 @@ +package de.hs_mannheim.informatik.facade; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.Stack; +import de.hs_mannheim.informatik.domain.*; + +public class HitoriAPI { + + public static String[] getCordsCatcher(int i, int j) { + String[] pos = new HitoriLogic().getCords(i,j); + return pos; + } + + public boolean abgabeMöglichCatcher(InputStream newStream, String[][] data, String[][] colors) throws FileNotFoundException { + boolean abgabeMöglich = new HitoriLogic().abgabeMöglich(newStream, data, colors); + return abgabeMöglich; + } + + public void sortByTimeCatcher(byte[] data, String filename) throws IOException { + new HighscoreManager().sortByTime(data, filename); + } + + public String getAvgTimeCatcher(byte[] data, String filename) throws IOException { + String avgTime = new HighscoreManager().getAvgTime(data, filename); + return avgTime; + } + + public void copyResourceIfNotExistsCatcher(String resourcePathInJar, File outFile) throws IOException { + new HighscoreManager().copyResourceIfNotExists(resourcePathInJar, outFile); + } + + public String[] getGameButtonNamesCatcher() { + String[] buttonNames = new GameBoard().getGameButtonNames(); + return buttonNames; + } + + public String[] getGamePathCatcher() { + String[] pathNames = new GameBoard().getGamePath(); + return pathNames; + } + + public String[] getHighscorePathNamesCatcher() { + String[] pathNames = new GameBoard().getHighscorePathNames(); + return pathNames; + } + + public String[] getHighscoreButtonNamesCatcher() { + String[] buttonNames = new GameBoard().getHighscoreButtonNames(); + return buttonNames; + } + + public Object[] loadHighscore(int index, String[] pathNames) { + Object[] arr = new Object[2]; + String resourcePathInJar = pathNames[index]; + String localFileName = resourcePathInJar.substring(resourcePathInJar.lastIndexOf('/') + 1); + File outFile = new File("resources/Hitori_Highscores", localFileName); + try { + copyResourceIfNotExistsCatcher(resourcePathInJar, outFile); + byte[] data = Files.readAllBytes(outFile.toPath()); + arr[0] = data; + arr[1] = outFile.getPath(); + return arr; + } catch (IOException e1) { + e1.printStackTrace(); + } + return arr; + } + + public static void addMoveCatcher(String[][] colors, int i, int j, String lastLetterString, + Stack madeMoves) { + new HitoriLogic().addMove(colors, i, j, lastLetterString, madeMoves); + } + + public FieldDataResult initializeFieldDataPass(byte[] gameData, int rows, Stack madeMoves, String path) throws IOException { + FieldDataResult fdr = new GameBoard().initializeFieldData(gameData, rows, madeMoves, path); + return fdr; + } +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/GameGUI.java similarity index 86% rename from PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java rename to PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/GameGUI.java index fd1aa0f..697a575 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/GameGUI.java @@ -1,24 +1,32 @@ -package de.hs_mannheim.informatik.mvn.gui; +package de.hs_mannheim.informatik.gui; import java.awt.*; -import java.awt.event.*; import java.util.Stack; import java.util.Timer; import java.util.TimerTask; import java.io.*; import javax.swing.*; -import de.hs_mannheim.informatik.mvn.facade.HitoriAPI; -public class GameGUI extends JFrame implements ActionListener { +import de.hs_mannheim.informatik.facade.HitoriAPI; + +public class GameGUI extends JFrame { - private static Timer timer = new Timer(); - private static long startTime; - private static long elapsedSeconds; - private static byte[] gameData; - - public void paintGame(InputStream inputStream, CardLayout cl, JPanel main, JButton[][] buttons, String[][] colors, Stack madeMoves, String[][] data, String path0) throws IOException{ - elapsedSeconds = 0; + private Timer timer = new Timer(); + private long startTime; + private long elapsedSeconds; + private byte[] gameData; + + public Object[] giveFrame(CardLayout cl, JPanel main){ + Object[] frameArray = new Object[2]; + frameArray[0] = cl; + frameArray[1] = main; + return frameArray; + } + + public void paintGame(CardLayout cl, JPanel main, InputStream inputStream, Stack madeMoves, String[][] data, String path0, String[][] colors) throws IOException{ + elapsedSeconds = 0; gameData = inputStream.readAllBytes(); + JButton[][] buttons = makeButtonArray(data); String[] filepath = new String[2]; int num = buttons.length; JPanel gameGrid = new JPanel(new GridLayout(num,num,0,0)); @@ -46,8 +54,8 @@ public class GameGUI extends JFrame implements ActionListener { zurückButton.addActionListener(e -> {backOneStep(cl, main, madeMoves, buttons, colors, gameGrid);}); JButton resetButton = new JButton("Zurücksetzen"); resetButton.addActionListener(e -> {try { - new HitoriAPI().totalResetButtonCatcher(inputStream, cl, main, buttons, colors, madeMoves, data, path0); - } catch (FileNotFoundException e1) { + totalResetButton(inputStream, cl, main, buttons, colors, madeMoves, data, path0); + } catch (IOException e1) { e1.printStackTrace(); }}); JButton abgebenButton = new JButton("Abgeben"); @@ -110,12 +118,6 @@ public class GameGUI extends JFrame implements ActionListener { main.add(mainPanel, "GAME"); cl.show(main, "GAME"); } - - private void addMove(String[][] colors, int i, int j, String lastLetterString, Stack madeMoves){ - colors[i][j] += lastLetterString; - String newMove = i+"."+j+"."+lastLetterString; - madeMoves.push(newMove); - } private void changeButtonColor(JButton button, Color foreground, Color background) { button.setOpaque(true); @@ -153,7 +155,7 @@ public class GameGUI extends JFrame implements ActionListener { changeButtonColor(button, foreground, background); break; } - addMove(colors, i, j, lastLetterString, madeMoves); + HitoriAPI.addMoveCatcher(colors, i,j,lastLetterString,madeMoves); } public void backOneStep(CardLayout cl, JPanel main, Stack movesMade, JButton[][] buttons, String[][] colors, JPanel grid){ @@ -220,10 +222,6 @@ public class GameGUI extends JFrame implements ActionListener { return endtime; } - @Override - public void actionPerformed(ActionEvent e) { - } - public JButton[][] makeButtonArray(String[][] data){ JButton[][] buttons = new JButton[data.length][data.length]; for(int i=0;i madeMoves,String[][] data,String path) throws FileNotFoundException{ - madeMoves.clear(); + public void totalResetButton(InputStream inputStream, CardLayout cl, JPanel main, JButton[][] buttonArray, String[][] colors,Stack madeMoves,String[][] data,String path) throws IOException{ + madeMoves.clear(); for(int i = 0; i { - new HitoriAPI().loadHighscore(index, pathNames, cl, main); + Object[] arr = new HitoriAPI().loadHighscore(index, pathNames); + byte[] data = (byte[]) arr[0]; + String filename = (String) arr[1]; + try { + new HighscoreTableGUI().showHighscores(cl, main, data, filename); + } catch (IOException e1) { + e1.printStackTrace(); + } }); } JButton zurückButton = new JButton("Zurück"); @@ -37,8 +47,4 @@ public class HighscoreMenuGUI extends JFrame implements ActionListener { main.add(highscorePanel, "HIGHSCORES"); cl.show(main, "HIGHSCORES"); } - - @Override - public void actionPerformed(ActionEvent e) { - } } diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreTableGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/HighscoreTableGUI.java similarity index 96% rename from PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreTableGUI.java rename to PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/HighscoreTableGUI.java index 2084332..9e2b080 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreTableGUI.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/HighscoreTableGUI.java @@ -1,4 +1,4 @@ -package de.hs_mannheim.informatik.mvn.gui; +package de.hs_mannheim.informatik.gui; import java.awt.BorderLayout; import java.awt.CardLayout; @@ -15,7 +15,8 @@ import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; -import de.hs_mannheim.informatik.mvn.facade.HitoriAPI; + +import de.hs_mannheim.informatik.facade.HitoriAPI; public class HighscoreTableGUI { public void showHighscores(CardLayout cl, JPanel main, byte[] data, String filename) throws IOException { diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/MenuGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/MenuGUI.java new file mode 100644 index 0000000..06dc1b5 --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/MenuGUI.java @@ -0,0 +1,86 @@ +package de.hs_mannheim.informatik.gui; + +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.GridLayout; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Stack; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import de.hs_mannheim.informatik.domain.FieldDataResult; +import de.hs_mannheim.informatik.facade.HitoriAPI; + +public class MenuGUI extends JFrame { + + private CardLayout cl = new CardLayout(); + private JPanel main = new JPanel(cl); + private String[] filepath = {"", ""}; + private byte[] gameData; + + public MenuGUI(){ + JPanel menuPanel = new JPanel(new BorderLayout()); + JPanel buttonPanel = new JPanel(new GridLayout(7,1,10,10)); + + final String[] buttonNames = new HitoriAPI().getGameButtonNamesCatcher(); + final String[] buttonPaths = new HitoriAPI().getGamePathCatcher(); + + for(int i=0;i { + int j = count[0]; + filepath[0] = buttonPaths[j]; + filepath[1] = num[0]; + loadGame(filepath, cl, main, gameData); + }); + } + JButton highscoreButton = new JButton("Highscores"); + highscoreButton.addActionListener(e -> { + new HighscoreMenuGUI(cl, main); + }); + buttonPanel.add(highscoreButton); + menuPanel.add(buttonPanel, BorderLayout.CENTER); + JLabel topText = new JLabel("Wählen Sie ein Level aus!"); + menuPanel.add(topText, BorderLayout.NORTH); + setVisible(true); + setSize(700,700); + setDefaultCloseOperation(EXIT_ON_CLOSE); + add(main); + main.add(menuPanel, "HAUPT"); + cl.show(main, "HAUPT"); + } + + public void loadGame(String[] filepath, CardLayout cl, JPanel main, byte[] gameData) { + try (InputStream inputStream = GameGUI.class.getResourceAsStream(filepath[0])) { + if (inputStream != null) { + String path=filepath[0]; + ablauf(cl, main, inputStream, Integer.parseInt(filepath[1]), path); + } else { + throw new FileNotFoundException("Resource not found: " + filepath[0]); + } + } catch (IOException e1) { + e1.getMessage(); + } + } + + public void passOn(String[][] data, String[][] colors, InputStream gameStream) { + + + } + + public void ablauf(CardLayout cl, JPanel main, InputStream inputStream, int rows, String path) throws IOException { + Stack madeMoves = new Stack<>(); + byte[] gameData = inputStream.readAllBytes(); + FieldDataResult fdrDTO = new HitoriAPI().initializeFieldDataPass(gameData, rows, madeMoves, path); + String[][] data = fdrDTO.getData(); + String[][] colors =fdrDTO.getColors(); + InputStream gameStream = fdrDTO.getGameStream(); + new GameGUI().paintGame(cl, main, gameStream, madeMoves, data, path, colors); + } +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/NewEntryGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/NewEntryGUI.java similarity index 93% rename from PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/NewEntryGUI.java rename to PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/NewEntryGUI.java index 3535a6a..2aacaab 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/NewEntryGUI.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/gui/NewEntryGUI.java @@ -1,4 +1,4 @@ -package de.hs_mannheim.informatik.mvn.gui; +package de.hs_mannheim.informatik.gui; import java.awt.BorderLayout; import java.awt.CardLayout; @@ -10,7 +10,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; -import de.hs_mannheim.informatik.mvn.domain.Highscores; +import de.hs_mannheim.informatik.domain.Highscores; public class NewEntryGUI { public static void finish(CardLayout cl, JPanel main, String endtime, String[] filepath, String path) throws FileNotFoundException{ diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/main/Main.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/main/Main.java new file mode 100644 index 0000000..21272e5 --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/main/Main.java @@ -0,0 +1,9 @@ +package de.hs_mannheim.informatik.main; + +import de.hs_mannheim.informatik.gui.MenuGUI; + +public class Main { + public static void main(String[] args) { + new MenuGUI(); + } +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java deleted file mode 100644 index 53c9431..0000000 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java +++ /dev/null @@ -1,197 +0,0 @@ -package de.hs_mannheim.informatik.mvn.domain; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import de.hs_mannheim.informatik.mvn.facade.HitoriAPI; - -public class HitoriMain { - - public static void main(String[] args) throws FileNotFoundException{ - HitoriAPI.starter(); - } - - public ArrayList readFromFile(InputStream inputStream){ - ArrayList lines = new ArrayList<>(); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - while ((line = reader.readLine()) != null) { - lines.add(line); - } - } catch (IOException e) { - e.getMessage(); - } - return lines; - } - - public String[][] getData(InputStream inputStream, int rows) throws FileNotFoundException{ - String[][] data = new String[rows][rows]; - try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - int rowInt = 0; - while ((line = reader.readLine()) != null && rowInt < rows) { - data[rowInt] = line.split(","); - rowInt++; - } - } catch (IOException e) { - e.printStackTrace(); - } - return data; - } - - public String[][] makeColorArray(int size){ - String[][] colors = new String[size][size]; - for(int i=0;i filteredData = getSolution(inputStream); - String[][] ergebnis = getErgebnisArray(result, filteredData); - boolean abgabeMöglich = checkArraySame(result, ergebnis); - return abgabeMöglich; - } - - public String[] getCords(int i, int j){ - String yKoordinate = String.valueOf(i); - String xKoordinate = String.valueOf(j); - String[] position = {yKoordinate, xKoordinate}; - return position; - } - - public String[][] getResult(String[][] data, String[][] colors){ - String[][] result = new String[data.length][data.length]; - for(int i=0;i getSolution(InputStream inputStream) throws FileNotFoundException{ - ArrayList filteredData = new ArrayList<>(); - boolean isUnderComment = false; - try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - while ((line = reader.readLine()) != null) { - line = line.trim(); - if (line.equals("//Lösung (schwarze Felder)")) { - isUnderComment = true; - continue; - } - if (isUnderComment && !line.isEmpty()) { - String[] lineArray = line.split(","); - int firstNumn = Integer.parseInt(lineArray[0]); - int secondNum = Integer.parseInt(lineArray[1]); - String firstNumAsString = String.valueOf(firstNumn - 1); - String secondNumAsString = String.valueOf(secondNum - 1); - String newLine = firstNumAsString + "," + secondNumAsString; - filteredData.add(newLine); - } - } - } catch (IOException e) { - e.getMessage(); - } - return filteredData; - } - - public String[][] getErgebnisArray(String[][] result, ArrayList filteredData){ - String[][] ergebnis = new String[result.length][result.length]; - for(int i=0;i= 0 && row < ergebnis.length && col >= 0 && col < ergebnis[row].length) { - ergebnis[row][col] = "B"; - } - } - return ergebnis; - } - - public String[] getGameButtonNames() { - String[] buttonNames = { - "4x4 - leicht", - "5x5 - leicht", - "8x8 - leicht", - "8x8 - medium", - "10x10 - medium", - "15x15 - medium" - }; - return buttonNames; - } - - public String[] getGamePath() { - String[] buttonPaths = { - "/Hitori_Spielfelder/Hitori4x4_leicht.csv", - "/Hitori_Spielfelder/Hitori5x5leicht.csv", - "/Hitori_Spielfelder/Hitori8x8leicht.csv", - "/Hitori_Spielfelder/Hitori8x8medium.csv", - "/Hitori_Spielfelder/Hitori10x10medium.csv", - "/Hitori_Spielfelder/Hitori15x15_medium.csv" - }; - return buttonPaths; - } - - public String[] getHighscorePathNames() { - String[] buttonPaths = { - "resources/Hitori_Highscores/Hitori4x4_leicht.txt", - "resources/Hitori_Highscores/Hitori5x5leicht.txt", - "resources/Hitori_Highscores/Hitori8x8leicht.txt", - "resources/Hitori_Highscores/Hitori8x8medium.txt", - "resources/Hitori_Highscores/Hitori10x10medium.txt", - "resources/Hitori_Highscores/Hitori15x15_medium.txt" - }; - return buttonPaths; - } - - public String[] getHighscoreButtonNames() { - String[] buttonNames = { - "Highscore 4x4 - leicht", - "Highscore 5x5 - leicht", - "Highscore 8x8 - leicht", - "Highscore 8x8 - medium", - "Highscore 10x10 - medium", - "Highscore 15x15 - medium" - }; - return buttonNames; - } -} \ No newline at end of file diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/facade/HitoriAPI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/facade/HitoriAPI.java deleted file mode 100644 index 784177a..0000000 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/facade/HitoriAPI.java +++ /dev/null @@ -1,128 +0,0 @@ -package de.hs_mannheim.informatik.mvn.facade; - -import java.awt.CardLayout; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.util.Stack; -import javax.swing.JButton; -import javax.swing.JPanel; -import de.hs_mannheim.informatik.mvn.domain.*; -import de.hs_mannheim.informatik.mvn.gui.*; - -public class HitoriAPI { - - public static void starter() { - new MenuGUI(); - } - - public void paintGameCatcher(InputStream gameStream, CardLayout cl, JPanel main, JButton[][] buttons, - String[][] colors, Stack madeMoves, String[][] data, String path) throws IOException { - new GameGUI().paintGame(gameStream, cl, main, buttons, colors, madeMoves, data, path); - } - - public static String[] getCordsCatcher(int i, int j) { - String[] pos = new HitoriMain().getCords(i,j); - return pos; - } - - public void totalResetButtonCatcher(InputStream inputStream, CardLayout cl, JPanel main, JButton[][] buttons, - String[][] colors, Stack madeMoves, String[][] data, String path0) throws FileNotFoundException { - new GameGUI().totalResetButton(inputStream, cl, main, buttons, colors, madeMoves, data, path0); - } - - public boolean abgabeMöglichCatcher(InputStream newStream, String[][] data, String[][] colors) throws FileNotFoundException { - boolean abgabeMöglich = new HitoriMain().abgabeMöglich(newStream, data, colors); - return abgabeMöglich; - } - - public void sortByTimeCatcher(byte[] data, String filename) throws IOException { - new HighscoreManager().sortByTime(data, filename); - } - - public String getAvgTimeCatcher(byte[] data, String filename) throws IOException { - String avgTime = new HighscoreManager().getAvgTime(data, filename); - return avgTime; - } - - public void ablauf(CardLayout cl, JPanel main, InputStream inputStream, int rows, String path) throws IOException { - Stack madeMoves = new Stack<>(); - byte[] gameData = inputStream.readAllBytes(); - InputStream newStream = new ByteArrayInputStream(gameData); - String[][] data = new HitoriMain().getData(newStream, rows); - String[][] colors = new HitoriMain().makeColorArray(data.length); - - JButton[][] buttons = new GameGUI().makeButtonArray(data); - InputStream gameStream = new ByteArrayInputStream(gameData); - new GameGUI().paintGame(gameStream, cl, main, buttons, colors, madeMoves, data, path); - } - - public void repaintGameCatcher(String[][] data, InputStream inputStream, CardLayout cl, JPanel main, - String[][] colors, Stack madeMoves, String[][] data2, String path) { - JButton[][] buttons = new GameGUI().makeButtonArray(data); - try { - new GameGUI().paintGame(inputStream, cl, main, buttons, colors, madeMoves, data, path); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void copyResourceIfNotExistsCatcher(String resourcePathInJar, File outFile) throws IOException { - new HighscoreManager().copyResourceIfNotExists(resourcePathInJar, outFile); - } - - public String[] getGameButtonNamesCatcher() { - String[] buttonNames = new HitoriMain().getGameButtonNames(); - return buttonNames; - } - - public String[] getGamePathCatcher() { - String[] pathNames = new HitoriMain().getGamePath(); - return pathNames; - } - - public void loadGame(String[] filepath, CardLayout cl, JPanel main, byte[] gameData) { - try (InputStream inputStream = GameGUI.class.getResourceAsStream(filepath[0])) { - if (inputStream != null) { - String path=filepath[0]; - ablauf(cl, main, inputStream, Integer.parseInt(filepath[1]), path); - } else { - throw new FileNotFoundException("Resource not found: " + filepath[0]); - } - } catch (IOException e1) { - e1.getMessage(); - } - } - - public String[] getHighscorePathNamesCatcher() { - String[] pathNames = new HitoriMain().getHighscorePathNames(); - return pathNames; - } - - public String[] getHighscoreButtonNamesCatcher() { - String[] buttonNames = new HitoriMain().getHighscoreButtonNames(); - return buttonNames; - } - - public void loadHighscore(int index, String[] pathNames, CardLayout cl, JPanel main) { - String resourcePathInJar = pathNames[index]; - String localFileName = resourcePathInJar.substring(resourcePathInJar.lastIndexOf('/') + 1); - File outFile = new File("resources/Hitori_Highscores", localFileName); - try { - copyResourceIfNotExistsCatcher(resourcePathInJar, outFile); - byte[] data = Files.readAllBytes(outFile.toPath()); - new HighscoreTableGUI().showHighscores(cl, main, data, outFile.getPath()); - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - - - - - -} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java deleted file mode 100644 index 912b113..0000000 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.hs_mannheim.informatik.mvn.gui; - -import java.awt.BorderLayout; -import java.awt.CardLayout; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import de.hs_mannheim.informatik.mvn.facade.HitoriAPI; - -public class MenuGUI extends JFrame implements ActionListener { - - private static CardLayout cl = new CardLayout(); - private static JPanel main = new JPanel(cl); - private static String[] filepath = {"", ""}; - private static byte[] gameData; - - public MenuGUI(){ - JPanel menuPanel = new JPanel(new BorderLayout()); - JPanel buttonPanel = new JPanel(new GridLayout(7,1,10,10)); - final String[] buttonNames = new HitoriAPI().getGameButtonNamesCatcher(); - final String[] buttonPaths = new HitoriAPI().getGamePathCatcher(); - for(int i=0;i { - int j = count[0]; - filepath[0] = buttonPaths[j]; - filepath[1] = num[0]; - new HitoriAPI().loadGame(filepath, cl, main, gameData); - }); - } - JButton highscoreButton = new JButton("Highscores"); - highscoreButton.addActionListener(e -> { - new HighscoreMenuGUI(cl, main); - }); - buttonPanel.add(highscoreButton); - menuPanel.add(buttonPanel, BorderLayout.CENTER); - JLabel topText = new JLabel("Wählen Sie ein Level aus!"); - menuPanel.add(topText, BorderLayout.NORTH); - setVisible(true); - setSize(700,700); - setDefaultCloseOperation(EXIT_ON_CLOSE); - add(main); - main.add(menuPanel, "HAUPT"); - cl.show(main, "HAUPT"); - } - - @Override - public void actionPerformed(ActionEvent e) { - } - - -} diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/CSVReaderTest.java b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/CSVReaderTest.java new file mode 100644 index 0000000..5757504 --- /dev/null +++ b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/CSVReaderTest.java @@ -0,0 +1,117 @@ +package de.hs_mannheim.informatik.test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; + +import org.junit.jupiter.api.Test; + +import de.hs_mannheim.informatik.domain.CSVReader; + +public class CSVReaderTest { + @Test + void getSolutionTest1() throws FileNotFoundException { + String[] ergebnis4x4 = {"0,1", "1,3", "2,1", "3,0", "3,3"}; + String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; + InputStream inputStream = getClass().getResourceAsStream(path); + ArrayList filteredData = new CSVReader().getSolution(inputStream); + assertEquals(5, filteredData.size()); + assertEquals(ergebnis4x4[0], filteredData.get(0)); + assertEquals(ergebnis4x4[1], filteredData.get(1)); + assertEquals(ergebnis4x4[2], filteredData.get(2)); + assertEquals(ergebnis4x4[3], filteredData.get(3)); + assertEquals(ergebnis4x4[4], filteredData.get(4)); + } + + @Test + void getSolutionTest2() throws FileNotFoundException { + String[] ergebnis4x4 = {"0,0"}; + String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; + InputStream inputStream = getClass().getResourceAsStream(path); + ArrayList filteredData = new CSVReader().getSolution(inputStream); + assertNotEquals(1, filteredData.size()); + assertNotEquals(ergebnis4x4[0], filteredData.get(0)); + assertNotEquals(ergebnis4x4[0], filteredData.get(1)); + assertNotEquals(ergebnis4x4[0], filteredData.get(2)); + assertNotEquals(ergebnis4x4[0], filteredData.get(3)); + assertNotEquals(ergebnis4x4[0], filteredData.get(4)); + } + + @Test + void getDataTest1() throws FileNotFoundException { + String[][] data = { + {"3", "3", "1", "4"}, + {"4", "3", "2", "2"}, + {"1", "3", "4", "2"}, + {"3", "4", "3", "2"}}; + String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; + InputStream inputStream = getClass().getResourceAsStream(path); + assertTrue(Arrays.deepEquals(data, new CSVReader().getData(inputStream, 4))); + } + + @Test + void getDataTest2() throws FileNotFoundException { + String[][] data = { + {"3", "0", "1", "4"}, + {"4", "0", "2", "2"}, + {"1", "0", "4", "2"}, + {"3", "0", "3", "2"}}; + String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; + InputStream inputStream = getClass().getResourceAsStream(path); + assertFalse(Arrays.deepEquals(data, new CSVReader().getData(inputStream, 4))); + } + + @Test + void readFromFileTest1() { + String[] file = { + "3,3,1,4", + "4,3,2,2", + "1,3,4,2", + "3,4,3,2", + "", + "//Lösung (schwarze Felder)", + "1,2", + "2,4", + "3,2", + "4,1", + "4,4"}; + ArrayList fileEntry = new ArrayList(); + for(int i=0;i ergebnisList = new CSVReader().readFromFile(inputStream); + assertEquals(fileEntry, ergebnisList); + } + + @Test + void readFromFileTest2() { + String[] file = { + "3,3,1,0", + "4,3,2,0", + "1,3,4,0", + "3,4,3,0", + "", + "//Lösung (schwarze Felder)", + "1,2", + "2,4", + "3,2", + "4,1", + "4,4"}; + ArrayList fileEntry = new ArrayList(); + for(int i=0;i ergebnisList = new CSVReader().readFromFile(inputStream); + assertNotEquals(fileEntry, ergebnisList); + } +} diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/GameGUITest.java b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/GameGUITest.java new file mode 100644 index 0000000..bdf84a9 --- /dev/null +++ b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/GameGUITest.java @@ -0,0 +1,13 @@ +package de.hs_mannheim.informatik.test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import de.hs_mannheim.informatik.gui.GameGUI; + +public class GameGUITest { + + @Test + void checkStartTimeTest() { + assertEquals("Zeit: 00:00", new GameGUI().startTimer()); + } +} diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreEintragTest.java b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreEintragTest.java new file mode 100644 index 0000000..202c5a0 --- /dev/null +++ b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreEintragTest.java @@ -0,0 +1,22 @@ +package de.hs_mannheim.informatik.test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.time.LocalTime; +import org.junit.jupiter.api.Test; +import de.hs_mannheim.informatik.domain.HighscoreEintrag; + +public class HighscoreEintragTest { + + @Test + void highscoreEintragGetterTest() { + LocalTime time = LocalTime.of(10, 00); + HighscoreEintrag he = new HighscoreEintrag(time, "Berat"); + assertTrue(he.getName().equals("Berat")); + LocalTime parsedTime = LocalTime.parse("10:00"); + assertTrue(he.getTime().equals(parsedTime)); + LocalTime wrongParsedTime = LocalTime.parse("11:00"); + assertFalse(he.getTime().equals(wrongParsedTime)); + assertFalse(he.getName().equals("Emre")); + } +} diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreManagerTest.java b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreManagerTest.java new file mode 100644 index 0000000..ad657cf --- /dev/null +++ b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HighscoreManagerTest.java @@ -0,0 +1,35 @@ +package de.hs_mannheim.informatik.test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.io.IOException; +import java.io.InputStream; + +import org.junit.jupiter.api.Test; + +import de.hs_mannheim.informatik.domain.HighscoreManager; + +public class HighscoreManagerTest { + @Test + void getAvgTimeTest1() throws IOException { + String filename = "timeFileForTest.txt"; + String path = "/Hitori_Highscores/timeFileForTest.txt"; + InputStream inputStream = getClass().getResourceAsStream(path); + byte[] data = inputStream.readAllBytes(); + String actual = new HighscoreManager().getAvgTime(data, filename); + String expected = "Durchschnittszeit: 6:39"; + assertEquals(expected, actual); + } + + @Test + void getAvgTimeTest2() throws IOException { + String filename = "timeFileForTest.txt"; + String path = "/Hitori_Highscores/timeFileForTest.txt"; + InputStream inputStream = getClass().getResourceAsStream(path); + byte[] data = inputStream.readAllBytes(); + String actual = new HighscoreManager().getAvgTime(data, filename); + String expected = "Durchschnittszeit: 00:10"; + assertNotEquals(expected, actual); + } +} diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HitoriLogicTest.java similarity index 54% rename from PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java rename to PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HitoriLogicTest.java index ed20f31..4c66e4f 100644 --- a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java +++ b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/HitoriLogicTest.java @@ -1,28 +1,17 @@ -package de.hs_mannheim.informatik.mvn.test; +package de.hs_mannheim.informatik.test; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeFormatterBuilder; -import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.Arrays; -import de.hs_mannheim.informatik.mvn.domain.HighscoreEintrag; -import de.hs_mannheim.informatik.mvn.domain.HighscoreManager; -import de.hs_mannheim.informatik.mvn.domain.HitoriMain; -import de.hs_mannheim.informatik.mvn.gui.GameGUI; +import de.hs_mannheim.informatik.domain.CSVReader; +import de.hs_mannheim.informatik.domain.HitoriLogic; -class HitoriTest{ +class HitoriLogicTest{ @Test void makeColorArrayTest1() { @@ -31,7 +20,7 @@ class HitoriTest{ {"W", "W", "W"}, {"W", "W", "W"} }; - assertTrue(Arrays.deepEquals(array3x3, new HitoriMain().makeColorArray(3))); + assertTrue(Arrays.deepEquals(array3x3, new HitoriLogic().makeColorArray(3))); } @Test @@ -40,12 +29,7 @@ class HitoriTest{ {"W", "W", "W"}, {"W", "W", "W"}, }; - assertFalse(Arrays.deepEquals(array3x2, new HitoriMain().makeColorArray(3))); - } - - @Test - void checkStartTimeTest() { - assertEquals("Zeit: 00:00", new GameGUI().startTimer()); + assertFalse(Arrays.deepEquals(array3x2, new HitoriLogic().makeColorArray(3))); } @Test @@ -60,7 +44,7 @@ class HitoriTest{ {"W", "W", "W", "B"}, {"W", "B", "W", "W"}, {"B", "W", "W", "B"}}; - assertFalse(new HitoriMain().checkArraySame(data, colors)); + assertFalse(new HitoriLogic().checkArraySame(data, colors)); } @Test @@ -76,7 +60,7 @@ class HitoriTest{ {"W", "B", "W", "W"}, {"B", "W", "W", "B"}}; - assertTrue(new HitoriMain().checkArraySame(data, colors)); + assertTrue(new HitoriLogic().checkArraySame(data, colors)); } @Test @@ -93,7 +77,7 @@ class HitoriTest{ {"W", "B", "W", "W", "W"}, {"W", "B", "W", "W", "W"}, {"W", "B", "W", "W", "W"}}; - assertFalse(new HitoriMain().checkArraySame(data, colors)); + assertFalse(new HitoriLogic().checkArraySame(data, colors)); } @Test @@ -110,19 +94,19 @@ class HitoriTest{ {"B", "W", "W", "B", "W"}, {"W", "W", "B", "W", "W"}, {"B", "W", "W", "W", "B"}}; - assertTrue(new HitoriMain().checkArraySame(data, colors)); + assertTrue(new HitoriLogic().checkArraySame(data, colors)); } @Test void getCordsTest1() { String[] array = {"3", "4"}; - assertFalse(Arrays.deepEquals(array, new HitoriMain().getCords(3, 3))); + assertFalse(Arrays.deepEquals(array, new HitoriLogic().getCords(3, 3))); } @Test void getCordsTest2() { String[] array = {"3", "4"}; - assertTrue(Arrays.deepEquals(array, new HitoriMain().getCords(3, 4))); + assertTrue(Arrays.deepEquals(array, new HitoriLogic().getCords(3, 4))); } @Test @@ -149,7 +133,7 @@ class HitoriTest{ {"B", "W", "B", "W", "W", "B", "W", "W", "W", "W"}, {"W", "W", "W", "B", "W", "W", "B", "W", "B", "W"}, {"B", "W", "B", "W", "W", "W", "W", "W", "W", "B"}}; - assertTrue(new HitoriMain().checkArraySame(data, colors)); + assertTrue(new HitoriLogic().checkArraySame(data, colors)); } @Test @@ -176,7 +160,7 @@ class HitoriTest{ {"B", "W", "B", "W", "W", "B", "W", "W", "W", "W"}, {"W", "W", "W", "B", "W", "W", "B", "W", "B", "W"}, {"B", "W", "B", "W", "W", "W", "W", "W", "W", "W"}}; - assertFalse(new HitoriMain().checkArraySame(data, colors)); + assertFalse(new HitoriLogic().checkArraySame(data, colors)); } @Test @@ -196,7 +180,7 @@ class HitoriTest{ {"W", "B", "W", "W"}, {"B", "W", "W", "B"}, {"W", "W", "B", "W"}}; - assertTrue(Arrays.deepEquals(array, new HitoriMain().getResult(data, colors))); + assertTrue(Arrays.deepEquals(array, new HitoriLogic().getResult(data, colors))); } @Test @@ -216,35 +200,7 @@ class HitoriTest{ {"G", "B", "W", "W"}, {"B", "W", "W", "B"}, {"W", "W", "B", "W"}}; - assertFalse(Arrays.deepEquals(array, new HitoriMain().getResult(data, colors))); - } - - @Test - void getSolutionTest1() throws FileNotFoundException { - String[] ergebnis4x4 = {"0,1", "1,3", "2,1", "3,0", "3,3"}; - String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; - InputStream inputStream = getClass().getResourceAsStream(path); - ArrayList filteredData = new HitoriMain().getSolution(inputStream); - assertEquals(5, filteredData.size()); - assertEquals(ergebnis4x4[0], filteredData.get(0)); - assertEquals(ergebnis4x4[1], filteredData.get(1)); - assertEquals(ergebnis4x4[2], filteredData.get(2)); - assertEquals(ergebnis4x4[3], filteredData.get(3)); - assertEquals(ergebnis4x4[4], filteredData.get(4)); - } - - @Test - void getSolutionTest2() throws FileNotFoundException { - String[] ergebnis4x4 = {"0,0"}; - String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; - InputStream inputStream = getClass().getResourceAsStream(path); - ArrayList filteredData = new HitoriMain().getSolution(inputStream); - assertNotEquals(1, filteredData.size()); - assertNotEquals(ergebnis4x4[0], filteredData.get(0)); - assertNotEquals(ergebnis4x4[0], filteredData.get(1)); - assertNotEquals(ergebnis4x4[0], filteredData.get(2)); - assertNotEquals(ergebnis4x4[0], filteredData.get(3)); - assertNotEquals(ergebnis4x4[0], filteredData.get(4)); + assertFalse(Arrays.deepEquals(array, new HitoriLogic().getResult(data, colors))); } @Test @@ -254,7 +210,7 @@ class HitoriTest{ {"W", "W", "W", "W"}, {"W", "W", "W", "W"}, {"W", "W", "W", "W"}}; - assertTrue(Arrays.deepEquals(colors, new HitoriMain().makeColorArray(4))); + assertTrue(Arrays.deepEquals(colors, new HitoriLogic().makeColorArray(4))); } @Test @@ -264,79 +220,7 @@ class HitoriTest{ {"B", "W", "W", "W"}, {"B", "W", "W", "W"}, {"B", "W", "W", "W"}}; - assertFalse(Arrays.deepEquals(colors, new HitoriMain().makeColorArray(4))); - } - - @Test - void getDataTest1() throws FileNotFoundException { - String[][] data = { - {"3", "3", "1", "4"}, - {"4", "3", "2", "2"}, - {"1", "3", "4", "2"}, - {"3", "4", "3", "2"}}; - String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; - InputStream inputStream = getClass().getResourceAsStream(path); - assertTrue(Arrays.deepEquals(data, new HitoriMain().getData(inputStream, 4))); - } - - @Test - void getDataTest2() throws FileNotFoundException { - String[][] data = { - {"3", "0", "1", "4"}, - {"4", "0", "2", "2"}, - {"1", "0", "4", "2"}, - {"3", "0", "3", "2"}}; - String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; - InputStream inputStream = getClass().getResourceAsStream(path); - assertFalse(Arrays.deepEquals(data, new HitoriMain().getData(inputStream, 4))); - } - - @Test - void readFromFileTest1() { - String[] file = { - "3,3,1,4", - "4,3,2,2", - "1,3,4,2", - "3,4,3,2", - "", - "//Lösung (schwarze Felder)", - "1,2", - "2,4", - "3,2", - "4,1", - "4,4"}; - ArrayList fileEntry = new ArrayList(); - for(int i=0;i ergebnisList = new HitoriMain().readFromFile(inputStream); - assertEquals(fileEntry, ergebnisList); - } - - @Test - void readFromFileTest2() { - String[] file = { - "3,3,1,0", - "4,3,2,0", - "1,3,4,0", - "3,4,3,0", - "", - "//Lösung (schwarze Felder)", - "1,2", - "2,4", - "3,2", - "4,1", - "4,4"}; - ArrayList fileEntry = new ArrayList(); - for(int i=0;i ergebnisList = new HitoriMain().readFromFile(inputStream); - assertNotEquals(fileEntry, ergebnisList); + assertFalse(Arrays.deepEquals(colors, new HitoriLogic().makeColorArray(4))); } @Test @@ -348,11 +232,11 @@ class HitoriTest{ {"B", "W", "W", "B"}}; String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; InputStream inputStream = getClass().getResourceAsStream(path); - ArrayList filteredData = new HitoriMain().getSolution(inputStream); + ArrayList filteredData = new CSVReader().getSolution(inputStream); InputStream newStream = getClass().getResourceAsStream(path); int rows = 4; - String[][] data = new HitoriMain().getData(newStream, rows); - assertTrue(Arrays.deepEquals(ergebnis1, new HitoriMain().getErgebnisArray(data, filteredData))); + String[][] data = new CSVReader().getData(newStream, rows); + assertTrue(Arrays.deepEquals(ergebnis1, new HitoriLogic().getErgebnisArray(data, filteredData))); } @Test @@ -364,46 +248,12 @@ class HitoriTest{ {"W", "W", "W", "W"}}; String path = "/Hitori_Spielfelder/Hitori4x4_leicht.csv"; InputStream inputStream = getClass().getResourceAsStream(path); - ArrayList filteredData = new HitoriMain().getSolution(inputStream); + ArrayList filteredData = new CSVReader().getSolution(inputStream); InputStream newStream = getClass().getResourceAsStream(path); int rows = 4; - String[][] data = new HitoriMain().getData(newStream, rows); - assertFalse(Arrays.deepEquals(ergebnis1, new HitoriMain().getErgebnisArray(data, filteredData))); + String[][] data = new CSVReader().getData(newStream, rows); + assertFalse(Arrays.deepEquals(ergebnis1, new HitoriLogic().getErgebnisArray(data, filteredData))); } - - @Test - void highscoreEintragGetterTest() { - LocalTime time = LocalTime.of(10, 00); - HighscoreEintrag he = new HighscoreEintrag(time, "Berat"); - assertTrue(he.getName().equals("Berat")); - LocalTime parsedTime = LocalTime.parse("10:00"); - assertTrue(he.getTime().equals(parsedTime)); - LocalTime wrongParsedTime = LocalTime.parse("11:00"); - assertFalse(he.getTime().equals(wrongParsedTime)); - assertFalse(he.getName().equals("Emre")); - } - - @Test - void getAvgTimeTest1() throws IOException { - String filename = "timeFileForTest.txt"; - String path = "/Hitori_Highscores/timeFileForTest.txt"; - InputStream inputStream = getClass().getResourceAsStream(path); - byte[] data = inputStream.readAllBytes(); - String actual = new HighscoreManager().getAvgTime(data, filename); - String expected = "Durchschnittszeit: 6:39"; - assertEquals(expected, actual); - } - - @Test - void getAvgTimeTest2() throws IOException { - String filename = "timeFileForTest.txt"; - String path = "/Hitori_Highscores/timeFileForTest.txt"; - InputStream inputStream = getClass().getResourceAsStream(path); - byte[] data = inputStream.readAllBytes(); - String actual = new HighscoreManager().getAvgTime(data, filename); - String expected = "Durchschnittszeit: 00:10"; - assertNotEquals(expected, actual); - } @Test void abgabeMöglichTest1() throws FileNotFoundException{ @@ -422,7 +272,7 @@ class HitoriTest{ {"WBGGGGB", "W", "W", "WGB"} }; boolean expected = true; - assertEquals(expected, new HitoriMain().abgabeMöglich(inputStream, data, colors)); + assertEquals(expected, new HitoriLogic().abgabeMöglich(inputStream, data, colors)); } @Test @@ -442,13 +292,6 @@ class HitoriTest{ {"B", "W", "W", "B"} }; boolean expected = false; - assertNotEquals(expected, new HitoriMain().abgabeMöglich(inputStream, data, colors)); + assertNotEquals(expected, new HitoriLogic().abgabeMöglich(inputStream, data, colors)); } -} - - - - - - - +} \ No newline at end of file diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/log4j2.xml b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/log4j2.xml similarity index 100% rename from PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/log4j2.xml rename to PR2Projekt/src/test/java/de/hs_mannheim/informatik/test/log4j2.xml