|
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-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.openide.util.lookup;
import java.util.*;
import org.openide.util.Lookup;
import junit.framework.*;
import org.netbeans.junit.*;
/**
* Tests for class SimpleLookup.
* @author David Strupl
*/
public class SimpleLookupTest extends org.netbeans.junit.NbTestCase {
public SimpleLookupTest(java.lang.String testName) {
super(testName);
}
public static void main(java.lang.String[] args) {
junit.textui.TestRunner.run(new NbTestSuite(SimpleLookupTest.class));
}
/**
* Simple tests testing singleton lookup.
*/
public void testSingleton() {
//
Object orig = new Object();
Lookup p1 = Lookups.singleton(orig);
Object obj = p1.lookup(Object.class);
assertTrue(obj == orig);
assertNull(p1.lookup(String.class));
assertTrue(orig == p1.lookup(Object.class)); // 2nd time, still the same?
//
Lookup p2 = Lookups.singleton("test");
assertNotNull(p2.lookup(Object.class));
assertNotNull(p2.lookup(String.class));
assertNotNull(p2.lookup(java.io.Serializable.class));
}
/**
* Simple tests testing fixed lookup.
*/
public void testFixed() {
//
Object[] orig = new Object[] { new Object(), new Object() };
Lookup p1 = Lookups.fixed(orig);
Object obj = p1.lookup(Object.class);
assertTrue(obj == orig[0] || obj == orig[1]);
assertNull(p1.lookup(String.class));
//
String[] s = new String[] { "test1", "test2" };
Lookup p2 = Lookups.fixed(s);
Object obj2 = p2.lookup(Object.class);
assertNotNull(obj2);
if (obj2 != s[0] && obj2 != s[1]) {
fail("Returned objects are not the originals");
}
assertNotNull(p2.lookup(String.class));
assertNotNull(p2.lookup(java.io.Serializable.class));
Lookup.Template t = new Lookup.Template(String.class);
Lookup.Result r = p2.lookup(t);
Collection all = r.allInstances();
assertTrue(all.size() == 2);
for (Iterator i = all.iterator(); i.hasNext(); ) {
Object o = i.next();
if (o != s[0] && o != s[1]) {
fail("allIinstances contains wrong objects");
}
}
}
/**
* Simple tests testing converting lookup.
*/
public void testConverting() {
//
Object[] orig = new Object[] { TestConvertor.TEST1, TestConvertor.TEST2 };
TestConvertor convertor = new TestConvertor();
Lookup p1 = Lookups.fixed(orig, convertor);
assertNull("Converting from String to Integer - it should not find String in result", p1.lookup(String.class));
assertNotNull(p1.lookup(Integer.class));
assertNotNull(p1.lookup(Integer.class));
assertTrue("Convertor should be called only once.", convertor.getNumberOfConvertCalls() == 1);
Lookup.Template t = new Lookup.Template(Integer.class);
Lookup.Result r = p1.lookup(t);
Collection all = r.allInstances();
assertTrue(all.size() == 2);
for (Iterator i = all.iterator(); i.hasNext(); ) {
Object o = i.next();
if (o != TestConvertor.t1 && o != TestConvertor.t2) {
fail("allIinstances contains wrong objects");
}
}
}
private static class TestConvertor implements InstanceContent.Convertor {
static final String TEST1 = "test1";
static final Integer t1 = new Integer(1);
static final String TEST2 = "test2";
static final Integer t2 = new Integer(2);
private int numberOfConvertCalls = 0;
public Object convert(Object obj) {
numberOfConvertCalls++;
if (obj.equals(TEST1)) {
return t1;
}
if (obj.equals(TEST2)) {
return t2;
}
throw new IllegalArgumentException();
}
public String displayName(Object obj) {
return obj.toString();
}
public String id(Object obj) {
if (obj.equals(TEST1)) {
return TEST1;
}
if (obj.equals(TEST2)) {
return TEST2;
}
return null;
}
public Class type(Object obj) {
return Integer.class;
}
int getNumberOfConvertCalls() {
return numberOfConvertCalls;
}
}
public void testLookupItem() {
SomeInst inst = new SomeInst();
Lookup.Item item = Lookups.lookupItem(inst, "XYZ");
assertTrue("Wrong instance", item.getInstance() == inst);
assertTrue("Wrong instance class", item.getType() == inst.getClass());
assertEquals("Wrong id", "XYZ", item.getId());
item = Lookups.lookupItem(inst, null);
assertNotNull("Id must never be null", item.getId());
}
public void testLookupItemEquals() {
SomeInst instA = new SomeInst();
SomeInst instB = new SomeInst();
Lookup.Item itemA = Lookups.lookupItem(instA, null);
Lookup.Item itemB = Lookups.lookupItem(instB, null);
assertTrue("Lookup items shouldn't be equal", !itemA.equals(itemB) && !itemB.equals(itemA));
itemA = Lookups.lookupItem(instA, null);
itemB = Lookups.lookupItem(instA, null); // same instance
assertTrue("Lookup items should be equal", itemA.equals(itemB) && itemB.equals(itemA));
assertTrue("Lookup items hashcode should be same", itemA.hashCode() == itemB.hashCode());
itemA = Lookups.lookupItem(new String("VOKURKA"), null);
itemB = Lookups.lookupItem(new String("VOKURKA"), null);
assertTrue("Lookup items shouldn't be equal (2)", !itemA.equals(itemB) && !itemB.equals(itemA));
}
public void testAllClassesIssue42399 () throws Exception {
Object[] arr = { "Ahoj", new Object () };
Lookup l = Lookups.fixed (arr);
java.util.Set s = l.lookup (new Lookup.Template (Object.class)).allClasses ();
assertEquals ("Two there", 2, s.size ());
assertTrue ("Contains Object.class", s.contains (Object.class));
assertTrue ("Contains string", s.contains (String.class));
}
public void testLookupItemEarlyInitializationProblem() {
InstanceContent ic = new InstanceContent();
AbstractLookup al = new AbstractLookup(ic);
LI item = new LI();
ArrayList pairs1 = new ArrayList();
ArrayList pairs2 = new ArrayList();
assertEquals("Item's instance shouldn't be requested", 0, item.cnt);
pairs1.add(new ItemPair(Lookups.lookupItem(new SomeInst(), null)));
pairs1.add(new ItemPair(item));
pairs1.add(new ItemPair(Lookups.lookupItem(new Object(), null)));
pairs2.add(new ItemPair(item));
pairs2.add(new ItemPair(Lookups.lookupItem(new Object(), null)));
ic.setPairs(pairs1);
ic.setPairs(pairs2);
assertEquals("Item's instance shouldn't be requested when added to lookup", 0, item.cnt);
LI item2 = (LI) al.lookup(LI.class);
assertEquals("Item's instance should be requested", 1, item.cnt);
}
private static class SomeInst { }
private static class LI extends Lookup.Item {
public long cnt = 0;
public String getDisplayName() {
return getId();
}
public String getId() {
return getClass() + "@" + hashCode();
}
public Object getInstance() {
cnt++;
return this;
}
public Class getType() {
return getClass();
}
} // End of LI class
private static class ItemPair extends AbstractLookup.Pair {
private AbstractLookup.Item item;
public ItemPair (Lookup.Item i) {
this.item = i;
}
protected boolean creatorOf(Object obj) {
return item.getInstance() == obj;
}
public String getDisplayName() {
return item.getDisplayName ();
}
public String getId() {
return item.getId ();
}
public Object getInstance() {
return item.getInstance ();
}
public Class getType() {
return item.getType ();
}
protected boolean instanceOf(Class c) {
return c.isAssignableFrom (getType ());
}
public boolean equals (Object o) {
if (o instanceof ItemPair) {
ItemPair p = (ItemPair)o;
return item.equals (p.item);
}
return false;
}
public int hashCode () {
return item.hashCode ();
}
} // end of ItemPair
}
|
| ... 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.