Index: src/test/api/java/common/javax/swing/JComponentTest.java =================================================================== --- src/test/api/java/common/javax/swing/JComponentTest.java (revision 480897) +++ src/test/api/java/common/javax/swing/JComponentTest.java (working copy) @@ -2316,6 +2316,20 @@ assertTrue(button.isValid()); button.revalidate(); assertFalse(button.isValid()); + + frame.getRootPane().validate(); + assertTrue(button.isValid()); + + final Marker rm = new Marker(); + RepaintManager.setCurrentManager(new RepaintManager() { + public void addInvalidComponent(final JComponent invalidComponent) { + rm.setAuxiliary(invalidComponent); + } + }); + button.revalidate(); + assertFalse(button.isValid()); + assertSame(button, rm.getAuxiliary()); + frame.dispose(); } Index: src/test/api/java/common/javax/swing/RepaintManagerTest.java =================================================================== --- src/test/api/java/common/javax/swing/RepaintManagerTest.java (revision 480897) +++ src/test/api/java/common/javax/swing/RepaintManagerTest.java (working copy) @@ -24,6 +24,7 @@ import java.awt.Button; import java.awt.Dimension; import java.awt.EventQueue; +import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; @@ -72,11 +73,9 @@ assertNotNull(RepaintManager.currentManager(null)); } - public void testAddInvalidComponent() throws Exception { - if (!isHarmony()) { - return; - } - JPanel root = new JPanel() { + public void testAddRemoveInvalidComponent() throws Exception { + Frame f = new Frame(); + final JPanel rootPanel = new JPanel(new BorderLayout()) { private static final long serialVersionUID = 1L; @Override @@ -84,30 +83,89 @@ return true; } }; - final Marker marker = new Marker(); - JPanel inner = new JPanel() { - private static final long serialVersionUID = 1L; + final JPanel controlled = new JPanel(); + f.add(rootPanel); + rootPanel.add(controlled); - @Override - public void validate() { - super.validate(); - marker.setOccurred(); + assertFalse(controlled.isValid()); + assertFalse(rootPanel.isValid()); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); } - }; - JFrame f = new JFrame(); - f.getContentPane().add(root); - root.add(inner); + }); + + final Marker isValid = new Marker(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + isValid.setOccurred(controlled.isValid()); + } + }); + assertFalse(isValid.isOccurred()); + f.setVisible(true); - RepaintManager.currentManager(null).addInvalidComponent(inner); waitForIdle(); - assertTrue(marker.isOccurred()); + assertTrue(controlled.isValid()); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); + } + }); + assertTrue(controlled.isValid()); + assertTrue(rootPanel.isValid()); + + isValid.reset(); + controlled.invalidate(); + waitForIdle(); + assertFalse(controlled.isValid()); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); + } + }); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + isValid.setOccurred(controlled.isValid()); + } + }); + assertTrue(isValid.isOccurred()); + + isValid.reset(); + controlled.invalidate(); + assertFalse(controlled.isValid()); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); + RepaintManager.currentManager(null).removeInvalidComponent(controlled); + } + }); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + isValid.setOccurred(controlled.isValid()); + } + }); + assertTrue(isValid.isOccurred()); + + isValid.reset(); + controlled.invalidate(); + assertFalse(controlled.isValid()); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); + RepaintManager.currentManager(null).removeInvalidComponent(rootPanel); + } + }); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + isValid.setOccurred(controlled.isValid()); + } + }); + assertFalse(isValid.isOccurred()); } public void testValidateInvalidComponents() throws Exception { - if (!isHarmony()) { - return; - } - JPanel root = new JPanel() { + Frame f = new Frame(); + final JPanel rootPanel = new JPanel(new BorderLayout()) { private static final long serialVersionUID = 1L; @Override @@ -115,24 +173,38 @@ return true; } }; - final Marker marker = new Marker(); - JPanel inner = new JPanel() { - private static final long serialVersionUID = 1L; + final JPanel controlled = new JPanel(); + f.add(rootPanel); + rootPanel.add(controlled); - @Override - public void validate() { - super.validate(); - marker.setOccurred(); + f.setVisible(true); + waitForIdle(); + assertTrue(controlled.isValid()); + controlled.invalidate(); + assertFalse(controlled.isValid()); + final Marker isValid = new Marker(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); + RepaintManager.currentManager(null).validateInvalidComponents(); + isValid.setOccurred(controlled.isValid()); } - }; - JFrame f = new JFrame(); - f.getContentPane().add(root); - root.add(inner); - f.setVisible(true); - RepaintManager.currentManager(null).addInvalidComponent(inner); - RepaintManager.currentManager(null).validateInvalidComponents(); - assertTrue(marker.isOccurred()); + }); + assertTrue(isValid.isOccurred()); + f.dispose(); + isValid.reset(); + controlled.invalidate(); + assertFalse(controlled.isValid()); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + RepaintManager.currentManager(null).addInvalidComponent(controlled); + RepaintManager.currentManager(null).removeInvalidComponent(rootPanel); + RepaintManager.currentManager(null).validateInvalidComponents(); + isValid.setOccurred(controlled.isValid()); + } + }); + assertFalse(isValid.isOccurred()); } public void testAddDirtyRegion() throws Exception {