/*
* $Id$
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*/
package org.jdesktop.swingx.action;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* Tests registration and command execution of the target manager.
*
* @author Mark Davidson
*/
@RunWith(JUnit4.class)
public class TargetManagerTest extends TestCase {
@Before
public void setUpJ4() throws Exception {
setUp();
}
@After
public void tearDownJ4() throws Exception {
tearDown();
}
@Override
protected void tearDown() {
TargetManager manager = TargetManager.getInstance();
manager.reset();
}
/**
* By default, there are no targets.
*/
@Test
public void testGetTargets() {
TargetManager manager = TargetManager.getInstance();
assertNull(manager.getTarget());
Targetable[] targets = manager.getTargets();
assertNotNull(targets);
assertTrue(targets.length == 0);
}
/**
* Test Target registration methods.
*/
@Test
public void testAddRemoveTargets() {
FooTarget foo = new FooTarget();
BarTarget bar = new BarTarget();
TargetManager manager = TargetManager.getInstance();
// append targets
manager.addTarget(foo);
manager.addTarget(bar);
Targetable[] targets = manager.getTargets();
assertNotNull(targets);
assertTrue(targets.length == 2);
// by default, targets are appended to the list.
assertTrue(targets[0] == foo);
assertTrue(targets[1] == bar);
// Test removal
manager.removeTarget(foo);
manager.removeTarget(bar);
targets = manager.getTargets();
assertNotNull(targets);
assertTrue(targets.length == 0);
// add targets, prepend bar
manager.addTarget(foo);
manager.addTarget(bar, true);
targets = manager.getTargets();
assertNotNull(targets);
assertTrue(targets.length == 2);
assertTrue(targets[0] == bar);
assertTrue(targets[1] == foo);
}
/**
* Tests doCommand for both explicit targets and the targets in the list.
*/
@Test
public void testDoCommand() {
FooTarget foo = new FooTarget();
BarTarget bar = new BarTarget();
TargetManager manager = TargetManager.getInstance();
// set explicit targets
manager.setTarget(foo);
assertTrue(manager.doCommand("foo", null));
assertFalse(manager.doCommand("bar", null));
manager.setTarget(bar);
assertTrue(manager.doCommand("bar", null));
assertFalse(manager.doCommand("foo", null));
// Add both of the targets all commands are valid
manager.setTarget(null);
manager.addTarget(foo);
manager.addTarget(bar);
assertTrue(manager.doCommand("bar", null));
assertTrue(manager.doCommand("foo", null));
}
//
// Some examples of Targets
//
private class FooTarget implements Targetable {
public String FOO_ACTION = "foo";
public boolean doCommand(Object command, Object value) {
return hasCommand(command);
}
public boolean hasCommand(Object command) {
if (command.equals(FOO_ACTION)) {
return true;
}
return false;
}
public Object[] getCommands() {
return new Object[] { FOO_ACTION };
}
}
private class BarTarget implements Targetable {
public String BAR_ACTION = "bar";
public boolean doCommand(Object command, Object value) {
return hasCommand(command);
}
public boolean hasCommand(Object command) {
if (command.equals(BAR_ACTION)) {
return true;
}
return false;
}
public Object[] getCommands() {
return new Object[] { BAR_ACTION };
}
}
}