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. */ private static final Logger logger = LogManager.getLogger(DotsAndBoxesGridTest.class); /* * 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 * or more assertions to check that a condition holds. * * This is a dummy test just to show that the test suite itself runs */ @Test public void testTestSuiteRuns() { logger.info("Dummy test to show the test suite runs"); assertTrue(true); } /* * This test draws a box and checks that the box is drawn. * Given that the boxComplete method always returns true, this test should always pass. */ @Test public void boxCompleteDetectsCompletedBoxes() { DotsAndBoxesGrid grid = new DotsAndBoxesGrid(3, 3, 2); grid.drawHorizontal(0, 0, 1); grid.drawHorizontal(0, 1, 1); grid.drawVertical(0, 0, 1); grid.drawVertical(1, 0, 1); assertTrue(grid.boxComplete(0, 0)); } /* * This test draws an incomplete box and checks that the box is not drawn. * Given that the boxComplete method always returns true, this test should always fail. */ @Test public void boxCompleteDetectsIncompleteBoxes() { DotsAndBoxesGrid grid = new DotsAndBoxesGrid(3, 3, 2); grid.drawHorizontal(0, 0, 1); grid.drawHorizontal(0, 1, 1); grid.drawVertical(0, 0, 1); assertFalse(grid.boxComplete(0, 0)); } /* * This test detects whether the drawHorizontal and drawVertical methods throw an exception if the line already has been drawn. * Given that the drawHorizontal and drawVertical methods do not currently throw an exception, this test should always fail. */ @Test public void drawMethodsDetectRedrawnLines() { DotsAndBoxesGrid grid = new DotsAndBoxesGrid(3, 3, 2); grid.drawHorizontal(0, 0, 1); assertThrows(IllegalStateException.class, () -> grid.drawHorizontal(0, 0, 1)); grid.drawVertical(0, 0, 1); assertThrows(IllegalStateException.class, () -> grid.drawVertical(0, 0, 1)); } }