jdk/test/javax/swing/JTabbedPane/8134116/Bug8134116.java
author ptbrunet
Thu, 12 Nov 2015 12:27:36 -0600
changeset 34393 171a07c89136
child 35673 61884618e67d
permissions -rw-r--r--
8134116: Add more comprehensive fix and regression test for JDK-8133897 Summary: Use getTitleAt instead of Page.title field; add regression test Reviewed-by: alexsch, serb Contributed-by: peter.brunet@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34393
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     1
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     2
import java.awt.*;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     3
import java.awt.event.KeyEvent;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     4
import java.util.ArrayList;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     5
import java.util.List;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     6
import javax.accessibility.Accessible;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     7
import javax.accessibility.AccessibleComponent;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     8
import javax.accessibility.AccessibleContext;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
     9
import javax.accessibility.AccessibleState;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    10
import javax.accessibility.AccessibleStateSet;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    11
import javax.swing.*;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    12
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    13
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    14
/*
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    15
 * @test
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    16
 * @bug 8134116
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    17
 * @summary JTabbedPane$Page.getBounds throws IndexOutOfBoundsException
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    18
 * @run main Bug8134116
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    19
 */
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    20
public class Bug8134116 {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    21
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    22
    public static void main(String args[]) throws Exception {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    23
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    24
        try {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    25
            UIManager.setLookAndFeel(new NimbusLookAndFeel());
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    26
        } catch (Exception e) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    27
            throw new RuntimeException(e);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    28
        }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    29
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    30
        SwingUtilities.invokeAndWait(() -> {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    31
            JPanel panel0 = new JPanel();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    32
            BadPane badPane = new BadPane();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    33
            badPane.add("zero", panel0);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    34
            badPane.add("one", null);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    35
            JFrame frame = new JFrame();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    36
            frame.add(badPane);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    37
            frame.setSize(300, 300);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    38
            frame.setVisible(true);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    39
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    40
            AccessibleContext ac = badPane.getAccessibleContext();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    41
            Accessible page0 = ac.getAccessibleChild(0);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    42
            if (page0 == null) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    43
                // Not something being tested, but checking anyway
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    44
                throw new RuntimeException("getAccessibleChild(0) is null");
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    45
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    46
            Accessible page1 = ac.getAccessibleChild(1);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    47
            if (page1 == null) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    48
                // Not something being tested, but checking anyway
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    49
                throw new RuntimeException("getAccessibleChild(1) is null");
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    50
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    51
            // page0 and page1 are a JTabbedPane.Page, a private inner class
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    52
            // and is an AccessibleContext
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    53
            // and implements Accessible and AccessibleComponent
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    54
            AccessibleContext pac0 = page0.getAccessibleContext();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    55
            AccessibleContext pac1 = page1.getAccessibleContext();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    56
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    57
            // the following would fail if JDK-8134116 fix not present
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    58
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    59
            // test Page.getBounds
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    60
            // ensure no IndexOutOfBoundsException
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    61
            pac0.getAccessibleComponent().getBounds();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    62
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    63
            // test Page.getAccessibleStateSet
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    64
            // At this point page 0 is selected
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    65
            AccessibleStateSet accSS0 = pac0.getAccessibleStateSet();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    66
            if (!accSS0.contains(AccessibleState.SELECTED)) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    67
                String msg = "Empty title -> AccessibleState.SELECTED not set";
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    68
                throw new RuntimeException(msg);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    69
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    70
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    71
            // test Page.getAccessibleIndexInParent
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    72
            if (pac0.getAccessibleIndexInParent() == -1) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    73
                String msg = "Empty title -> negative AccessibleIndexInParent";
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    74
                throw new RuntimeException(msg);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    75
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    76
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    77
            // test Page.getAccessibleName
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    78
            String accName = pac0.getAccessibleName();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    79
            if (!accName.equals("zero")) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    80
                String msg = "Empty title -> empty AccessibleName";
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    81
                throw new RuntimeException(msg);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    82
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    83
            // test Page.getAccessibleName when component is null
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    84
            accName = pac1.getAccessibleName();
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    85
            if (!accName.equals("one")) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    86
                String msg = "AccessibleName of null panel not 'one'";
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    87
                throw new RuntimeException(msg);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    88
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    89
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    90
            // test Page.setDisplayedMnemonicIndex
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    91
            //  Empty title -> IllegalArgumnetException
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    92
            badPane.setDisplayedMnemonicIndexAt(0, 1);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    93
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    94
            // test Page.updateDisplayedMnemonicIndex
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    95
            badPane.setMnemonicAt(0, KeyEvent.VK_Z);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    96
            if (badPane.getDisplayedMnemonicIndexAt(0) == -1) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    97
                String msg="Empty title -> getDisplayedMnemonicIndexAt failure";
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    98
                throw new RuntimeException(msg);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
    99
            }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   100
        });
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   101
    }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   102
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   103
    // The following is likely what is being done in Burp Suite
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   104
    // https://portswigger.net/burp/ which fails in the same way, i.e. the
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   105
    // pages List in JTabbedPane is not being managed properly and thus
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   106
    // Page.title is "" for each page.  The overridden insertTab manages titles
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   107
    // in the subclass passing a "" title to the superclass JTabbedPane through
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   108
    // its insertTab.  Later an overridden getTitleAt returns the titles as
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   109
    // managed by the subclass.
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   110
    static class BadPane extends JTabbedPane {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   111
        private List<String> titles;
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   112
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   113
        BadPane() {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   114
            titles = new ArrayList<String>(1);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   115
        }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   116
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   117
        @Override
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   118
        public void insertTab( String title, Icon icon, Component component,
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   119
                               String tip, int index ) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   120
            titles.add(index, title);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   121
            super.insertTab("", icon, component, tip, index);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   122
        }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   123
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   124
        @Override
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   125
        public String getTitleAt(int i) {
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   126
            return titles.get(i);
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   127
        }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   128
    }
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   129
171a07c89136 8134116: Add more comprehensive fix and regression test for JDK-8133897
ptbrunet
parents:
diff changeset
   130
}