/* * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * @test %I% %G% * @bug 4935607 * @summary Tests transient properties * @author Sergey Malenkov */ import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.ScrollPane; import java.awt.geom.RectangularShape; import java.awt.im.InputContext; import java.beans.FeatureDescriptor; import java.beans.Transient; import java.util.EventListener; import javax.swing.AbstractButton; import javax.swing.DefaultListSelectionModel; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenuBar; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JViewport; import javax.swing.table.JTableHeader; import javax.swing.text.JTextComponent; public class Test4935607 { public static void main(String[] args) { // test all possible cases test(Null.class); test(True.class); test(False.class); test(NullNull.class); test(TrueNull.class); test(FalseNull.class); test(NullTrue.class); test(TrueTrue.class); test(FalseTrue.class); test(NullFalse.class); test(TrueFalse.class); test(FalseFalse.class); // test transient properties in AWT test(RectangularShape.class, "frame"); // NON-NLS: getFrame() test(Rectangle.class, "bounds"); // NON-NLS: getBounds() test(Dimension.class, "size"); // NON-NLS: getSize() test(Point.class, "location"); // NON-NLS: getLocation() test(Component.class, "foreground"); // NON-NLS: getForeground() test(Component.class, "background"); // NON-NLS: getBackground() test(Component.class, "font"); // NON-NLS: getFont() test(Component.class, "visible"); // NON-NLS: getVisible() test(ScrollPane.class, "scrollPosition"); // NON-NLS: getScrollPosition() test(InputContext.class, "compositionEnabled"); // NON-NLS: getCompositionEnabled() // test transient properties in Swing test(JComponent.class, "minimumSize"); // NON-NLS: getMinimumSize() test(JComponent.class, "preferredSize"); // NON-NLS: getPreferredSize() test(JComponent.class, "maximumSize"); // NON-NLS: getMaximumSize() test(ImageIcon.class, "image"); // NON-NLS: getImage() test(ImageIcon.class, "imageObserver"); // NON-NLS: getImageObserver() test(JMenuBar.class, "helpMenu"); // NON-NLS: getHelpMenu() test(JScrollPane.class, "verticalScrollBar"); // NON-NLS: getVerticalScrollBar() test(JScrollPane.class, "horizontalScrollBar"); // NON-NLS: getHorizontalScrollBar() test(JScrollPane.class, "rowHeader"); // NON-NLS: getRowHeader() test(JScrollPane.class, "columnHeader"); // NON-NLS: getColumnHeader() test(JViewport.class, "extentSize"); // NON-NLS: getExtentSize() test(JTableHeader.class, "defaultRenderer"); // NON-NLS: getDefaultRenderer() test(JList.class, "cellRenderer"); // NON-NLS: getCellRenderer() test(JList.class, "selectedIndices"); // NON-NLS: getSelectedIndices() test(DefaultListSelectionModel.class, "leadSelectionIndex"); // NON-NLS: getLeadSelectionIndex() test(DefaultListSelectionModel.class, "anchorSelectionIndex"); // NON-NLS: getAnchorSelectionIndex() test(JComboBox.class, "selectedIndex"); // NON-NLS: getSelectedIndex() test(JTabbedPane.class, "selectedIndex"); // NON-NLS: getSelectedIndex() test(JTabbedPane.class, "selectedComponent"); // NON-NLS: getSelectedComponent() test(AbstractButton.class, "disabledIcon"); // NON-NLS: getDisabledIcon() test(JLabel.class, "disabledIcon"); // NON-NLS: getDisabledIcon() test(JTextComponent.class, "caret"); // NON-NLS: getCaret() test(JTextComponent.class, "caretPosition"); // NON-NLS: getCaretPosition() test(JTextComponent.class, "selectionStart"); // NON-NLS: getSelectionStart() test(JTextComponent.class, "selectionEnd"); // NON-NLS: getSelectionEnd() } private static void test(Class type) { Object value = getExpectedValue(type); test(value, BeanUtils.getPropertyDescriptor(type, "property")); // NON-NLS: the property to check test(value, BeanUtils.getEventSetDescriptor(type, "eventSet")); // NON-NLS: the event set to check System.out.println(); } private static void test(Class type, String property) { System.out.print(type.getName() + ": "); test(Boolean.TRUE, BeanUtils.getPropertyDescriptor(type, property)); } private static void test(Object expected, FeatureDescriptor fd) { System.out.println(fd.getName()); Object actual = fd.getValue("transient"); // NON-NLS: the attribute name if ((actual == null) ? (expected != null) : !actual.equals(expected)) throw new Error("expected " + expected + " value, but actual value is " + actual); } private static Object getExpectedValue(Class type) { try { return type.getField("VALUE").get(type); // NON-NLS: the field name with expected value } catch (NoSuchFieldException exception) { return null; } catch (IllegalAccessException exception) { throw new Error("unexpected error", exception); } } public static class Null { public Object getProperty() { return this; } public void setProperty(Object object) { } public void addEventSetListener(EventSetListener listener) { } public void removeEventSetListener(EventSetListener listener) { } } public static class True { public static final Boolean VALUE = Boolean.TRUE; @Transient public Object getProperty() { return this; } @Transient public void setProperty(Object object) { } @Transient public void addEventSetListener(EventSetListener listener) { } @Transient public void removeEventSetListener(EventSetListener listener) { } } public static class False { public static final Boolean VALUE = Boolean.FALSE; @Transient(false) public Object getProperty() { return this; } @Transient(false) public void setProperty(Object object) { } @Transient(false) public void addEventSetListener(EventSetListener listener) { } @Transient(false) public void removeEventSetListener(EventSetListener listener) { } } public static class NullNull extends Null { @Override public Object getProperty() { return this; } @Override public void setProperty(Object object) { } @Override public void addEventSetListener(EventSetListener listener) { } @Override public void removeEventSetListener(EventSetListener listener) { } } public static class TrueNull extends Null { public static final Boolean VALUE = Boolean.TRUE; @Override @Transient public Object getProperty() { return this; } @Override @Transient public void setProperty(Object object) { } @Override @Transient public void addEventSetListener(EventSetListener listener) { } @Override @Transient public void removeEventSetListener(EventSetListener listener) { } } public static class FalseNull extends Null { public static final Boolean VALUE = Boolean.FALSE; @Override @Transient(false) public Object getProperty() { return this; } @Override @Transient(false) public void setProperty(Object object) { } @Override @Transient(false) public void addEventSetListener(EventSetListener listener) { } @Override @Transient(false) public void removeEventSetListener(EventSetListener listener) { } } public static class NullTrue extends True { @Override public Object getProperty() { return this; } @Override public void setProperty(Object object) { } @Override public void addEventSetListener(EventSetListener listener) { } @Override public void removeEventSetListener(EventSetListener listener) { } } public static class TrueTrue extends True { @Override @Transient public Object getProperty() { return this; } @Override @Transient public void setProperty(Object object) { } @Override @Transient public void addEventSetListener(EventSetListener listener) { } @Override @Transient public void removeEventSetListener(EventSetListener listener) { } } public static class FalseTrue extends True { public static final Boolean VALUE = Boolean.FALSE; @Override @Transient(false) public Object getProperty() { return this; } @Override @Transient(false) public void setProperty(Object object) { } @Override @Transient(false) public void addEventSetListener(EventSetListener listener) { } @Override @Transient(false) public void removeEventSetListener(EventSetListener listener) { } } public static class NullFalse extends False { @Override public Object getProperty() { return this; } @Override public void setProperty(Object object) { } @Override public void addEventSetListener(EventSetListener listener) { } @Override public void removeEventSetListener(EventSetListener listener) { } } public static class TrueFalse extends False { public static final Boolean VALUE = Boolean.TRUE; @Override @Transient public Object getProperty() { return this; } @Override @Transient public void setProperty(Object object) { } @Override @Transient public void addEventSetListener(EventSetListener listener) { } @Override @Transient public void removeEventSetListener(EventSetListener listener) { } } public static class FalseFalse extends False { @Override @Transient(false) public Object getProperty() { return this; } @Override @Transient(false) public void setProperty(Object object) { } @Override @Transient(false) public void addEventSetListener(EventSetListener listener) { } @Override @Transient(false) public void removeEventSetListener(EventSetListener listener) { } } public static final class EventSetListener implements EventListener { } }