Test6660049.java revision 1510
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * This code is free software; you can redistribute it and/or modify it
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * under the terms of the GNU General Public License version 2 only, as
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * published by the Free Software Foundation.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * This code is distributed in the hope that it will be useful, but WITHOUT
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * version 2 for more details (a copy is included in the LICENSE file that
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * accompanied this code).
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * You should have received a copy of the GNU General Public License version
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * 2 along with this work; if not, write to the Free Software Foundation,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * CA 95054 USA or visit www.sun.com if you need additional information or
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * have any questions.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * @test
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * @bug 6660049 6849518
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * @summary Tests the Region initialization
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * @author Sergey Malenkov
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenimport sun.awt.SunToolkit;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenimport javax.swing.JButton;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenimport javax.swing.JComponent;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenimport javax.swing.SwingUtilities;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenimport javax.swing.plaf.synth.Region;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenimport javax.swing.plaf.synth.SynthLookAndFeel;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenpublic class Test6660049 implements Runnable {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen public static void main(String[] args) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen SwingUtilities.invokeLater(new Test6660049(
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JButton.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JCheckBox.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JCheckBoxMenuItem.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JColorChooser.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JComboBox.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JDesktopPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JEditorPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JFileChooser.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JFormattedTextField.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JInternalFrame.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JLabel.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JList.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JMenu.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JMenuBar.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JMenuItem.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JOptionPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JPanel.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JPasswordField.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JPopupMenu.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JProgressBar.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JRadioButton.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JRadioButtonMenuItem.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JRootPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JScrollBar.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JScrollPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JSeparator.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JSlider.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JSpinner.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JSplitPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JTabbedPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JTable.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JTextArea.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JTextField.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JTextPane.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JToggleButton.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JToolBar.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JToolTip.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JTree.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.JViewport.class,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen javax.swing.table.JTableHeader.class));
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen private final Class<? extends JComponent>[] types;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen private final Region region;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen private Test6660049(Class<? extends JComponent>... types) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen this.types = types;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen run();
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen this.region = new Region("Button", "ButtonUI", true) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen @Override
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen public String getName() {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen throw new Error("6660049: exploit is available");
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen };
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen public void run() {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen if (this.region != null) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen SunToolkit.createNewAppContext();
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen for (Class<? extends JComponent> type : this.types) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen Region region = getRegion(type);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen if (region == null) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen throw new Error("6849518: region is not initialized");
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen getRegion(JButton.class).getName();
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen private static Region getRegion(Class<? extends JComponent> type) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen try {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen return SynthLookAndFeel.getRegion(type.newInstance());
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen catch (IllegalAccessException exception) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen throw new Error("unexpected exception", exception);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen catch (InstantiationException exception) {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen throw new Error("unexpected exception", exception);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen }
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen}
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen