src/test/java/de/uapcore/sudoku/SudokuTextFieldTest.java

Mon, 27 Jul 2020 12:51:20 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 27 Jul 2020 12:51:20 +0200
changeset 16
bddb2633c98b
parent 13
5e69b1bb707f
child 17
aad33a4db18d
permissions
-rw-r--r--

adds numpad test

     1 package de.uapcore.sudoku;
     4 import org.junit.jupiter.api.AfterEach;
     5 import org.junit.jupiter.api.BeforeEach;
     6 import org.junit.jupiter.api.Test;
     8 import javax.swing.*;
     9 import java.awt.event.KeyEvent;
    10 import java.lang.reflect.InvocationTargetException;
    12 import static org.junit.jupiter.api.Assertions.*;
    14 class SudokuTextFieldTest {
    16     private void dispatch(SudokuTextField tf, KeyEvent pressed) {
    17         final var released = new KeyEvent(tf, KeyEvent.KEY_RELEASED, pressed.getWhen()+1,
    18                 pressed.getModifiersEx(), pressed.getKeyCode(), pressed.getKeyChar());
    19         final KeyEvent typed;
    20         if (pressed.getKeyChar() != KeyEvent.CHAR_UNDEFINED) {
    21             typed = new KeyEvent(tf, KeyEvent.KEY_TYPED, pressed.getWhen(),
    22                     pressed.getModifiersEx(), KeyEvent.VK_UNDEFINED, pressed.getKeyChar());
    23         } else {
    24             typed = null;
    25         }
    26         tf.requestFocusInWindow();
    27         tf.dispatchEvent(pressed);
    28         if (typed != null) {
    29             tf.dispatchEvent(typed);
    30         }
    31         tf.dispatchEvent(released);
    32     }
    34     private JFrame testFrame;
    36     @BeforeEach
    37     void createTestFrame() {
    38         // we have to use a visible frame for the events to be dispatched
    39         testFrame = new JFrame();
    40         testFrame.setVisible(true);
    41     }
    43     @AfterEach
    44     void disposeTestFrame() {
    45         testFrame.dispose();
    46     }
    48     private SudokuTextField createTestSubject() {
    49         final var tf = new SudokuTextField();
    50         testFrame.add(tf);
    51         return tf;
    52     }
    54     @Test
    55     void getValue() {
    57     }
    59     @Test
    60     void setValue() {
    61         // given
    62         final var tf = createTestSubject();
    63         for (int i = 0 ; i <= 9 ; i++) {
    64             // when
    65             tf.setValue(i);
    66             // then
    67             assertEquals(i, tf.getValue());
    68             assertEquals(i == 0 ? "" : String.valueOf(i), tf.getText());
    69             assertFalse(tf.isModified());
    70         }
    71     }
    73     @Test
    74     void setInvalidValue() {
    75         // given
    76         final var tf = createTestSubject();
    77         // when / then
    78         assertThrows(IllegalArgumentException.class, () -> tf.setValue(10));
    79         assertThrows(IllegalArgumentException.class, () -> tf.setValue(-1));
    80         assertFalse(tf.isModified());
    81     }
    83     @Test
    84     void testModifiedByCall() {
    85         // given
    86         final var tf = createTestSubject();
    87         // then initially
    88         assertFalse(tf.isModified());
    89         // when
    90         tf.setModified(true);
    91         // then
    92         assertTrue(tf.isModified());
    93         // when
    94         tf.setModified(false);
    95         // then
    96         assertFalse(tf.isModified());
    97     }
    99     @Test
   100     void testModifiedByKeystroke() throws InvocationTargetException, InterruptedException {
   101         // given
   102         final var tf = createTestSubject();
   103         assertFalse(tf.isModified());
   104         final var event = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   105                 0, KeyEvent.VK_4, '4');
   106         SwingUtilities.invokeAndWait(() -> {
   107             // when
   108             dispatch(tf, event);
   109             // then
   110             assertTrue(tf.isModified());
   111         });
   112     }
   114     @Test
   115     void testTextChangeByKeystore() throws InvocationTargetException, InterruptedException {
   116         // given
   117         final var tf = createTestSubject();
   118         assertEquals("", tf.getText());
   119         final var event = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   120                 0, KeyEvent.VK_4, '4');
   121         SwingUtilities.invokeAndWait(() -> {
   122             // when
   123             dispatch(tf, event);
   124             // then
   125             assertEquals("4", tf.getText());
   126         });
   127     }
   129     @Test
   130     void testNumpad() throws InvocationTargetException, InterruptedException {
   131         // given
   132         final var tf = createTestSubject();
   133         assertEquals("", tf.getText());
   134         final var event = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   135                 0, KeyEvent.VK_NUMPAD4, '4');
   136         SwingUtilities.invokeAndWait(() -> {
   137             // when
   138             dispatch(tf, event);
   139             // then
   140             assertEquals("4", tf.getText());
   141         });
   142     }
   144     @Test
   145     void testTextOverwriteByKeystore() throws InvocationTargetException, InterruptedException {
   146         // given
   147         final var tf = createTestSubject();
   148         tf.setText("6");
   149         tf.selectAll();
   150         final var event = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   151                 0, KeyEvent.VK_4, '4');
   152         SwingUtilities.invokeAndWait(() -> {
   153             // when
   154             dispatch(tf, event);
   155             // then
   156             assertEquals("4", tf.getText());
   157         });
   158     }
   160     @Test
   161     void testNumbersOnly() throws InvocationTargetException, InterruptedException {
   162         // given
   163         final var tf = createTestSubject();
   164         tf.setText("6");
   165         tf.selectAll();
   166         final var event = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   167                 0, KeyEvent.VK_A, 'a');
   168         SwingUtilities.invokeAndWait(() -> {
   169             // when
   170             dispatch(tf, event);
   171             // then
   172             assertEquals("6", tf.getText());
   173         });
   174     }
   176     @Test
   177     void testSingleDigit() throws InvocationTargetException, InterruptedException {
   178         // given
   179         final var tf = createTestSubject();
   180         assertEquals("", tf.getText());
   181         final var firstEvent = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   182                 0, KeyEvent.VK_A, '4');
   183         final var secondEvent = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   184                 0, KeyEvent.VK_A, '6');
   185         SwingUtilities.invokeAndWait(() -> {
   186             // when
   187             dispatch(tf, firstEvent);
   188             dispatch(tf, secondEvent);
   189             // then
   190             assertEquals("4", tf.getText());
   191         });
   192     }
   194     @Test
   195     void testBackspace() throws InvocationTargetException, InterruptedException {
   196         // given
   197         final var tf = createTestSubject();
   198         assertEquals("", tf.getText());
   199         final var typeFour = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   200                 0, KeyEvent.VK_A, '4');
   201         final var typeBackspace = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   202                 0, KeyEvent.VK_BACK_SPACE, KeyEvent.CHAR_UNDEFINED);
   203         final var typeSix = new KeyEvent(tf, KeyEvent.KEY_PRESSED, System.currentTimeMillis(),
   204                 0, KeyEvent.VK_A, '6');
   205         SwingUtilities.invokeAndWait(() -> {
   206             // when
   207             dispatch(tf, typeFour);
   208             dispatch(tf, typeBackspace);
   209             dispatch(tf, typeSix);
   210             // then
   211             assertEquals("6", tf.getText());
   212         });
   213     }
   214 }

mercurial