|
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.