This commit is contained in:
ramollia
2025-09-24 15:44:38 +02:00
parent f80c565a32
commit 9fdd74326a
47 changed files with 139 additions and 286 deletions

85
app/pom.xml Normal file
View File

@@ -0,0 +1,85 @@
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>org.toop</groupId>
<artifactId>pism</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<main-class>org.toop.Main</main-class>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.4</version>
<configuration>
<excludedGroups>stress</excludedGroups>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${main-class}</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.46.1</version>
<configuration>
<!-- optional: limit format enforcement to just the files changed by this feature branch -->
<ratchetFrom>origin/main</ratchetFrom>
<formats>
<!-- you can define as many formats as you want, each is independent -->
<format>
<!-- define the files to apply to -->
<includes>
<include>.gitattributes</include>
<include>.gitignore</include>
</includes>
<!-- define the steps to apply to those files -->
<trimTrailingWhitespace/>
<endWithNewline/>
<indent>
<tabs>true</tabs>
<spacesPerTab>4</spacesPerTab>
</indent>
</format>
</formats>
<!-- define a language-specific format -->
<java>
<googleJavaFormat>
<version>1.28.0</version>
<style>AOSP</style> <!-- GOOGLE (2 indents), AOSP (4 indents) -->
<reflowLongStrings>true</reflowLongStrings>
<formatJavadoc>true</formatJavadoc>
</googleJavaFormat>
</java>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View File

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 956 B

16
framework/pom.xml Normal file
View File

@@ -0,0 +1,16 @@
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>org.toop</groupId>
<artifactId>pism</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.2.6.Final</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" name="AppConfig">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%17.17t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

7
games/pom.xml Normal file
View File

@@ -0,0 +1,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>org.toop</groupId>
<artifactId>pism</artifactId>
<version>1.0-SNAPSHOT</version>
</project>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" name="AppConfig">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%17.17t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

View File

@@ -1,7 +1,5 @@
package org.toop.game.tictactoe; package org.toop.game.tictactoe;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.toop.games.GameBase; import org.toop.games.GameBase;

View File

@@ -1,7 +1,5 @@
package org.toop.game.tictactoe; package org.toop.game.tictactoe;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.toop.games.Player; import org.toop.games.Player;

86
pom.xml
View File

@@ -13,8 +13,6 @@
<maven.compiler.target>25</maven.compiler.target> <maven.compiler.target>25</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<main-class>org.toop.app.Main</main-class>
</properties> </properties>
<dependencies> <dependencies>
@@ -96,85 +94,11 @@
<artifactId>error_prone_annotations</artifactId> <artifactId>error_prone_annotations</artifactId>
<version>2.42.0</version> <version>2.42.0</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.2.6.Final</version>
</dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.4</version>
<configuration>
<excludedGroups>stress</excludedGroups>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version>
<executions> <modules>
<execution> <module>framework</module>
<phase>package</phase> <module>games</module>
<module>app</module>
<goals> </modules>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${main-class}</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.46.1</version>
<configuration>
<!-- optional: limit format enforcement to just the files changed by this feature branch -->
<ratchetFrom>origin/main</ratchetFrom>
<formats>
<!-- you can define as many formats as you want, each is independent -->
<format>
<!-- define the files to apply to -->
<includes>
<include>.gitattributes</include>
<include>.gitignore</include>
</includes>
<!-- define the steps to apply to those files -->
<trimTrailingWhitespace/>
<endWithNewline/>
<indent>
<tabs>true</tabs>
<spacesPerTab>4</spacesPerTab>
</indent>
</format>
</formats>
<!-- define a language-specific format -->
<java>
<googleJavaFormat>
<version>1.28.0</version>
<style>AOSP</style> <!-- GOOGLE (2 indents), AOSP (4 indents) -->
<reflowLongStrings>true</reflowLongStrings>
<formatJavadoc>true</formatJavadoc>
</googleJavaFormat>
</java>
</configuration>
</plugin>
</plugins>
</build>
</project> </project>

View File

@@ -1,109 +0,0 @@
package org.toop.backend;
import static org.junit.jupiter.api.Assertions.*;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.*;
import org.toop.backend.tictactoe.TcpServer;
class TcpServerTest {
static class TestTcpServer extends TcpServer {
public TestTcpServer(int port) throws IOException {
super(port);
}
@Override
public void run() {
// Call super.run() in a separate thread if needed
super.run();
}
}
private TestTcpServer server;
private Thread serverThread;
private int port = 12345;
@BeforeEach
void setup() throws IOException {
server = new TestTcpServer(port);
serverThread = new Thread(server::run);
serverThread.start();
}
@AfterEach
void teardown() {
server.stop();
try {
serverThread.join(1000);
} catch (InterruptedException ignored) {
}
}
@Test
void testServerStartsAndStops() {
assertTrue(server.isRunning());
server.stop();
assertFalse(server.isRunning());
}
@Test
void testClientMessageEnqueued() throws IOException, InterruptedException {
Socket client = new Socket("localhost", port);
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
String message = "hello server";
out.println(message);
String received = server.receivedQueue.poll(1, TimeUnit.SECONDS);
assertEquals(message, received);
client.close();
}
@Test
void testSendQueueSendsToClient() throws IOException, InterruptedException {
Socket client = new Socket("localhost", port);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String msg = "test message";
server.sendQueue.put(msg);
// The server may need some time to deliver
String received = in.readLine();
assertEquals(msg, received);
client.close();
}
// @Test
// void testGetNewestCommand() throws InterruptedException {
// String command = "move 1 2";
// server.receivedQueue.put(command);
//
// ParsedCommand parsed = server.getNewestCommand();
// System.out.println(parsed);
// assertNotNull(parsed);
// assertEquals(command, parsed.returnMessage); TODO: Test later
// }
// @Test
// void testMultipleClients() throws IOException, InterruptedException {
// Socket client1 = new Socket("localhost", port);
// Socket client2 = new Socket("localhost", port);
//
// PrintWriter out1 = new PrintWriter(client1.getOutputStream(), true);
// PrintWriter out2 = new PrintWriter(client2.getOutputStream(), true);
//
// out1.println("msg1");
// out2.println("msg2");
//
// assertEquals("msg1", server.receivedQueue.poll(1, TimeUnit.SECONDS));
// assertEquals("msg2", server.receivedQueue.poll(1, TimeUnit.SECONDS));
//
// client1.close();
// client2.close();
// } TODO: Temp disable for MVP
}

View File

@@ -1,60 +0,0 @@
package org.toop.frontend.math;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class BoundsTest {
private Bounds bounds;
@BeforeEach
void setUp() {
bounds = new Bounds(10, 20, 100, 50);
}
@Test
void testConstructorAndGetters() {
assertEquals(10, bounds.getX());
assertEquals(20, bounds.getY());
assertEquals(100, bounds.getWidth());
assertEquals(50, bounds.getHeight());
}
@Test
void testSetUpdatesFields() {
bounds.set(5, 15, 50, 25);
assertEquals(5, bounds.getX());
assertEquals(15, bounds.getY());
assertEquals(50, bounds.getWidth());
assertEquals(25, bounds.getHeight());
}
@Test
void testCheckInsideBounds() {
// Points inside the bounds
assertTrue(bounds.check(10, 20)); // top-left corner
assertTrue(bounds.check(110, 70)); // bottom-right corner
assertTrue(bounds.check(60, 45)); // inside
}
@Test
void testCheckOutsideBounds() {
// Points outside the bounds
assertFalse(bounds.check(9, 20)); // left
assertFalse(bounds.check(10, 19)); // above
assertFalse(bounds.check(111, 70)); // right
assertFalse(bounds.check(110, 71)); // below
}
@Test
void testCheckOnEdgeBounds() {
// Points on the edges should be considered inside
assertTrue(bounds.check(10, 20)); // top-left
assertTrue(bounds.check(110, 20)); // top-right
assertTrue(bounds.check(10, 70)); // bottom-left
assertTrue(bounds.check(110, 70)); // bottom-right
}
}

View File

@@ -1,32 +0,0 @@
package org.toop.frontend.math;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class ColorTest {
private Color color;
@BeforeEach
void setUp() {
color = new Color(0.1f, 0.5f, 0.9f);
}
@Test
void testConstructorAndGetters() {
assertEquals(0.1f, color.r(), 0.0001, "Red component should match");
assertEquals(0.5f, color.g(), 0.0001, "Green component should match");
assertEquals(0.9f, color.b(), 0.0001, "Blue component should match");
}
@Test
void testDifferentColorValues() {
Color c = new Color(1.0f, 0.0f, 0.5f);
assertEquals(1.0f, c.r(), 0.0001);
assertEquals(0.0f, c.g(), 0.0001);
assertEquals(0.5f, c.b(), 0.0001);
}
}