#100320: getPairAsLHS needs to pay attention to ordering events_91763_base_110407
authorjtulach@netbeans.org
Tue, 10 Apr 2007 13:17:40 +0000
changeset 27224f915d17f5d
parent 271 a7af3773025e
child 273 c53648c3fbcb
#100320: getPairAsLHS needs to pay attention to ordering
openide.util/src/org/openide/util/lookup/AbstractLookup.java
openide.util/test/unit/src/org/bar/Comparator3.java
openide.util/test/unit/src/org/openide/util/lookup/MetaInfServicesLookupTest.java
openide.util/test/unit/src/org/openide/util/lookup/problem100320.txt
     1.1 --- a/openide.util/src/org/openide/util/lookup/AbstractLookup.java	Tue Apr 10 08:10:48 2007 +0000
     1.2 +++ b/openide.util/src/org/openide/util/lookup/AbstractLookup.java	Tue Apr 10 13:17:40 2007 +0000
     1.3 @@ -241,12 +241,12 @@
     1.4  
     1.5          try {
     1.6              Enumeration<Pair<Object>> en = t.lookup(Object.class);
     1.7 -            LinkedHashSet<Pair<?>> arr = new LinkedHashSet<Pair<?>>();
     1.8 +            TreeSet<Pair<?>> arr = new TreeSet<Pair<?>>(ALPairComparator.DEFAULT);
     1.9              while (en.hasMoreElements()) {
    1.10                  Pair<Object> item = en.nextElement();
    1.11                  arr.add(item);
    1.12              }
    1.13 -            return arr;
    1.14 +            return new LinkedHashSet<Pair<?>>(arr);
    1.15          } finally {
    1.16              exitStorage();
    1.17          }
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/openide.util/test/unit/src/org/bar/Comparator3.java	Tue Apr 10 13:17:40 2007 +0000
     2.3 @@ -0,0 +1,7 @@
     2.4 +
     2.5 +package org.bar;
     2.6 +
     2.7 +public class Comparator3 implements java.util.Comparator {
     2.8 +    public int compare(Object o1, Object o2) {return 0;}
     2.9 +    public boolean equals(Object obj) {return true;}
    2.10 +}
     3.1 --- a/openide.util/test/unit/src/org/openide/util/lookup/MetaInfServicesLookupTest.java	Tue Apr 10 08:10:48 2007 +0000
     3.2 +++ b/openide.util/test/unit/src/org/openide/util/lookup/MetaInfServicesLookupTest.java	Tue Apr 10 13:17:40 2007 +0000
     3.3 @@ -19,6 +19,7 @@
     3.4  
     3.5  package org.openide.util.lookup;
     3.6  
     3.7 +import java.awt.Component;
     3.8  import java.io.File;
     3.9  import java.io.FileOutputStream;
    3.10  import java.io.IOException;
    3.11 @@ -27,8 +28,11 @@
    3.12  import java.net.URL;
    3.13  import java.net.URLClassLoader;
    3.14  import java.util.ArrayList;
    3.15 +import java.util.Collection;
    3.16  import java.util.Collections;
    3.17 +import java.util.Comparator;
    3.18  import java.util.Enumeration;
    3.19 +import java.util.Iterator;
    3.20  import java.util.List;
    3.21  import java.util.Set;
    3.22  import java.util.Set;
    3.23 @@ -39,6 +43,7 @@
    3.24  import java.util.logging.Logger;
    3.25  import java.util.regex.Matcher;
    3.26  import java.util.regex.Pattern;
    3.27 +import org.bar.Comparator2;
    3.28  import org.netbeans.junit.NbTestCase;
    3.29  import org.openide.util.Lookup;
    3.30  import org.openide.util.LookupEvent;
    3.31 @@ -293,4 +298,33 @@
    3.32  
    3.33          assertEquals("Now two", 2, res.allInstances().size());
    3.34      }
    3.35 +    
    3.36 +    public void testWrongOrderAsInIssue100320() throws Exception {
    3.37 +        ClassLoader app = getClass().getClassLoader().getParent();
    3.38 +        ClassLoader c0 = app;
    3.39 +        ClassLoader c1 = new URLClassLoader(new URL[] {
    3.40 +            findJar("problem100320.jar"),
    3.41 +        }, c0);
    3.42 +        Lookup lookup = Lookups.metaInfServices(c1);
    3.43 +
    3.44 +        Collection<?> colAWT = lookup.lookupAll(Component.class);
    3.45 +        assertEquals("There is enough objects to switch to InheritanceTree", 12, colAWT.size());
    3.46 +        
    3.47 +        
    3.48 +        List<?> col1 = new ArrayList<Object>(lookup.lookupAll(Comparator.class));
    3.49 +        assertEquals("Two", 2, col1.size());
    3.50 +        Collection<?> col2 = lookup.lookupAll(c1.loadClass(Comparator2.class.getName()));
    3.51 +        assertEquals("One", 1, col2.size());
    3.52 +        List<?> col3 = new ArrayList<Object>(lookup.lookupAll(Comparator.class));
    3.53 +        assertEquals("Two2", 2, col3.size());
    3.54 +        
    3.55 +        Iterator<?> it1 = col1.iterator();
    3.56 +        Iterator<?> it3 = col3.iterator();
    3.57 +        if (
    3.58 +            it1.next() != it3.next() || 
    3.59 +            it1.next() != it3.next() 
    3.60 +        ) {
    3.61 +            fail("Collections are different:\nFirst: " + col1 + "\nLast:  " + col3);
    3.62 +        }
    3.63 +    }
    3.64  }
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/openide.util/test/unit/src/org/openide/util/lookup/problem100320.txt	Tue Apr 10 13:17:40 2007 +0000
     4.3 @@ -0,0 +1,17 @@
     4.4 +:java.awt.Component:
     4.5 +java.awt.Panel
     4.6 +javax.swing.JPanel
     4.7 +javax.swing.JMenuItem
     4.8 +javax.swing.JTree
     4.9 +javax.swing.JTextArea
    4.10 +javax.swing.JButton
    4.11 +javax.swing.JLabel
    4.12 +javax.swing.JComboBox
    4.13 +javax.swing.JEditorPane
    4.14 +javax.swing.JFrame
    4.15 +javax.swing.JDialog
    4.16 +javax.swing.JMenu
    4.17 +:java.util.Comparator:
    4.18 +org.bar.Comparator3
    4.19 +org.bar.Comparator2
    4.20 +#position=5