/*
* Created on 28.03.2006
*
*/
package org.jdesktop.swingx.hyperlink;
import java.awt.Desktop;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.logging.Logger;
import javax.swing.Action;
import junit.framework.TestCase;
import org.jdesktop.test.PropertyChangeReport;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
*
* @author Jeanette Winzenburg, Berlin
*/
@RunWith(JUnit4.class)
public class HyperlinkActionTest extends TestCase {
@SuppressWarnings("unused")
private static final Logger LOG = Logger
.getLogger(HyperlinkActionTest.class.getName());
private PropertyChangeReport report;
@Before
public void setUpJ4() throws Exception {
setUp();
}
@After
public void tearDownJ4() throws Exception {
tearDown();
}
/**
* Issue #1227-swingx: HyperlinkAction - update visited property
* @throws URISyntaxException
*/
@Test
public void testVisited() throws URISyntaxException {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
URI uri = new URI("http://someserver.de");
HyperlinkAction action = HyperlinkAction.createHyperlinkAction(uri);
action.actionPerformed(null);
assertEquals(true, action.isVisited());
}
@Test
public void testURIActionFactoryMail() throws URISyntaxException {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
URI uri = new URI("mailto:java-net@java.sun.com");
HyperlinkAction action = HyperlinkAction.createHyperlinkAction(uri);
assertEquals(true, action.isEnabled());
assertEquals(Desktop.Action.MAIL, action.getDesktopAction());
}
@Test
public void testURIActionFactoryBrowseNull() {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
HyperlinkAction action = HyperlinkAction.createHyperlinkAction(null);
assertEquals(false, action.isEnabled());
assertEquals(Desktop.Action.BROWSE, action.getDesktopAction());
}
@Test
public void testURIActionPerformed() {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
HyperlinkAction action = new HyperlinkAction();
action.actionPerformed(null);
}
@Test
public void testURIActionNullMailEnabled() {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
HyperlinkAction action = new HyperlinkAction(Desktop.Action.MAIL);
assertEquals(true, action.isEnabled());
}
@Test
public void testURIActionNullTargetBrowseDisabled() {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
HyperlinkAction action = new HyperlinkAction();
assertEquals(false, action.isEnabled());
}
@Test
public void testUriActionEmptyConstructor() {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
return;
}
HyperlinkAction action = new HyperlinkAction();
assertEquals(Desktop.Action.BROWSE, action.getDesktopAction());
}
@Test (expected=IllegalArgumentException.class)
public void testUriActionIllegalType() {
// This test will not work in a headless configuration.
if (GraphicsEnvironment.isHeadless()) {
LOG.fine("cannot run ui test - headless environment");
throw new IllegalArgumentException("dummy");
}
new HyperlinkAction(Desktop.Action.EDIT);
}
/**
* test if auto-installed visited property is respected.
*
*/
@Test
public void testConstructorsAndCustomTargetInstall() {
Object target = new Object();
final boolean visitedIsTrue = true;
AbstractHyperlinkAction<Object> linkAction = new AbstractHyperlinkAction<Object>(target) {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
@Override
protected void installTarget() {
super.installTarget();
setVisited(visitedIsTrue);
}
};
assertEquals(visitedIsTrue, linkAction.isVisited());
}
/**
* test constructors with parameters
*
*/
@Test
public void testConstructors() {
Object target = new Object();
AbstractHyperlinkAction<Object> linkAction = new AbstractHyperlinkAction<Object>(target) {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
};
assertEquals(target, linkAction.getTarget());
assertFalse(linkAction.isVisited());
}
/**
* test visited/target properties of LinkAction.
*
*/
@Test
public void testLinkAction() {
AbstractHyperlinkAction<Object> linkAction = new AbstractHyperlinkAction<Object>(null) {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
};
linkAction.addPropertyChangeListener(report);
boolean visited = linkAction.isVisited();
assertFalse(visited);
linkAction.setVisited(!visited);
assertEquals(!visited, linkAction.isVisited());
assertEquals(1, report.getEventCount(AbstractHyperlinkAction.VISITED_KEY));
report.clear();
// testing target property
assertNull(linkAction.getTarget());
Object target = new Object();
linkAction.setTarget(target);
assertEquals(target, linkAction.getTarget());
assertEquals(1, report.getEventCount("target"));
// testing documented default side-effects of un/installTarget
assertEquals(target.toString(), linkAction.getName());
assertFalse(linkAction.isVisited());
assertEquals(1, report.getEventCount(Action.NAME));
assertEquals(1, report.getEventCount(AbstractHyperlinkAction.VISITED_KEY));
// fired the expected events only.
assertEquals(3, report.getEventCount());
}
@Override
protected void setUp() throws Exception {
super.setUp();
report = new PropertyChangeReport();
}
}