|
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. */ package org.openide.loaders; import org.openide.filesystems.*; import java.beans.*; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import junit.framework.AssertionFailedError; import org.netbeans.junit.*; /** Does a change in order on folder fire the right properties? * * @author Jaroslav Tulach */ public class DataFolderSetOrderTest extends NbTestCase implements PropertyChangeListener { private DataFolder aa; private DataFolder bb; private ArrayList events = new ArrayList (); private static org.openide.util.Task previous; public DataFolderSetOrderTest (String name) { super (name); } public static void main (String[] args) throws Exception { junit.textui.TestRunner.run(new NbTestSuite (DataFolderSetOrderTest.class)); } /** If execution fails we wrap the exception with * new log message. */ protected void runTest () throws Throwable { ErrManager.messages.append ("Starting test "); ErrManager.messages.append (getName ()); ErrManager.messages.append ('\n'); try { super.runTest (); } catch (AssertionFailedError ex) { AssertionFailedError ne = new AssertionFailedError (ex.getMessage () + " Log:\n" + ErrManager.messages); ne.setStackTrace (ex.getStackTrace ()); throw ne; } } protected void setUp () throws Exception { System.setProperty("org.openide.util.Lookup", "org.openide.loaders.DataFolderSetOrderTest$Lkp"); assertNotNull ("ErrManager has to be in lookup", org.openide.util.Lookup.getDefault ().lookup (ErrManager.class)); if (previous != null) { previous.waitFinished (); } TestUtilHid.destroyLocalFileSystem (getName()); String fsstruct [] = new String [] { "AA/X.txt", "AA/Y.txt", "BB/X.slow", }; FileSystem lfs = TestUtilHid.createLocalFileSystem (getName (), fsstruct); aa = DataFolder.findFolder (lfs.findResource ("AA")); bb = DataFolder.findFolder (lfs.findResource ("BB")); aa.addPropertyChangeListener (this); } protected void tearDown () throws Exception { final DataLoader l = DataLoader.getLoader(DataObjectInvalidationTest.SlowDataLoader.class); aa.removePropertyChangeListener (this); } private void makeFolderRecognizerBusy () throws Exception { if (getName().indexOf ("Busy") < 0) { return; } final DataLoader l = DataLoader.getLoader(DataObjectInvalidationTest.SlowDataLoader.class); synchronized (l) { // this will trigger bb.getChildren previous = org.openide.util.RequestProcessor.getDefault ().post (new Runnable () { public void run () { DataObject[] arr = bb.getChildren (); } }); // waits till the recognition blocks in the new SlowDataObject l.wait (); } // now the folder recognizer is blocked at least for 2s } private void doTest () throws Exception { DataObject[] arr = aa.getChildren (); assertEquals ("Two objects", 2, arr.length); ArrayList l = new ArrayList (Arrays.asList (arr)); java.util.Collections.reverse (l); assertEquals ("No changes yet", 0, events.size ()); makeFolderRecognizerBusy (); aa.setOrder ((DataObject[])l.toArray (new DataObject[0])); DataObject[] narr = aa.getChildren (); assertEquals ("Two again", 2, narr.length); assertSame ("1 == 2", arr[0], narr[1]); assertSame ("2 == 1", arr[1], narr[0]); // PENDING-JST: Should be this, but if (2 != events.size () || !events.contains (DataFolder.PROP_ORDER) || !events.contains (DataFolder.PROP_CHILDREN)) { // lets test at least for this: if (!events.contains (DataFolder.PROP_ORDER) || !events.contains (DataFolder.PROP_CHILDREN)) { fail ("Wrong events: " + events); } } public void testReorderWithoutChecksWhenFolderReconizerIsBusy () throws Exception { doTest (); } public void testReorderWithoutChecks () throws Exception { doTest (); } public void propertyChange (PropertyChangeEvent evt) { events.add (evt.getPropertyName ()); } // // Our fake lookup // public static final class Lkp extends org.openide.util.lookup.AbstractLookup { public Lkp () { this (new org.openide.util.lookup.InstanceContent ()); } private Lkp (org.openide.util.lookup.InstanceContent ic) { super (ic); ic.add (new ErrManager ()); ic.add (new Pool ()); } } // // Logging support // public static final class ErrManager extends org.openide.ErrorManager { public static final StringBuffer messages = new StringBuffer (); private String prefix; public ErrManager () { this (null); } public ErrManager (String prefix) { this.prefix = prefix; } public Throwable annotate (Throwable t, int severity, String message, String localizedMessage, Throwable stackTrace, java.util.Date date) { return t; } public Throwable attachAnnotations (Throwable t, org.openide.ErrorManager.Annotation[] arr) { return t; } public org.openide.ErrorManager.Annotation[] findAnnotations (Throwable t) { return null; } public org.openide.ErrorManager getInstance (String name) { if ( name.startsWith ("org.openide.loaders.FolderList") // || name.startsWith ("org.openide.loaders.FolderInstance") ) { return new ErrManager ('[' + name + ']'); } else { // either new non-logging or myself if I am non-logging return new ErrManager (); } } public void log (int severity, String s) { if (prefix != null) { messages.append (prefix); messages.append (s); messages.append ('\n'); } } public void notify (int severity, Throwable t) { log (severity, t.getMessage ()); } public boolean isNotifiable (int severity) { return prefix != null; } public boolean isLoggable (int severity) { return prefix != null; } } // end of ErrManager private static final class Pool extends DataLoaderPool { protected java.util.Enumeration loaders () { return new org.openide.util.enum.SingletonEnumeration ( DataLoader.getLoader(DataObjectInvalidationTest.SlowDataLoader.class) ); } } // end of Pool } |
... 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.