Skip to content

Commit

Permalink
test: ensure selection does not retrigger validation
Browse files Browse the repository at this point in the history
There is a timing issue where getting the selected item could change the validation state before the assertion.
  • Loading branch information
rhwood committed Jun 20, 2019
1 parent 57a0b39 commit 89ae867
Showing 1 changed file with 24 additions and 24 deletions.
48 changes: 24 additions & 24 deletions java/test/jmri/swing/NamedBeanComboBoxTest.java
Expand Up @@ -205,21 +205,21 @@ public void testSensorTestProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
Sensor s1 = t.getSelectedItem();
assertEquals(s1, m.getBeanBySystemName("IS1"));
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input

// clear manager
m.deregister(s1);
Expand All @@ -231,21 +231,21 @@ public void testSensorTestProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertEquals(Validation.Type.INFORMATION, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
s1 = t.getSelectedItem();
assertEquals(s1, m.getBeanBySystemName("IS1"));
assertEquals(Validation.Type.INFORMATION, ((JInputValidator) c.getInputVerifier()).getValidation().getType());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.DANGER, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input

// clear manager
m.deregister(s1);
Expand All @@ -257,21 +257,21 @@ public void testSensorTestProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
s1 = t.getSelectedItem();
assertEquals(s1, m.getBeanBySystemName("IS1"));
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input

// clear manager
m.deregister(s1);
Expand All @@ -283,23 +283,23 @@ public void testSensorTestProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

t.setSelectedItem(null); // change selection to verify selection changes
assertNull(t.getSelectedItem());
c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertEquals(Validation.Type.INFORMATION, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
s1 = t.getSelectedItem();
assertEquals(s1, m.getBeanBySystemName("IS1"));
assertEquals(Validation.Type.INFORMATION, ((JInputValidator) c.getInputVerifier()).getValidation().getType());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.DANGER, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s1, t.getSelectedItem()); // selection did not change because of invalid input
}

@Test
Expand All @@ -321,20 +321,20 @@ public void testSensorTestNonProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

// test with no matching bean and isValidatingInput() == true
// should match NONE when empty and WARNING otherwise
Expand All @@ -343,20 +343,20 @@ public void testSensorTestNonProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.WARNING, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.WARNING, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

// test with a matching bean and isValidatingInput() == false
// should always match NONE
Expand All @@ -366,20 +366,20 @@ public void testSensorTestNonProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertNull(t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertNull(t.getSelectedItem());

c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertEquals(s, t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s, t.getSelectedItem());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertEquals(s, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s, t.getSelectedItem()); // selection did not change because of invalid input

// test with a matching bean and isValidatingInput() == true
// should match WARNING with text "K " and NONE otherwise
Expand All @@ -388,22 +388,22 @@ public void testSensorTestNonProvidingValidity()
c.setText("");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("", c.getText());
assertEquals(s, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s, t.getSelectedItem()); // selection did not change because of invalid input

t.setSelectedItem(null); // change selection to verify selection changes
assertNull(t.getSelectedItem());
c.setText("IS1");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("IS1", c.getText());
assertEquals(s, t.getSelectedItem());
assertEquals(Validation.Type.NONE, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s, t.getSelectedItem());

c.setText("K ");
c.getInputVerifier().verify(c); // manually force validation because not on AWT thread
assertEquals("K ", c.getText());
assertEquals(s, t.getSelectedItem()); // selection did not change because of invalid input
assertEquals(Validation.Type.WARNING, ((JInputValidator) c.getInputVerifier()).getValidation().getType());
assertEquals(s, t.getSelectedItem()); // selection did not change because of invalid input
}

@Test
Expand Down

0 comments on commit 89ae867

Please sign in to comment.