Lines 47-52
Link Here
|
47 |
import java.io.IOException; |
47 |
import java.io.IOException; |
48 |
import java.util.*; |
48 |
import java.util.*; |
49 |
import java.lang.ref.WeakReference; |
49 |
import java.lang.ref.WeakReference; |
|
|
50 |
import java.util.ArrayList; |
50 |
import java.util.logging.Level; |
51 |
import java.util.logging.Level; |
51 |
import java.util.logging.Logger; |
52 |
import java.util.logging.Logger; |
52 |
import javax.swing.event.ChangeEvent; |
53 |
import javax.swing.event.ChangeEvent; |
Lines 58-69
Link Here
|
58 |
import org.netbeans.junit.NbTestCase; |
59 |
import org.netbeans.junit.NbTestCase; |
59 |
import org.netbeans.junit.NbTestSuite; |
60 |
import org.netbeans.junit.NbTestSuite; |
60 |
import org.netbeans.junit.RandomlyFails; |
61 |
import org.netbeans.junit.RandomlyFails; |
|
|
62 |
import org.netbeans.spi.queries.VisibilityQueryImplementation; |
61 |
import org.openide.filesystems.*; |
63 |
import org.openide.filesystems.*; |
62 |
|
64 |
|
63 |
import org.openide.loaders.DefaultDataObjectTest.JspLoader; |
65 |
import org.openide.loaders.DefaultDataObjectTest.JspLoader; |
64 |
import org.openide.loaders.MultiDataObject.Entry; |
66 |
import org.openide.loaders.MultiDataObject.Entry; |
|
|
67 |
import org.openide.nodes.AbstractNode; |
65 |
import org.openide.nodes.Node; |
68 |
import org.openide.nodes.Node; |
66 |
import org.openide.nodes.Children; |
69 |
import org.openide.nodes.Children; |
|
|
70 |
import org.openide.nodes.FilterNode; |
67 |
import org.openide.nodes.NodeEvent; |
71 |
import org.openide.nodes.NodeEvent; |
68 |
import org.openide.nodes.NodeListener; |
72 |
import org.openide.nodes.NodeListener; |
69 |
import org.openide.nodes.NodeMemberEvent; |
73 |
import org.openide.nodes.NodeMemberEvent; |
Lines 95-101
Link Here
|
95 |
|
99 |
|
96 |
public static Test suite() { |
100 |
public static Test suite() { |
97 |
Test t = null; |
101 |
Test t = null; |
98 |
// t = new FolderChildrenTest("testDeadlockWithChildrenMutex"); |
102 |
// t = new FolderChildrenTest("testALotOfHiddenEntries"); |
99 |
if (t == null) { |
103 |
if (t == null) { |
100 |
t = new NbTestSuite(FolderChildrenTest.class); |
104 |
t = new NbTestSuite(FolderChildrenTest.class); |
101 |
} |
105 |
} |
Lines 732-737
Link Here
|
732 |
assertNodes( arr, new String[] { "A" } ); |
736 |
assertNodes( arr, new String[] { "A" } ); |
733 |
} |
737 |
} |
734 |
|
738 |
|
|
|
739 |
public void testALotOfHiddenEntries() throws Exception { |
740 |
FileSystem fs = Repository.getDefault ().getDefaultFileSystem(); |
741 |
FileObject folder = FileUtil.createFolder(fs.getRoot(), "aLotOf"); |
742 |
List<FileObject> arr = new ArrayList<FileObject>(); |
743 |
final int FILES = 1000; |
744 |
for (int i = 0; i < FILES; i++) { |
745 |
arr.add(FileUtil.createData(folder, "" + i + ".dat")); |
746 |
} |
747 |
|
748 |
DataFolder df = DataFolder.findFolder(folder); |
749 |
|
750 |
VisQ visq = new VisQ(); |
751 |
|
752 |
FilterNode fn = new FilterNode(new FilterNode(new AbstractNode(df.createNodeChildren(visq)))); |
753 |
class L implements NodeListener { |
754 |
int cnt; |
755 |
|
756 |
public void childrenAdded(NodeMemberEvent ev) { |
757 |
cnt++; |
758 |
} |
759 |
|
760 |
public void childrenRemoved(NodeMemberEvent ev) { |
761 |
cnt++; |
762 |
} |
763 |
|
764 |
public void childrenReordered(NodeReorderEvent ev) { |
765 |
cnt++; |
766 |
} |
767 |
|
768 |
public void nodeDestroyed(NodeEvent ev) { |
769 |
cnt++; |
770 |
} |
771 |
|
772 |
public void propertyChange(PropertyChangeEvent evt) { |
773 |
cnt++; |
774 |
} |
775 |
} |
776 |
L listener = new L(); |
777 |
fn.addNodeListener(listener); |
778 |
|
779 |
List<Node> nodes = new ArrayList<Node>(); |
780 |
int cnt = fn.getChildren().getNodesCount(true); |
781 |
List<Node> snapshot = fn.getChildren().snapshot(); |
782 |
assertEquals("Count as expected", cnt, snapshot.size()); |
783 |
for (int i = 0; i < cnt; i++) { |
784 |
nodes.add(snapshot.get(i)); |
785 |
} |
786 |
assertEquals("No events delivered", 0, listener.cnt); |
787 |
assertEquals("Size is half cut", FILES / 2, fn.getChildren().getNodesCount(true)); |
788 |
} |
789 |
|
790 |
public static final class VisQ implements VisibilityQueryImplementation, DataFilter.Lowlevel { |
791 |
public boolean isVisible(FileObject file) { |
792 |
try { |
793 |
int number = Integer.parseInt(file.getName()); |
794 |
return number % 2 == 0; |
795 |
} catch (NumberFormatException numberFormatException) { |
796 |
return true; |
797 |
} |
798 |
} |
799 |
|
800 |
public void addChangeListener(ChangeListener l) { |
801 |
} |
802 |
|
803 |
public void removeChangeListener(ChangeListener l) { |
804 |
} |
805 |
|
806 |
public boolean acceptDataObject(DataObject obj) { |
807 |
return isVisible(obj.getPrimaryFile()); |
808 |
} |
809 |
|
810 |
public boolean acceptFileObject(FileObject obj) { |
811 |
return isVisible(obj); |
812 |
} |
813 |
|
814 |
} |
815 |
|
816 |
|
735 |
public static final class Pool extends DataLoaderPool { |
817 |
public static final class Pool extends DataLoaderPool { |
736 |
private static Class<? extends DataLoader> loader; |
818 |
private static Class<? extends DataLoader> loader; |
737 |
|
819 |
|