From ddfb287b03c795fefb8a3efaaa995efa1060346b Mon Sep 17 00:00:00 2001
From: Jennica Llamera <jllamera@myune.edu.au>
Date: Wed, 31 Jul 2024 20:21:14 +1000
Subject: [PATCH] Added unit tests

---
 .../dotsandboxes/DotsAndBoxesGridTest.java    | 54 +++++++++++++++++--
 1 file changed, 50 insertions(+), 4 deletions(-)

diff --git a/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java b/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java
index 1946bed..b465c33 100644
--- a/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java
+++ b/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java
@@ -2,25 +2,33 @@ package dotsandboxes;
 
 import org.junit.jupiter.api.*;
 import static org.junit.jupiter.api.Assertions.*;
-import static org.junit.jupiter.api.Assumptions.*;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 public class DotsAndBoxesGridTest {
     /*
-     * Because Test classes are classes, they can have fields, and can have static fields.
-     * This field is a logger. Loggers are like a more advanced println, for writing messages out to the console or a log file.
+     * Because Test classes are classes, they can have fields, and can have static
+     * fields.
+     * This field is a logger. Loggers are like a more advanced println, for writing
+     * messages out to the console or a log file.
      */
     private static final Logger logger = LogManager.getLogger(DotsAndBoxesGridTest.class);
+    private DotsAndBoxesGrid gridTest;
 
     /*
      * Tests are functions that have an @Test annotation before them.
-     * The typical format of a test is that it contains some code that does something, and then one
+     * The typical format of a test is that it contains some code that does
+     * something, and then one
      * or more assertions to check that a condition holds.
      *
      * This is a dummy test just to show that the test suite itself runs
      */
+    public void setUp() {
+        // Setting up a new DotsAndBoxesGrid for every test
+        gridTest = new DotsAndBoxesGrid(4, 4, 2);
+    }
+
     @Test
     public void testTestSuiteRuns() {
         logger.info("Dummy test to show the test suite runs");
@@ -28,4 +36,42 @@ public class DotsAndBoxesGridTest {
     }
 
     // FIXME: You need to write tests for the two known bugs in the code.
+    @Test
+    public void testScoreCalculation() {
+        logger.info("Testing score calculation on box completion");
+
+        DotsAndBoxesGrid grid = new DotsAndBoxesGrid(4, 3, 2);
+        grid.drawHorizontal(0, 0, 1);
+        grid.drawVertical(0, 0, 1);
+        grid.drawVertical(1, 0, 1);
+        boolean boxCompleted = grid.drawHorizontal(1, 0, 1); // This should complete the box
+
+        // Check if the box was completed and claimed by the correct player
+        assertTrue(boxCompleted, "Box should be completed and claimed");
+        assertEquals(1, grid.getBoxOwner(0, 0), "The box owner should be player 1");
+    }
+
+    @Test
+    public void testInvalidMoveHandling() {
+        logger.info("Testing invalid move handling");
+
+        DotsAndBoxesGrid grid = new DotsAndBoxesGrid(4, 3, 2);
+        grid.drawHorizontal(0, 0, 1);
+        // Attempt to draw the same horizontal line again
+        Exception exception = assertThrows(IndexOutOfBoundsException.class, () -> {
+            grid.drawHorizontal(0, 0, 1); // This should throw an exception
+        });
+
+        assertEquals("Line has already been drawn", exception.getMessage());
+    }
+
+    @Test
+    public void testBoxCompletionLogic() {
+        logger.info("Testing box completion logic");
+
+        DotsAndBoxesGrid grid = new DotsAndBoxesGrid(4, 3, 2);
+        // Attempt to complete a box without drawing all lines
+        boolean isComplete = grid.boxComplete(0, 0);
+        assertFalse(isComplete, "Box should not be complete without all lines drawn");
+    }
 }
-- 
GitLab