bugfix: modified state is reset even when saving fails + more tests

Tue, 28 Jul 2020 14:27:14 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 28 Jul 2020 14:27:14 +0200
changeset 22
06170a0be62a
parent 21
11cb2d9413d4
child 23
07b9adaed78e

bugfix: modified state is reset even when saving fails + more tests

src/main/java/de/uapcore/sudoku/ActionHandler.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/sudoku/DocumentHandler.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/sudoku/Field.java file | annotate | diff | comparison | revisions
src/test/java/de/uapcore/sudoku/FieldTest.java file | annotate | diff | comparison | revisions
src/test/java/de/uapcore/sudoku/SudokuTextFieldTest.java file | annotate | diff | comparison | revisions
     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 +}

mercurial