Tue, 28 Jul 2020 14:27:14 +0200
bugfix: modified state is reset even when saving fails + more tests
1.1 --- a/src/main/java/de/uapcore/sudoku/ActionHandler.java Tue Jul 28 14:05:04 2020 +0200 1.2 +++ b/src/main/java/de/uapcore/sudoku/ActionHandler.java Tue Jul 28 14:27:14 2020 +0200 1.3 @@ -129,7 +129,6 @@ 1.4 } 1.5 } 1.6 if (solver.check(field)) { 1.7 - field.setAllCellsModified(false); 1.8 try { 1.9 doc.save(field); 1.10 } catch (IOException e) {
2.1 --- a/src/main/java/de/uapcore/sudoku/DocumentHandler.java Tue Jul 28 14:05:04 2020 +0200 2.2 +++ b/src/main/java/de/uapcore/sudoku/DocumentHandler.java Tue Jul 28 14:27:14 2020 +0200 2.3 @@ -81,6 +81,7 @@ 2.4 2.5 /** 2.6 * Saves the specified field to a file. 2.7 + * On success, the modified state of all cells is set to false. 2.8 * 2.9 * @param field the field to save 2.10 * @throws IOException if saving fails or the file name has not been set before 2.11 @@ -101,6 +102,7 @@ 2.12 } 2.13 } 2.14 } 2.15 + field.setAllCellsModified(false); 2.16 } 2.17 2.18 /**
3.1 --- a/src/main/java/de/uapcore/sudoku/Field.java Tue Jul 28 14:05:04 2020 +0200 3.2 +++ b/src/main/java/de/uapcore/sudoku/Field.java Tue Jul 28 14:27:14 2020 +0200 3.3 @@ -152,6 +152,17 @@ 3.4 } 3.5 3.6 /** 3.7 + * Checks the modified state of a specific cell. 3.8 + * 3.9 + * @param x horizontal position 3.10 + * @param y vertical position 3.11 + * @return the modified state 3.12 + */ 3.13 + public boolean isCellModified(int x, int y) { 3.14 + return cells[x][y].isModified(); 3.15 + } 3.16 + 3.17 + /** 3.18 * Sets the modified state of all cells. 3.19 * 3.20 * @param modified the modified state
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/src/test/java/de/uapcore/sudoku/FieldTest.java Tue Jul 28 14:27:14 2020 +0200 4.3 @@ -0,0 +1,154 @@ 4.4 +package de.uapcore.sudoku; 4.5 + 4.6 +import org.junit.jupiter.api.Test; 4.7 + 4.8 +import static org.junit.jupiter.api.Assertions.*; 4.9 + 4.10 +class FieldTest { 4.11 + 4.12 + private int[] createTestdata() { 4.13 + return new int[]{ 4.14 + 0,1,0,9,0,0,8,0,0, 4.15 + 0,0,0,0,0,8,0,0,4, 4.16 + 6,0,5,0,0,0,7,0,0, 4.17 + 0,9,0,0,6,0,0,0,8, 4.18 + 0,0,0,2,0,7,0,0,0, 4.19 + 8,0,0,0,3,0,0,6,0, 4.20 + 0,0,2,0,0,0,5,0,3, 4.21 + 1,0,0,4,0,0,0,0,0, 4.22 + 0,0,6,0,0,2,0,1,0}; 4.23 + } 4.24 + 4.25 + private Field createTestField() { 4.26 + final var field = new Field(); 4.27 + final var testdata = createTestdata(); 4.28 + for (int x = 0 ; x < 9 ; x++) { 4.29 + for (int y = 0 ; y < 9 ; y++) { 4.30 + field.setCellValue(x, y, testdata[x+9*y]); 4.31 + } 4.32 + } 4.33 + return field; 4.34 + } 4.35 + 4.36 + @Test 4.37 + void getAndSetValues() { 4.38 + final var f = new Field(); 4.39 + assertEquals(0, f.getCellValue(3, 4)); 4.40 + assertTrue(f.isCellEmpty(3, 4)); 4.41 + f.setCellValue(3, 4, 6); 4.42 + assertEquals(6, 3, 4); 4.43 + assertFalse(f.isCellEmpty(3, 4)); 4.44 + } 4.45 + 4.46 + @Test 4.47 + void setAllCellsModified() { 4.48 + final var f = new Field(); 4.49 + 4.50 + assertFalse(f.isAnyCellModified()); 4.51 + f.setAllCellsModified(true); 4.52 + for (int x = 0 ; x < 9 ; x++) { 4.53 + for (int y = 0 ; y < 9 ; y++) { 4.54 + assertTrue(f.isCellModified(x, y)); 4.55 + } 4.56 + } 4.57 + 4.58 + f.setAllCellsModified(false); 4.59 + assertFalse(f.isAnyCellModified()); 4.60 + } 4.61 + 4.62 + @Test 4.63 + void isAnyCellModified() { 4.64 + final var f = new Field(); 4.65 + 4.66 + assertFalse(f.isAnyCellModified()); 4.67 + f.setCellValue(3, 4, 6); 4.68 + assertFalse(f.isAnyCellModified()); 4.69 + f.setCellModified(3, 4, true); 4.70 + assertTrue(f.isAnyCellModified()); 4.71 + } 4.72 + 4.73 + @Test 4.74 + void clear() { 4.75 + final var f = new Field(); 4.76 + f.setCellValue(3, 4, 6); 4.77 + f.setCellValue(2, 5, 9); 4.78 + f.clear(); 4.79 + for (int x = 0 ; x < 9 ; x++) { 4.80 + for (int y = 0 ; y < 9 ; y++) { 4.81 + assertTrue(f.isCellEmpty(x, y)); 4.82 + } 4.83 + } 4.84 + } 4.85 + 4.86 + @Test 4.87 + void getSquare() { 4.88 + final var field = createTestField(); 4.89 + 4.90 + final var square01 = new int[][]{ 4.91 + new int[]{0,0,8}, 4.92 + new int[]{9,0,0}, 4.93 + new int[]{0,0,0}}; 4.94 + 4.95 + final var square01actual = field.getSquare(0, 1); 4.96 + assertEquals(3, square01actual.length); 4.97 + for (int i = 0 ; i < 3 ; i++) { 4.98 + assertArrayEquals(square01[i], square01actual[i]); 4.99 + } 4.100 + 4.101 + final var square20 = new int[][]{ 4.102 + new int[]{8,0,7}, 4.103 + new int[]{0,0,0}, 4.104 + new int[]{0,4,0}}; 4.105 + 4.106 + final var square20actual = field.getSquare(2, 0); 4.107 + assertEquals(3, square20actual.length); 4.108 + for (int i = 0 ; i < 3 ; i++) { 4.109 + assertArrayEquals(square20[i], square20actual[i]); 4.110 + } 4.111 + } 4.112 + 4.113 + @Test 4.114 + void getRow() { 4.115 + final var field = createTestField(); 4.116 + 4.117 + final var row3 = new int[]{0,9,0,0,6,0,0,0,8}; 4.118 + final var row4 = new int[]{0,0,0,2,0,7,0,0,0}; 4.119 + 4.120 + assertArrayEquals(row3, field.getRow(3)); 4.121 + assertArrayEquals(row4, field.getRow(4)); 4.122 + } 4.123 + 4.124 + @Test 4.125 + void getColumn() { 4.126 + final var field = createTestField(); 4.127 + 4.128 + final var col2 = new int[]{0,0,5,0,0,0,2,0,6}; 4.129 + final var col6 = new int[]{8,0,7,0,0,0,5,0,0}; 4.130 + 4.131 + assertArrayEquals(col2, field.getColumn(2)); 4.132 + assertArrayEquals(col6, field.getColumn(6)); 4.133 + } 4.134 + 4.135 + @Test 4.136 + void getSquareIAE() { 4.137 + final var field = createTestField(); 4.138 + assertThrows(IllegalArgumentException.class, () -> field.getSquare(3, 2)); 4.139 + assertThrows(IllegalArgumentException.class, () -> field.getSquare(2, 3)); 4.140 + assertThrows(IllegalArgumentException.class, () -> field.getSquare(2, -1)); 4.141 + assertThrows(IllegalArgumentException.class, () -> field.getSquare(-1, 2)); 4.142 + } 4.143 + 4.144 + @Test 4.145 + void getRowIAE() { 4.146 + final var field = createTestField(); 4.147 + assertThrows(IllegalArgumentException.class, () -> field.getRow(9)); 4.148 + assertThrows(IllegalArgumentException.class, () -> field.getRow(-1)); 4.149 + } 4.150 + 4.151 + @Test 4.152 + void getColumnIAE() { 4.153 + final var field = createTestField(); 4.154 + assertThrows(IllegalArgumentException.class, () -> field.getColumn(9)); 4.155 + assertThrows(IllegalArgumentException.class, () -> field.getColumn(-1)); 4.156 + } 4.157 +}
5.1 --- a/src/test/java/de/uapcore/sudoku/SudokuTextFieldTest.java Tue Jul 28 14:05:04 2020 +0200 5.2 +++ b/src/test/java/de/uapcore/sudoku/SudokuTextFieldTest.java Tue Jul 28 14:27:14 2020 +0200 5.3 @@ -1,6 +1,5 @@ 5.4 package de.uapcore.sudoku; 5.5 5.6 - 5.7 import org.junit.jupiter.api.AfterEach; 5.8 import org.junit.jupiter.api.BeforeEach; 5.9 import org.junit.jupiter.api.Test; 5.10 @@ -244,4 +243,37 @@ 5.11 // then 5.12 SwingUtilities.invokeAndWait(() -> assertNull(tf.getSelectedText())); 5.13 } 5.14 -} 5.15 \ No newline at end of file 5.16 + 5.17 + @Test 5.18 + void testFont() { 5.19 + final var tf = new SudokuTextField(); 5.20 + assertEquals(18, tf.getFont().getSize()); 5.21 + } 5.22 + 5.23 + @Test 5.24 + void testAlignment() { 5.25 + final var tf = new SudokuTextField(); 5.26 + assertEquals(JTextField.CENTER, tf.getHorizontalAlignment()); 5.27 + } 5.28 + 5.29 + @Test 5.30 + void testBackground() { 5.31 + final var tf = new SudokuTextField(); 5.32 + assertEquals(Color.WHITE, tf.getBackground()); 5.33 + } 5.34 + 5.35 + @Test 5.36 + void testSize() { 5.37 + final var tf = new SudokuTextField(); 5.38 + final var expected = new Dimension(40, 40); 5.39 + assertEquals(expected, tf.getMinimumSize()); 5.40 + assertEquals(expected, tf.getPreferredSize()); 5.41 + assertEquals(expected, tf.getMaximumSize()); 5.42 + } 5.43 + 5.44 + @Test 5.45 + void testBorder() { 5.46 + final var tf = new SudokuTextField(); 5.47 + assertNull(tf.getBorder()); 5.48 + } 5.49 +}