Package javax.swing

Source Code of javax.swing.JComponent_MultithreadedTest$RunnableResulted

/*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
package javax.swing;

import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FocusTraversalPolicy;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicLookAndFeel;

public class JComponent_MultithreadedTest extends BasicSwingTestCase {
    protected JComponent panel;

    protected JFrame window;

    class MyInputVerifier extends InputVerifier {
        public boolean invoked = false;

        private boolean returnedValue = true;

        MyInputVerifier() {
        }

        MyInputVerifier(final boolean returnedValue) {
            this.returnedValue = returnedValue;
        }

        @Override
        public boolean verify(final JComponent input) {
            invoked = true;
            return returnedValue;
        }
    }

    class RunnableResulted implements Runnable {
        public boolean result = false;

        public void run() {
            result = true;
        }
    }

    /*
     * Requests focus for the component and waits until it really
     * becomes focused.
     */
    protected boolean requestFocusInWindowForComponent(final JComponent c, int maxWaitTime)
            throws Exception {
        FocusListener listener = addFocusListener(c);
        RunnableResulted thread = new RunnableResulted() {
            @Override
            public void run() {
                result = c.requestFocusInWindow();
            }
        };
        SwingUtilities.invokeAndWait(thread);
        if (!thread.result) {
            return false;
        }
        synchronized (listener) {
            listener.wait(maxWaitTime);
        }
        waitForIdle();
        if (!c.isFocusOwner()) {
            fail();
        }
        return true;
    }

    /*
     * Requests focus for the component and waits until it really
     * becomes focused.
     */
    protected boolean requestFocusInWindowForComponent(final JComponent c, final boolean temporarily,
                                                       int maxWaitTime) throws Exception {
        FocusListener listener = addFocusListener(c);
        RunnableResulted thread = new RunnableResulted() {
            @Override
            public void run() {
                result = c.requestFocusInWindow(temporarily);
            }
        };
        SwingUtilities.invokeAndWait(thread);
        if (!thread.result) {
            return false;
        }
        synchronized (listener) {
            listener.wait(maxWaitTime);
        }
        waitForIdle();
        if (!c.isFocusOwner()) {
            fail();
        }
        return true;
    }

    /*
     * Requests focus for the component and waits until it really
     * becomes focused.
     */
    protected void requestFocusForComponent(final JComponent c, int maxWaitTime) throws Exception {
        FocusListener listener = addFocusListener(c);
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                c.requestFocus();
            }
        });
        synchronized (listener) {
            listener.wait(maxWaitTime);
        }
        waitForIdle();
    }

    /*
     * Requests focus for the component and waits until it really
     * becomes focused.
     */
    protected void requestDefaultFocusForComponent(final JComponent c, final Component newFocusOwner,
                                                   int maxWaitTime) throws Exception {
        FocusListener listener = addFocusListener(newFocusOwner);
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                c.requestDefaultFocus();
            }
        });
        synchronized (listener) {
            listener.wait(maxWaitTime);
        }
        waitForIdle();
    }

    /*
     * Requests focus for the component and waits until it really
     * becomes focused.
     */
    protected void requestFocusForComponent(final JComponent c, final boolean temporarily,
                                            int maxWaitTime) throws Exception {
        FocusListener listener = addFocusListener(c);
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                c.requestFocus(temporarily);
            }
        });

        synchronized (listener) {
            listener.wait(maxWaitTime);
        }
        waitForIdle();
        if (!c.isFocusOwner()) {
            fail();
        }
    }

    /*
     * Requests focus for the component and waits until it really
     * becomes focused.
     */
    protected void grabFocusForComponent(final JComponent c, int maxWaitTime) throws Exception {
        FocusListener listener = addFocusListener(c);
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                c.grabFocus();
            }
        });

        synchronized (listener) {
            listener.wait(maxWaitTime);
        }
        waitForIdle();
        if (!c.isFocusOwner()) {
            fail();
        }
    }

    /**
     * Constructor for JComponentTest_Multithreaded.
     */
    public JComponent_MultithreadedTest(final String str) {
        super(str);
    }

    /*
     * @see TestCase#setUp()
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        panel = new JPanel();
        window = new JFrame();
    }

    /*
     * @see TestCase#tearDown()
     */
    @Override
    protected void tearDown() throws Exception {
        window.dispose();
        super.tearDown();
    }

    /*
     * Class under test for void requestFocus()
     */
    @SuppressWarnings("deprecation")
    public void testRequestFocus() throws Exception {
        MyInputVerifier verifier = new MyInputVerifier();
        JComponent panel1 = new JPanel();
        JComponent panel2 = new JPanel();
        JComponent panel3 = new JPanel();
        JComponent panel4 = new JPanel();
        window.getContentPane().add(panel1);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.getContentPane().add(panel4);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel1);
        panel1.setInputVerifier(verifier);
        panel2.setVerifyInputWhenFocusTarget(true);
        requestFocusForComponent(panel2, 1000);
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        requestFocusForComponent(panel1, 1000);
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        requestFocusForComponent(panel2, 1000);
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
    }

    /*
     * Class under test for boolean requestFocusInWindow()
     */
    @SuppressWarnings("deprecation")
    public void testRequestFocusInWindow() throws Exception {
        MyInputVerifier verifier = new MyInputVerifier();
        MyInputVerifier verifier2 = new MyInputVerifier(false);
        JComponent panel1 = new JPanel();
        JComponent panel2 = new JPanel();
        JComponent panel3 = new JPanel();
        JComponent panel4 = new JPanel();
        window.getContentPane().add(panel1);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.getContentPane().add(panel4);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel1);
        panel1.setInputVerifier(verifier);
        panel2.setVerifyInputWhenFocusTarget(true);
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel2, 1000));
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel1, 1000));
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel2, 1000));
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        panel1.setVerifyInputWhenFocusTarget(true);
        panel2.setInputVerifier(verifier2);
        assertFalse("focus can be gained ", requestFocusInWindowForComponent(panel1, true, 1000));
        assertTrue("verifier's invoked ", verifier2.invoked);
        assertFalse("focus's gained ", panel1.isFocusOwner());
        verifier.invoked = false;
    }

    /*
     * Class under test for boolean requestFocus(boolean)
     */
    @SuppressWarnings("deprecation")
    public void testRequestFocusboolean() throws Exception {
        MyInputVerifier verifier = new MyInputVerifier();
        JComponent panel1 = new JPanel();
        JComponent panel2 = new JPanel();
        JComponent panel3 = new JPanel();
        JComponent panel4 = new JPanel();
        window.getContentPane().add(panel1);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.getContentPane().add(panel4);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel1);
        panel1.setInputVerifier(verifier);
        panel2.setVerifyInputWhenFocusTarget(true);
        requestFocusForComponent(panel2, false, 1000);
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        requestFocusForComponent(panel1, false, 1000);
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        requestFocusForComponent(panel2, false, 1000);
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        requestFocusForComponent(panel1, false, 1000);
        assertEquals("focus's gained ", true, panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(true);
        requestFocusForComponent(panel2, true, 1000);
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        requestFocusForComponent(panel1, true, 1000);
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        requestFocusForComponent(panel2, true, 1000);
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
    }

    /*
     * Class under test for boolean requestFocusInWindow(boolean)
     */
    @SuppressWarnings("deprecation")
    public void testRequestFocusInWindowboolean() throws Exception {
        MyInputVerifier verifier = new MyInputVerifier();
        MyInputVerifier verifier2 = new MyInputVerifier(false);
        JComponent panel1 = new JPanel();
        JComponent panel2 = new JPanel();
        JComponent panel3 = new JPanel();
        JComponent panel4 = new JPanel();
        window.getContentPane().add(panel1);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.getContentPane().add(panel4);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel1);
        panel1.setInputVerifier(verifier);
        panel2.setVerifyInputWhenFocusTarget(true);
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel2, false, 1000));
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel1, false, 1000));
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel2, false, 1000));
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel1, false, 1000));
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(true);
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel2, true, 1000));
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel1, true, 1000));
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        assertTrue("focus can be gained ", requestFocusInWindowForComponent(panel2, true, 1000));
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        panel1.setVerifyInputWhenFocusTarget(true);
        panel2.setInputVerifier(verifier2);
        assertFalse("focus can be gained ", requestFocusInWindowForComponent(panel1, true, 1000));
        assertTrue("verifier's invoked ", verifier2.invoked);
        assertFalse("focus's gained ", panel1.isFocusOwner());
        verifier.invoked = false;
    }

    @SuppressWarnings("deprecation")
    public void testGrabFocus() throws Exception {
        MyInputVerifier verifier = new MyInputVerifier();
        JComponent panel1 = new JPanel();
        JComponent panel2 = new JPanel();
        JComponent panel3 = new JPanel();
        JComponent panel4 = new JPanel();
        window.getContentPane().add(panel1);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.getContentPane().add(panel4);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel1);
        panel1.setInputVerifier(verifier);
        panel2.setVerifyInputWhenFocusTarget(true);
        grabFocusForComponent(panel2, 1000);
        assertTrue("verifier's invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
        verifier.invoked = false;
        grabFocusForComponent(panel1, 1000);
        assertTrue("focus's gained ", panel1.isFocusOwner());
        panel2.setVerifyInputWhenFocusTarget(false);
        grabFocusForComponent(panel2, 1000);
        assertFalse("verifier's not invoked ", verifier.invoked);
        assertTrue("focus's gained ", panel2.isFocusOwner());
    }

    @SuppressWarnings("deprecation")
    public void testRequestDefaultFocus() throws Exception {
        final JComponent panel1 = new JPanel();
        final JComponent panel2 = new JPanel();
        final JComponent panel3 = new JPanel();
        final JComponent panel4 = new JPanel(); // this component is to be returned
                                                // by our FocusTraversalPolicy()
        FocusTraversalPolicy policy = new FocusTraversalPolicy() {
            @Override
            public Component getComponentAfter(final Container a0, final Component a1) {
                return null;
            }

            @Override
            public Component getComponentBefore(final Container a0, final Component a1) {
                return null;
            }

            @Override
            public Component getDefaultComponent(final Container a0) {
                return panel4;
            }

            @Override
            public Component getFirstComponent(final Container a0) {
                return null;
            }

            @Override
            public Component getLastComponent(final Container a0) {
                return null;
            }
        };
        window.getContentPane().add(panel1);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.getContentPane().add(panel4);
        window.pack();
        window.show();
        waitForIdle();
        requestDefaultFocusForComponent(panel2, window, 100);
        assertTrue("focus's gained ", window.isFocusOwner());
        panel3.setFocusCycleRoot(false);
        panel3.setFocusTraversalPolicy(policy);
        requestDefaultFocusForComponent(panel3, window, 100);
        assertTrue("focus's gained ", window.isFocusOwner());
        panel3.setFocusCycleRoot(true);
        requestDefaultFocusForComponent(panel3, panel4, 100);
        assertTrue("focus's gained ", panel4.isFocusOwner());
        panel3.setFocusCycleRoot(false);
        requestDefaultFocusForComponent(panel3, window, 100);
        assertFalse("focus's gained ", window.isFocusOwner());
    }

    public void testUpdateUI() throws Exception {
        LookAndFeel laf = UIManager.getLookAndFeel();
        try {
            JButton button = new JButton();
            BasicLookAndFeel lookAndFeel1 = new BasicLookAndFeel() {
                private static final long serialVersionUID = 1L;

                @Override
                public boolean isSupportedLookAndFeel() {
                    return true;
                }

                @Override
                public boolean isNativeLookAndFeel() {
                    return false;
                }

                @Override
                public String getName() {
                    return "BasicLookAndFeel";
                }

                @Override
                public String getID() {
                    return "BasicLookAndFeel";
                }

                @Override
                public String getDescription() {
                    return "BasicLookAndFeel";
                }
            };
            UIManager.setLookAndFeel(lookAndFeel1);
            ComponentUI ui = button.getUI();
            assertTrue("current component's ui is correct ", ui.getClass().getName().endsWith(
                    "MetalButtonUI"));
            button.updateUI();
            ui = button.getUI();
            assertTrue("L&F change affected component's ui ", ui.getClass().getName().endsWith(
                    "BasicButtonUI"));
        } finally {
            UIManager.setLookAndFeel(laf);
        }
    }

    public void testRevalidate() throws Exception {
        final JButton button = new JButton("test");
        final JFrame frame = new JFrame();
        EventQueue.invokeAndWait(new Runnable() {
            public void run() {
                frame.getContentPane().add(button);
                frame.setVisible(true);
                assertTrue(button.isValid());
                button.revalidate();
                assertFalse(button.isValid());
            }
        });
        waitForIdle();
        EventQueue.invokeAndWait(new Thread());
        assertTrue(button.isValid());
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                frame.dispose();
            }
        });
    }

    @SuppressWarnings("deprecation")
    public void testAddNotify() throws Exception {
        PropertyChangeController listener = new PropertyChangeController();
        JButton panel1 = new JButton();
        JPanel panel2 = new JPanel();
        JPanel panel3 = new JPanel();
        panel1.addPropertyChangeListener(listener);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel2);
        panel2.add(panel1);
        listener.checkPropertyFired(panel1, "ancestor", null, panel2);
        listener.reset();
        panel3.add(panel1);
        listener.checkPropertyFired(panel1, "ancestor", null, panel3);
    }

    @SuppressWarnings("deprecation")
    public void testRemoveNotify() throws Exception {
        PropertyChangeController listener = new PropertyChangeController();
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JPanel panel3 = new JPanel();
        panel1.addPropertyChangeListener(listener);
        window.getContentPane().add(panel2);
        window.getContentPane().add(panel3);
        window.pack();
        window.show();
        waitForIdle();
        SwingWaitTestCase.requestFocusInWindowForComponent(panel2);
        panel2.add(panel1);
        listener.checkPropertyFired(panel1, "ancestor", null, panel2);
        listener.reset();
        panel3.add(panel1);
        listener.checkPropertyFired(panel1, "ancestor", null, panel3);
    }

    private FocusListener addFocusListener(final Component c) {
        FocusListener listener = new FocusListener() {
            public void focusGained(FocusEvent e) {
                synchronized (this) {
                    notifyAll();
                }
            }

            public void focusLost(FocusEvent e) {
            }
        };
        c.addFocusListener(listener);
        return listener;
    }
}
TOP

Related Classes of javax.swing.JComponent_MultithreadedTest$RunnableResulted

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.