| /******************************************************************************* |
| * Copyright (c) 2003, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jem.tests.beaninfo; |
| /* |
| * $RCSfile: TestAWTSwingUI.java,v $ |
| * $Revision: 1.7 $ $Date: 2005/02/15 23:00:16 $ |
| */ |
| import java.io.BufferedReader; |
| import java.io.FileNotFoundException; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.InputStreamReader; |
| import java.io.PrintWriter; |
| import java.net.URL; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.ENamedElement; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.jem.internal.beaninfo.MethodProxy; |
| import org.eclipse.jem.internal.beaninfo.PropertyDecorator; |
| import org.eclipse.jem.internal.beaninfo.core.Utilities; |
| import org.eclipse.jem.java.JavaClass; |
| import org.eclipse.jem.tests.JavaTestsPlugin; |
| |
| /** |
| * @author richkulp |
| * |
| * AWT/Swing tests |
| */ |
| public class TestAWTSwingUI extends AbstractBeanInfoTestCase { |
| |
| /** |
| * |
| */ |
| public TestAWTSwingUI() { |
| super(); |
| } |
| |
| /** |
| * @param name |
| */ |
| public TestAWTSwingUI(String name) { |
| super(name); |
| } |
| |
| /* |
| * The number of properties keep increasing by version, |
| * but there is a minimal set. This minimal set will be |
| * stored in a file and can be loaded by this method. |
| * This set can be used to make sure that at least the |
| * required properties are there. |
| * |
| * The filename has to be relative to the tests plugin. |
| */ |
| protected Set getNames(String filename) throws IOException { |
| Set names = new HashSet(50); |
| URL url = JavaTestsPlugin.getPlugin().getBundle().getEntry(filename); |
| assertNotNull(url); |
| BufferedReader rdr = new BufferedReader(new InputStreamReader(url.openStream())); |
| try { |
| String line = null; |
| while ((line = rdr.readLine()) != null) |
| names.add(line); |
| } finally { |
| rdr.close(); |
| } |
| return names; |
| } |
| |
| /* |
| * Test the names against the set. Print those not found in the set, |
| * or those in the againstSet that weren't found. Throw assert error if |
| * any from against set not found. |
| * |
| */ |
| protected void testIncludesAllNames(String id, List testNames, Set againstSet, Set exclude) { |
| Set workingAgainst = new HashSet(againstSet.size()); |
| workingAgainst.addAll(againstSet); // There may be dup testNames (like for operations), so in that case we leave againstSet alone. |
| boolean wroteAny = false; |
| for (Iterator itr = testNames.iterator(); itr.hasNext();) { |
| ENamedElement testName = (ENamedElement) itr.next(); |
| if (exclude.contains(testName)) |
| continue; // This is one we want to ignore |
| if (againstSet.contains(testName.getName())) |
| workingAgainst.remove(testName.getName()); // Get rid of it since found. |
| else { |
| if (!wroteAny) { |
| wroteAny = true; |
| System.out.println("Names in list that are new for " + id + ':'); |
| } |
| System.out.print(" "); |
| System.out.println(testName.getName()); |
| } |
| } |
| if (wroteAny) |
| System.out.println("End of new names."); |
| |
| if (!workingAgainst.isEmpty()) { |
| System.out.println("Names that should of been found, but weren't for " + id + ':'); |
| for (Iterator itr = workingAgainst.iterator(); itr.hasNext();) { |
| String name = (String) itr.next(); |
| System.out.print(" "); |
| System.out.println(name); |
| } |
| System.out.println("End of missing names"); |
| fail("Missing some required names for "+id+'.'); |
| } |
| } |
| |
| /* |
| * Write the names out. Call only when want to update list. Filename must |
| * be a local file. |
| */ |
| protected void writeNames(String filename, List props, Set excluding) throws FileNotFoundException { |
| PrintWriter pr = new PrintWriter(new FileOutputStream(filename)); |
| try { |
| for (Iterator itr = props.iterator(); itr.hasNext();) { |
| ENamedElement element = (ENamedElement) itr.next(); |
| if (excluding != null && excluding.contains(element)) |
| continue; |
| pr.println(element.getName()); |
| } |
| } finally { |
| pr.close(); |
| } |
| } |
| |
| /** |
| * Reflect the entire super type hierarchy of the class passed in, including the class itself. |
| * @param jclass |
| */ |
| protected void reflectHierachy(JavaClass jclass) { |
| JavaClass loopClass = jclass; |
| while (loopClass != null) { |
| System.out.println("Reflecting for " + loopClass.getQualifiedName()); //$NON-NLS-1$ |
| loopClass.isFinal(); // This causes reflection. |
| loopClass = loopClass.getSupertype(); |
| } |
| } |
| |
| /** |
| * Use when the compares don't match to get a sorted list of operations so that |
| * manually verify the count. |
| * @param jclass |
| */ |
| protected void showSortedOperations(JavaClass jclass) { |
| List allB = jclass.getEAllOperations(); |
| String[] names = new String[allB.size()]; |
| for (int i = 0; i < names.length; i++) { |
| names[i] = ((MethodProxy) allB.get(i)).getMethod().getMethodElementSignature(); |
| } |
| Arrays.sort(names); |
| System.out.println("--- List of Operations for " + jclass.toString()); |
| for (int i = 0; i < names.length; i++) { |
| System.out.println(names[i]); |
| } |
| } |
| |
| /** |
| * Use when the compares don't match to get a sorted list of properties so that |
| * manually verify the count. |
| * @param jclass |
| */ |
| protected void showSortedProperties(JavaClass jclass) { |
| List allP = jclass.getAllProperties(); |
| String[] names = new String[allP.size()]; |
| for (int i = 0; i < names.length; i++) { |
| names[i] = ((EStructuralFeature) allP.get(i)).getName(); |
| } |
| Arrays.sort(names); |
| System.out.println("--- List of properties for " + jclass.toString()); |
| for (int i = 0; i < names.length; i++) { |
| System.out.println(names[i]); |
| } |
| } |
| |
| protected JavaClass getButton() { |
| return (JavaClass) rset.getEObject(URI.createURI("java:/java.awt#Button"), true); //$NON-NLS-1$ |
| } |
| |
| protected JavaClass getJLabel() { |
| return (JavaClass) rset.getEObject(URI.createURI("java:/javax.swing#JLabel"), true); //$NON-NLS-1$ |
| } |
| |
| public void testExternalJar() throws IOException { |
| objFeaturesSetup(); |
| |
| // This tests getting beaninfo out of jar. The jar is within the project. It contains ButtonBeanInfo. |
| JavaClass button = getButton(); |
| reflectHierachy(button); // First reflect all parents (not introspect). |
| // Now cause introspection. |
| |
| // To write out the names if want new set. |
| // writeNames("d:/temp/extjarprops.txt", button.getAllProperties(), objFeaturesSet); |
| |
| Set names = getNames("testdata/extjarprops.txt"); |
| testIncludesAllNames("Button", button.getAllProperties(), names, objFeaturesSet); |
| |
| // To write out the names if want new set. |
| // writeNames("d:/temp/extjarops.txt", button.getEOperations(), Collections.EMPTY_SET); |
| |
| names = getNames("testdata/extjarops.txt"); |
| testIncludesAllNames("Button", button.getEOperations(), names, Collections.EMPTY_SET); |
| |
| // showSortedProperties(button); |
| } |
| |
| public void testJLabel() throws IOException { |
| objFeaturesSetup(); |
| |
| // This tests JLabel beaninfo out of current project, but through search path. |
| JavaClass jlabel = getJLabel(); |
| reflectHierachy(jlabel); // First reflect all parents (not introspect). |
| // Now cause introspection. |
| |
| // To write out the names if want new set. |
| // writeNames("d:/temp/jlabelprops.txt", jlabel.getAllProperties(), objFeaturesSet); |
| |
| Set names = getNames("testdata/jlabelprops.txt"); |
| testIncludesAllNames("JLabel", jlabel.getAllProperties(), names, objFeaturesSet); |
| |
| // To write out the names if want new set. |
| // writeNames("d:/temp/jlabelops.txt", jlabel.getEAllOperations(), Collections.EMPTY_SET); |
| |
| names = getNames("testdata/jlabelops.txt"); |
| testIncludesAllNames("JLabel", jlabel.getEAllOperations(), names, Collections.EMPTY_SET); |
| |
| // showSortedProperties(jlabel); |
| // showSortedOperations(jlabel); |
| |
| // Test that isPreferred works both for 1.3 JVM and 1.4 and later since there was a bug in 1.3. |
| EStructuralFeature enabledSF = jlabel.getEStructuralFeature("enabled"); //$NON-NLS-1$ |
| PropertyDecorator pd = Utilities.getPropertyDecorator(enabledSF); |
| assertTrue(pd.isPreferred()); |
| } |
| |
| /* |
| * At time of this test creation, this is the sorted lists for comparison purposes. |
| * |
| --- List of properties for java.awt.Button |
| actionCommand |
| alignmentX |
| alignmentY |
| background |
| bounds |
| class |
| colorModel |
| componentOrientation |
| cursor |
| enabled |
| events |
| focusTraversable |
| font |
| foreground |
| graphics |
| implicit |
| initializationString |
| instantiateUsing |
| label |
| locale |
| location |
| locationOnScreen |
| maximumSize |
| minimumSize |
| name |
| parent |
| preferredSize |
| serializeData |
| showing |
| size |
| toolkit |
| treeLock |
| valid |
| visible |
| |
| --- List of properties for javax.swing.JLabel |
| alignmentX |
| alignmentY |
| autoscrolls |
| background |
| border |
| bounds |
| class |
| colorModel |
| componentCount |
| componentOrientation |
| components |
| cursor |
| debugGraphicsOptions |
| disabledIcon |
| displayedMnemonic |
| doubleBuffered |
| enabled |
| events |
| focusCycleRoot |
| focusTraversable |
| font |
| foreground |
| graphics |
| height |
| horizontalAlignment |
| horizontalTextPosition |
| icon |
| iconTextGap |
| implicit |
| initializationString |
| insets |
| instantiateUsing |
| labelFor |
| layout |
| locale |
| location |
| locationOnScreen |
| managingFocus |
| maximumSize |
| minimumSize |
| name |
| nextFocusableComponent |
| opaque |
| optimizedDrawingEnabled |
| paintingTile |
| parent |
| preferredSize |
| registeredKeyStrokes |
| requestFocusEnabled |
| rootPane |
| serializeData |
| showing |
| size |
| text |
| toolTipText |
| toolkit |
| topLevelAncestor |
| treeLock |
| valid |
| validateRoot |
| verticalAlignment |
| verticalTextPosition |
| visible |
| visibleRect |
| width |
| x |
| y |
| |
| --- List of Operations for javax.swing.JLabel |
| add(java.awt.Component) |
| add(java.awt.Component,int) |
| add(java.awt.Component,java.lang.Object) |
| add(java.awt.Component,java.lang.Object,int) |
| add(java.awt.PopupMenu) |
| add(java.lang.String,java.awt.Component) |
| addNotify() |
| checkImage(java.awt.Image,java.awt.image.ImageObserver) |
| computeVisibleRect(java.awt.Rectangle) |
| contains(int,int) |
| contains(java.awt.Point) |
| createImage(int,int) |
| createImage(java.awt.image.ImageProducer) |
| createToolTip() |
| dispatchEvent(java.awt.AWTEvent) |
| doLayout() |
| equals(java.lang.Object) |
| firePropertyChange(java.lang.String,boolean,boolean) |
| firePropertyChange(java.lang.String,char,char) |
| firePropertyChange(java.lang.String,double,double) |
| firePropertyChange(java.lang.String,float,float) |
| firePropertyChange(java.lang.String,int,int) |
| firePropertyChange(java.lang.String,long,long) |
| firePropertyChange(java.lang.String,short,short) |
| getAccessibleContext() |
| getActionForKeyStroke(javax.swing.KeyStroke) |
| getAlignmentX() |
| getAlignmentY() |
| getAutoscrolls() |
| getBackground() |
| getBorder() |
| getBounds() |
| getBounds(java.awt.Rectangle) |
| getClass() |
| getClientProperty(java.lang.Object) |
| getColorModel() |
| getComponent(int) |
| getComponentAt(int,int) |
| getComponentAt(java.awt.Point) |
| getComponentCount() |
| getComponents() |
| getConditionForKeyStroke(javax.swing.KeyStroke) |
| getCursor() |
| getDisabledIcon() |
| getDisplayedMnemonic() |
| getFont() |
| getFontMetrics(java.awt.Font) |
| getForeground() |
| getGraphics() |
| getHeight() |
| getHorizontalAlignment() |
| getHorizontalTextPosition() |
| getIcon() |
| getIconTextGap() |
| getInsets() |
| getLabelFor() |
| getLayout() |
| getLocale() |
| getLocation() |
| getLocation(java.awt.Point) |
| getLocationOnScreen() |
| getMaximumSize() |
| getMinimumSize() |
| getName() |
| getNextFocusableComponent() |
| getParent() |
| getPreferredSize() |
| getRegisteredKeyStrokes() |
| getRootPane() |
| getSize() |
| getSize(java.awt.Dimension) |
| getText() |
| getToolTipText() |
| getToolkit() |
| getTopLevelAncestor() |
| getTreeLock() |
| getUI() |
| getVerticalAlignment() |
| getVerticalTextPosition() |
| getVisibleRect() |
| getWidth() |
| getX() |
| getY() |
| grabFocus() |
| hasFocus() |
| hashCode() |
| invalidate() |
| isAncestorOf(java.awt.Component) |
| isDoubleBuffered() |
| isEnabled() |
| isFocusCycleRoot() |
| isFocusTraversable() |
| isManagingFocus() |
| isOpaque() |
| isOptimizedDrawingEnabled() |
| isRequestFocusEnabled() |
| isShowing() |
| isValid() |
| isValidateRoot() |
| isVisible() |
| list() |
| list(java.io.PrintStream) |
| list(java.io.PrintStream,int) |
| list(java.io.PrintWriter,int) |
| notify() |
| notifyAll() |
| paint(java.awt.Graphics) |
| paintAll(java.awt.Graphics) |
| paintImmediately(java.awt.Rectangle) |
| prepareImage(java.awt.Image,java.awt.image.ImageObserver) |
| print(java.awt.Graphics) |
| printAll(java.awt.Graphics) |
| putClientProperty(java.lang.Object,java.lang.Object) |
| remove(int) |
| remove(java.awt.Component) |
| remove(java.awt.MenuComponent) |
| removeAll() |
| removeNotify() |
| repaint() |
| repaint(java.awt.Rectangle) |
| requestDefaultFocus() |
| requestFocus() |
| resetKeyboardActions() |
| revalidate() |
| scrollRectToVisible(java.awt.Rectangle) |
| setAlignmentX(float) |
| setAlignmentY(float) |
| setAutoscrolls(boolean) |
| setBackground(java.awt.Color) |
| setBorder(javax.swing.border.Border) |
| setBounds(int,int,int,int) |
| setBounds(java.awt.Rectangle) |
| setCursor(java.awt.Cursor) |
| setDebugGraphicsOptions(int) |
| setDisabledIcon(javax.swing.Icon) |
| setDisplayedMnemonic(char) |
| setDoubleBuffered(boolean) |
| setEnabled(boolean) |
| setFont(java.awt.Font) |
| setForeground(java.awt.Color) |
| setHorizontalAlignment(int) |
| setHorizontalTextPosition(int) |
| setIcon(javax.swing.Icon) |
| setIconTextGap(int) |
| setLabelFor(java.awt.Component) |
| setLayout(java.awt.LayoutManager) |
| setLocale(java.util.Locale) |
| setLocation(int,int) |
| setLocation(java.awt.Point) |
| setMaximumSize(java.awt.Dimension) |
| setMinimumSize(java.awt.Dimension) |
| setName(java.lang.String) |
| setNextFocusableComponent(java.awt.Component) |
| setOpaque(boolean) |
| setPreferredSize(java.awt.Dimension) |
| setRequestFocusEnabled(boolean) |
| setSize(int,int) |
| setSize(java.awt.Dimension) |
| setText(java.lang.String) |
| setToolTipText(java.lang.String) |
| setUI(javax.swing.plaf.LabelUI) |
| setVerticalAlignment(int) |
| setVerticalTextPosition(int) |
| setVisible(boolean) |
| toString() |
| transferFocus() |
| unregisterKeyboardAction(javax.swing.KeyStroke) |
| update(java.awt.Graphics) |
| updateUI() |
| validate() |
| wait() |
| wait(long) |
| wait(long,int) |
| |
| */ |
| |
| } |