|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ /* * PropertySheetTest.java * * Created on August 24, 2001, 4:25 PM */ package org.openide.explorer.propertysheet; import java.awt.BorderLayout; import org.openide.*; import org.openide.nodes.*; import org.openide.explorer.propertysheet.*; import org.openide.explorer.propertysheet.editors.*; import java.beans.*; import java.lang.reflect.*; import java.util.Arrays; import javax.swing.*; import javax.swing.JFrame; import junit.framework.*; import junit.textui.TestRunner; import org.netbeans.junit.*; import org.openide.util.Lookup; import org.openide.explorer.propertysheet.PropertySheet; // This test class tests the main functionality of the property sheet public class PropertiesFlushTest extends NbTestCase { private PropertySheet ps = null; public PropertiesFlushTest(String name) { super(name); } protected boolean runInEQ() { return false; } private static boolean setup = false; /* * This test creates a Property, Editor and Node. First test checks if initialized * editor contains the same value as property. The second checks if the property * value is changed if the same change will be done in the editor. */ protected void setUp() throws Exception { try { // Create new TNode tn = new TNode(); //Replacing NodeOp w/ JFrame to eliminate depending on full IDE init //and long delay while waiting for property sheet thus requested to //initialize final JFrame jf = new JFrame(); ps = new PropertySheet(); jf.getContentPane().setLayout(new BorderLayout()); jf.getContentPane().add(ps, BorderLayout.CENTER); jf.setLocation(30,30); jf.setSize(500,500); new ExtTestCase.WaitWindow(jf); SwingUtilities.invokeAndWait(new Runnable() { public void run() { ps.setNodes(new Node[] {tn}); } }); sleep(); ensurePainted(ps); } catch (Exception e) { fail("FAILED - Exception thrown "+e.getClass().toString()); } } private void ensurePainted(final PropertySheet ps) throws Exception { //issues 39205 & 39206 - ensure the property sheet really repaints //before we get the value, or the value in the editor will not //have changed SwingUtilities.invokeAndWait(new Runnable() { public void run() { java.awt.Graphics g = ps.getGraphics(); ps.paintImmediately (0,0,ps.getWidth(), ps.getHeight()); } }); } public void testNullChangePerformedAndReflectedInPropertySheet() throws Exception { System.err.println(".testNullChangePerformedAndReflectedInPropertySheet"); int count = ps.table.getRowCount(); assertTrue ("Property sheet should contain three rows ", count==3); L l = new L(); tn.addPropertyChangeListener (l); SwingUtilities.invokeAndWait (new Runnable() { public void run() { tn.replaceProps(); } }); Thread.currentThread().sleep(500); // SwingUtilities.invokeAndWait (new Runnable(){public void run() {System.currentTimeMillis();}}); l.assertEventReceived(); assertTrue ("Should only be one property", tn.getPropertySets()[0].getProperties().length == 1); sleep(); ensurePainted(ps); int rc = ps.table.getRowCount(); assertTrue ("Property sheet should now only show 2 rows, not " + rc, rc == 2); } private Exception throwMe = null; public void testSetSheetChangesPropertySheetContents() throws Exception { System.err.println(".testSetSheetChangesPropertySheetContents"); final TNode2 tnd = new TNode2(); throwMe = null; SwingUtilities.invokeAndWait(new Runnable() { public void run() { try { ps.setNodes(new Node[] {tnd}); } catch (Exception e) { throwMe = e; } } }); if (throwMe != null) { throw throwMe; } sleep(); int rowCount = ps.table.getRowCount(); assertTrue ("With a single property in a single property set, row count should be 2 but is " + rowCount, rowCount == 2); L2 l2 = new L2(); tnd.addNodeListener(l2); throwMe = null; SwingUtilities.invokeAndWait (new Runnable() { public void run() { try { System.err.println("Replacing property sets"); tnd.replaceSets(); } catch (Exception e) { throwMe = e; } } }); if (throwMe != null) { throw throwMe; } sleep(); System.err.println("EnsurePainted"); ensurePainted(ps); System.err.println("Asserting event received"); l2.assertEventReceived(); int nueCount = ps.table.getRowCount(); System.err.println("Checking count - it is " + nueCount); assertTrue ("With two properties in two property sets, row count should be 4 but is " + nueCount, nueCount == 4); } private void sleep() throws Exception { Thread.currentThread().sleep(500); SwingUtilities.invokeAndWait (new Runnable() { public void run() { System.currentTimeMillis(); } }); } private class L implements PropertyChangeListener { private boolean eventReceived = false; public void assertEventReceived() { assertTrue ("null null null property change not received on sets change", eventReceived); eventReceived = false; } public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName() == null && evt.getOldValue() == null && evt.getNewValue() == null) { eventReceived = true; } System.err.println("Event: " + evt); } } private class L2 extends NodeAdapter { private boolean eventReceived = false; public void assertEventReceived() { assertTrue ("AbstractNode did not fire PROP_PROPERTY_SETS when setSheet() was called", eventReceived); eventReceived = false; } public void propertyChange(PropertyChangeEvent evt) { if (AbstractNode.PROP_PROPERTY_SETS.equals(evt.getPropertyName()) && evt.getOldValue() == null && evt.getNewValue() == null) { eventReceived = true; } System.err.println("Event: " + evt + " name " + evt.getPropertyName()); } } //Node definition public class TNode extends AbstractNode { //create Node public TNode() { super (Children.LEAF); setName("TNode"); // or, super.setName if needed setDisplayName("TNode"); } //clone existing Node public Node cloneNode() { return new TNode(); } public void replaceProps() { sets = null; firePropertyChange (null, null, null); } Node.PropertySet[] sets = null; private boolean firstTime = true; // Create a property sheet: public Node.PropertySet[] getPropertySets() { if (sets == null) { System.err.println("Create sheet"); Sheet sheet = new Sheet(); // Make sure there is a "Properties" set: Sheet.Set props = sheet.get(Sheet.PROPERTIES); props = Sheet.createPropertiesSet(); sheet.put(props); TProperty tp = new TProperty("property", true); props.put(tp); if (firstTime) { props.put (new TProperty("second", true)); System.err.println("first time"); firstTime = false; } else { System.err.println("Second time"); } sets = sheet.toArray(); } return sets; } // Method firing changes public void fireMethod(String s, Object o1, Object o2) { System.err.println("firing"); } } //Node definition public class TNode2 extends AbstractNode { //create Node public TNode2() { super (Children.LEAF); setName("TNode2"); // or, super.setName if needed setDisplayName("TNode2"); } //clone existing Node public Node cloneNode() { return new TNode(); } public void replaceSets() { Sheet sheet = new Sheet(); Sheet.Set props = sheet.get(Sheet.PROPERTIES); if (props == null) { props = Sheet.createPropertiesSet(); } props.put(new TProperty("after - first", true)); sheet.put (props); props = sheet.get(Sheet.EXPERT); if (props == null) { props = Sheet.createExpertSet(); } props.put (new TProperty("after - second", true)); sheet.put(props); setSheet(sheet); } // Create a property sheet: protected Sheet createSheet() { Sheet sheet = super.createSheet(); // Make sure there is a "Properties" set: Sheet.Set props = sheet.get(Sheet.PROPERTIES); if (props == null) { props = Sheet.createPropertiesSet(); sheet.put(props); } props.put(new TProperty("before", true)); return sheet; } } // Property definition public class TProperty extends PropertySupport { private Object myValue = "Value"; // Create new Property public TProperty(String name, boolean isWriteable) { super(name, String.class, name, "", true, isWriteable); } // get property value public Object getValue() { return myValue; } // set property value public void setValue(Object value) throws IllegalArgumentException,IllegalAccessException, InvocationTargetException { Object oldVal = myValue; myValue = value; } } public static void main(String args[]) { TestRunner.run(new NbTestSuite(PropertiesFlushTest.class)); } private static TNode tn; private static TProperty tp; private static String initEditorValue; private static String initPropertyValue; private static String postChangePropertyValue; private static String postChangeEditorValue; } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.