/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. */ package org.jdesktop.swingx; import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import java.io.IOException; import java.net.URL; import java.util.logging.Logger; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.JEditorPane; import javax.swing.text.html.HTMLDocument; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * A unit test for the JXEditorPane * * @author Mark Davidson */ @RunWith(JUnit4.class) public class JXEditorPaneTest extends InteractiveTestCase { @SuppressWarnings("all") private static final Logger LOG = Logger.getLogger(JXEditorPaneTest.class .getName()); private static String testText = "This is an example of some text"; /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * undo is enabled if there is selected text and editor editable * disabled otherwise. * */ @Test public void testXDisabledUndoAction() { JXEditorPane editor = new JXEditorPane(); editor.setEditable(false); editor.setText(testText); assertEquals(testText, editor.getText()); Action action = editor.getActionMap().get("undo"); assertFalse("undo must not be enabled", action.isEnabled()); } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * cut is enabled if there is selected text and editor editable * disabled otherwise. * */ @Test public void testXDisabledCutActionUnselected() { JXEditorPane editor = new JXEditorPane(); editor.setText("some"); editor.setEditable(true); Action action = editor.getActionMap().get("cut"); assertFalse("cut of unselected must not be enabled", action.isEnabled()); } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * cut is enabled if there is selected text and editor editable * disabled otherwise. */ @Test public void testXDisabledCutActionOnNotEditable() { JXEditorPane editor = new JXEditorPane(); editor.setText("some"); editor.selectAll(); editor.setEditable(false); Action action = editor.getActionMap().get("cut"); assertFalse("cut of uneditable editor must not be enabled", action.isEnabled()); } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * * paste is enabled if the editor is editable and the clipboard isn't empty, * disabled otherwise. * */ @Test public void testXDisabledPasteActionOnNotEditable() { JXEditorPane editor = new JXEditorPane(); editor.setEditable(false); Action action = editor.getActionMap().get("paste"); assertFalse("paste of uneditable editor must not be enabled", action.isEnabled()); } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * * paste is enabled if the editor is editable the clipboard isn't empty. * can't really test ... don't want to clear the clipboard as a test side-effect. */ @Test public void testXDisabledPasteEmptyClipboard() { JXEditorPane editor = new JXEditorPane(); editor.setEditable(true); // can't really test - want to erase system clipboard? // Action action = editor.getActionMap().get("paste"); // assertFalse("paste with empty clipboard must not be enabled", action.isEnabled()); } @Test public void testInitialization() throws IOException { URL url = JXEditorPaneTest.class.getResource("resources/test.html"); JXEditorPane editor = new JXEditorPane(); editor.setContentType("text/html"); editor.setPage(url); assertTrue(editor.getDocument() instanceof HTMLDocument); assertNotNull(editor.getCaretListener()); assertNotNull(editor.getUndoableEditListener()); editor = new JXEditorPane("text/html", ""); editor.setPage(url); assertTrue(editor.getDocument() instanceof HTMLDocument); assertNotNull(editor.getCaretListener()); assertNotNull(editor.getUndoableEditListener()); editor = new JXEditorPane(); assertFalse(editor.getDocument() instanceof HTMLDocument); assertNull(editor.getCaretListener()); } @Test public void testRegistration() { } @Test public void testCutPastePlain() { JXEditorPane editor = new JXEditorPane("text/plain", testText); editorCutPaste(editor); } /** * XXX currently the html cut and paste is broken. A work around has been * implemented to use only plain text on the clip. This test will fail * if the text contains some markup like <b>foo</b> */ @Test public void testCutPasteHtml() { JXEditorPane editor = new JXEditorPane("text/html", testText); editorCutPaste(editor); } public void editorCutPaste(JEditorPane editor) { // This test will not work in a headless configuration. if (GraphicsEnvironment.isHeadless()) { return; } // set selection markers editor.select(4, 15); // get cut and paste actions and execute them simultaniously ActionMap map = editor.getActionMap(); Action cut = map.get("cut-to-clipboard"); Action paste = map.get("paste-from-clipboard"); assertNotNull(cut); assertNotNull(paste); String before = editor.getText(); cut.actionPerformed(new ActionEvent(editor, 0, (String)cut.getValue(Action.ACTION_COMMAND_KEY))); // XXX caret position should be moved in the cut operation editor.setCaretPosition(4); paste.actionPerformed(new ActionEvent(editor, 0, (String)paste.getValue(Action.ACTION_COMMAND_KEY))); assertEquals(before, editor.getText()); } }