|
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-2001 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.nodes; import junit.framework.*; import junit.textui.TestRunner; import java.util.*; import org.openide.cookies.EditCookie; import org.openide.cookies.OpenCookie; import org.openide.cookies.SaveCookie; import org.openide.nodes.*; import org.netbeans.junit.*; import javax.swing.event.ChangeListener; /** Tests behaviour of CookieSet. * * @author Jaroslav Tulach */ public class CookieSetTest extends NbTestCase { public CookieSetTest(String name) { super(name); } public static void main(String[] args) { TestRunner.run(new NbTestSuite(CookieSetTest.class)); } public void testAddRemove () throws Exception { CookieSet set = new CookieSet (); L l = new L (); set.addChangeListener(l); C1 a1 = new C1 (); C1 c1 = new C1 (); C2 c2 = new C2 (); set.add (c1); assertEquals ("One change expected", l.cnt (), 1); assertEquals ("Node.Cookie", c1, set.getCookie (Node.Cookie.class)); // replacing the c1 with a1 set.add (a1); assertEquals ("One change expected", l.cnt (), 1); assertEquals ("Node.Cookie", a1, set.getCookie (Node.Cookie.class)); // removing the cookie a1 leaves the set empty set.remove (a1); assertEquals ("One change expected", l.cnt (), 1); assertNull ("Node.Cookie", set.getCookie (Node.Cookie.class)); // adding c1 again set.add (c1); assertEquals ("One change expected", l.cnt (), 1); assertEquals ("Node.Cookie", c1, set.getCookie (Node.Cookie.class)); // and c2 set.add (c2); assertEquals ("One change expected", l.cnt (), 1); assertEquals ("C1 cookie", c1, set.getCookie (Node.Cookie.class)); assertEquals ("C2 index", c2, set.getCookie (Index.class)); // removing c2 leaves to null on Index cookie set.remove (c2); assertEquals ("One change expected", l.cnt (), 1); assertEquals ("C1 cookie", c1, set.getCookie (Node.Cookie.class)); assertNull ("Null index", set.getCookie (Index.class)); } /** Adding smaller and bigger and removing smaller. */ public void testAddSBremoveS () { CookieSet set = new CookieSet (); C1 c1 = new C1 (); C2 c2 = new C2 (); // after adding c1 set.add (c1); // adding c2 and removing c1 set.add (c2); set.remove (c1); assertEquals ("C2 index", c2, set.getCookie (Index.class)); assertEquals ("C2 cookie", c2, set.getCookie (Node.Cookie.class)); } /** Adding bigger and smaller and removing bigger. */ public void testAddBSremoveB () { CookieSet set = new CookieSet (); C1 c1 = new C1 (); C2 c2 = new C2 (); // after adding c1 set.add (c2); assertEquals ("Bigger registered", c2, set.getCookie (Node.Cookie.class)); // adding c2 and removing c1 set.add (c1); assertEquals ("Smaller takes preceedence", c1, set.getCookie (Node.Cookie.class)); set.remove (c2); assertEquals ("C1 cookie", c1, set.getCookie (Node.Cookie.class)); assertEquals ("Null index", null, set.getCookie (Index.class)); } /** Tests behaviour of modifications via factory. */ public void testFactoryAddRemove () { L l = new L (); CookieSet set = new CookieSet (); set.addChangeListener(l); set.add (C1.class, l); assertEquals ("One change", l.cnt (), 1); Node.Cookie obj = set.getCookie (C1.class); if (! (obj instanceof C1)) { fail ("Instance created by factory is wrong"); } if (obj != set.getCookie (C1.class)) { fail ("New cookie created even it should not"); } if (obj != set.getCookie (Node.Cookie.class)) { fail ("C1 is not registered as cookie"); } // replace set.add (C1.class, l); assertEquals ("One change", l.cnt (), 1); if (obj == set.getCookie (C1.class)) { fail ("Factory changed, but cookie remains"); } obj = set.getCookie (C1.class); // remove set.remove (obj); assertNotNull("Factory cookies cannot directly be removed", set.getCookie (C1.class)); // remove of a factory set.remove(C1.class, l); assertNull("Removed factory still returns a cookie", set.getCookie (C1.class)); } /** Tests behaviour of modifications via factory. */ public void testFactoryAddRemoveInherit () { L l = new L (); CookieSet set = new CookieSet (); set.addChangeListener(l); set.add (C1.class, l); set.add (Node.Cookie.class, l); assertNull ("Nobody registered as C2", set.getCookie (C2.class)); { Node.Cookie cookie = set.getCookie (Node.Cookie.class); if (! (cookie instanceof C2)) { fail ("factory provides cookie C2 for Node.Cookie"); } } { Node.Cookie c1 = set.getCookie (C1.class); assertNotNull (c1); assertEquals ("Factory provides C1 for C1 class", c1.getClass (), C1.class); } assertNull ("Still nobody registered as C2", set.getCookie (C2.class)); } public void testCookieSetThruLookupReturnsTheSame () throws Exception { doCookieSetTestsToSimulateIssue47411 (Node.Cookie.class, false); } public void testCookieSetThruLookupReturnsTheSameEvenWhenQueriedForLarger () throws Exception { doCookieSetTestsToSimulateIssue47411 (Index.class, false); } public void testCookieSetThruLookupReturnsTheSameWithFilter () throws Exception { doCookieSetTestsToSimulateIssue47411 (Node.Cookie.class, true); } public void testCookieSetThruLookupReturnsTheSameEvenWhenQueriedForLargerWithFilter () throws Exception { doCookieSetTestsToSimulateIssue47411 (Index.class, true); } private void doCookieSetTestsToSimulateIssue47411 (Class firstQuery, boolean filter) throws Exception { AbstractNode an = new AbstractNode (Children.LEAF); CookieSet set = new CookieSet (); an.setCookieSet (set); Node n = filter ? (Node)new FilterNode (an) : (Node)an; C1 c1 = new C1 (); C2 c2 = new C2 (); // after adding c1 set.add (c2); assertEquals ("Bigger registered", c2, set.getCookie (firstQuery)); assertEquals ("Bigger in lookup", c2, n.getLookup ().lookup (firstQuery)); // adding c2 and removing c1 set.add (c1); assertEquals ("Smaller takes preceedence", c1, set.getCookie (Node.Cookie.class)); assertEquals ("Smaller even in lookup", c1, n.getLookup ().lookup (Node.Cookie.class)); } public void testCookieSetThruLookupImprovedVersionIssue47411 () throws Exception { doCookieSetThruLookupImprovedVersionIssue47411 (false); } public void testCookieSetThruLookupImprovedVersionWithFitlerIssue47411 () throws Exception { doCookieSetThruLookupImprovedVersionIssue47411 (true); } private void doCookieSetThruLookupImprovedVersionIssue47411 (boolean filter) throws Exception { AbstractNode node = new AbstractNode (Children.LEAF); CookieSet set = new CookieSet (); node.setCookieSet (set); Node an = filter ? (Node)new FilterNode (node) : (Node)node; class X implements org.openide.cookies.OpenCookie, org.openide.cookies.EditCookie { public void open () { } public void edit () { } } X x = new X (); class A implements org.openide.cookies.OpenCookie { public void open () { } } A a = new A (); set.add (a); set.add (x); Object edit = an.getLookup ().lookup (org.openide.cookies.EditCookie.class); assertEquals ("X has edit", x, edit); Object open = an.getLookup ().lookup (org.openide.cookies.OpenCookie.class); assertEquals ("Just verify that CookieSet returns A", a, set.getCookie (org.openide.cookies.OpenCookie.class)); assertEquals ("A has open", a, open); assertEquals (null, an.getLookup ().lookup (SaveCookie.class)); assertEquals (a, an.getLookup ().lookup (OpenCookie.class)); assertEquals (x, an.getLookup ().lookup (EditCookie.class)); } /** Change listener. */ private static final class L extends Object implements ChangeListener, CookieSet.Factory { private int count; public void stateChanged(javax.swing.event.ChangeEvent changeEvent) { count++; } /** Gets and clears the count. */ public int cnt () { int c = count; count = 0; return c; } /** Creates a Node.Cookie of given class. The method * may be called more than once. */ public Node.Cookie createCookie(Class klass) { if (klass == C1.class) { return new C1 (); } return new C2 (); } } /** A simple cookie. */ private static class C1 implements Node.Cookie { } /** A complicated cookie. */ private static final class C2 extends C1 implements Index { /** Get the index of a given node. * @param node node to find index of * @return index of the node, or |
... 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.