Package javax.swing.text

Source Code of javax.swing.text.DefaultCaretTest

/*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
/**
* @author Evgeniya G. Maenkova
*/
package javax.swing.text;

import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.EventListener;
import javax.swing.ExtJTextArea;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingTestCase;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.TextUI;
import javax.swing.text.Position.Bias;

public class DefaultCaretTest extends SwingTestCase {
    JTextArea jta = null;

    JFrame jf = null;

    DefaultCaret dc = null;

    Rectangle r1, r2, r3, r4, r5, r6, r;

    int tCompListenersCount;

    //int tmp;
    Point p;

    Highlighter.HighlightPainter pnt;

    AbstractDocument ad;

    boolean bWasException = false;

    String s = null;

    String fireTest = "";

    String sRTL = new String("\u05DC");

    String sLTR = new String("\u0061");

    Color c1 = new Color(234);

    Color c2 = new Color(235);

    SimpleNavigationFilter filter;

    SimpleChangeListener CHL;

    class SimpleChangeListenerForFire implements ChangeListener {
        int flag = 0;

        String s1;

        SimpleChangeListenerForFire(final String s) {
            s1 = s;
        }

        public void stateChanged(final ChangeEvent e) {
            flag = 1;
            fireTest = fireTest + s1;
            //System.out.println("state changed");
        }
    }

    class SimpleChangeListener implements ChangeListener {
        int flag = 0;

        public void stateChanged(final ChangeEvent e) {
            flag = 1;
            //System.out.println("state changed");
        }
    }

    class SimpleCaretListener implements CaretListener {
        public void caretUpdate(final CaretEvent e) {
            System.out.println("caret update");
        }
    }

    class SimpleNavigationFilter extends NavigationFilter {
        int flagSetDot = 0;

        int flagMoveDot = 0;

        @Override
        public void setDot(final FilterBypass f, final int i, final Bias b) {
            flagSetDot = 1;
            super.setDot(f, i, b);
        }

        @Override
        public void moveDot(final FilterBypass arg0, final int i, final Bias b) {
            flagMoveDot = 1;
            super.moveDot(arg0, i, b);
        }
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        jta = new ExtJTextArea("JTextArea for DefaultCaret Testing\n***\n*%%%**");
        dc = new DefaultCaret();
        jf = new JFrame();
        p = new Point(5, 16);
        bWasException = false;
        s = null;
        r = null;
        r1 = null;
        r2 = null;
        r3 = null;
        r4 = null;
        r5 = null;
        r6 = null;
        ad = (AbstractDocument) jta.getDocument();
        jf.getContentPane().add(jta);
        jta.getCaret().deinstall(jta);
        tCompListenersCount = jta.getListeners(MouseListener.class).length
                + jta.getListeners(MouseMotionListener.class).length
                + jta.getListeners(FocusListener.class).length
                + jta.getPropertyChangeListeners().length;
        jta.setCaret(dc);
        jf.setLocation(100, 100);
        jf.setSize(350, 200);
        jf.pack();
        init();
    }

    public void init() {
        try {
            r1 = jta.modelToView(6);
            r2 = jta.modelToView(10);
            r3 = jta.modelToView(15);
            r4 = jta.modelToView(2);
            TextUI textUI = jta.getUI();
            r5 = textUI.modelToView(jta, 5, Position.Bias.Backward);
            r6 = textUI.modelToView(jta, 7, Position.Bias.Forward);
            assertNotNull(r1);
            assertNotNull(r2);
            assertNotNull(r3);
            assertNotNull(r4);
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception " + s, bWasException);
    }

    @Override
    protected void tearDown() throws Exception {
        jf.dispose();
        super.tearDown();
    }

    /*
     * If or not elem in list
     *
     */
    boolean findListener(final EventListener[] list, final EventListener elem) {
        if (list == null) {
            return false;
        }
        for (int i = 0; i < list.length; i++) {
            if (list[i] == elem) {
                return true;
            }
        }
        return false;
    }

    /**
     * Constructor for DefaultCaretTest.
     *
     * @param arg0
     */
    public DefaultCaretTest(final String arg0) {
        super(arg0);
    }

    public void testDefaultCaret() {
        assertNotNull(dc);
    }

    public void testGetComponent() {
        assertEquals(jta, dc.getComponent());
    }

    /*
     * Tests that listeners was added to JTextComponent. Doesn't test that
     * DocumentListener was added to JTextComponent. Doesn't test that Dot and
     * Mark is 0.
     */
    public void testInstall() {
        int tCompListenersCountCurrent = jta.getListeners(MouseListener.class).length
                + jta.getListeners(MouseMotionListener.class).length
                + jta.getListeners(FocusListener.class).length
                + jta.getPropertyChangeListeners().length;
        assertEquals(tCompListenersCount, tCompListenersCountCurrent - 4);

        try { // Regression test for HARMONY-1750
            new DefaultCaret().install(null);
            fail("NullPointerException should have been thrown");
        } catch (NullPointerException e) {
            // Expected
        }
    }

    /*
     * Tests that listeners was removed from JTextComponent. Doesn't test that
     * Document listener was removed.
     */
    public void testDeinstall() throws Exception {
        int i = jta.getListeners(MouseListener.class).length;
        int j = jta.getListeners(MouseMotionListener.class).length;
        int k = jta.getListeners(FocusListener.class).length;
        int l = jta.getPropertyChangeListeners().length;
        dc.deinstall(jta);
        assertNull(dc.getComponent());
        assertEquals(i, jta.getListeners(MouseListener.class).length + 1);
        assertEquals(j, jta.getListeners(MouseMotionListener.class).length + 1);
        assertEquals(k, jta.getListeners(FocusListener.class).length + 1);
        assertEquals(l, jta.getPropertyChangeListeners().length + 1);
        assertFalse(findListener(jta.getListeners(MouseListener.class), dc));
        assertFalse(findListener(jta.getListeners(MouseListener.class), dc));
        assertFalse(findListener(jta.getListeners(FocusListener.class), dc));
    }

    /*
     * Tests methods IsVisible and SetVisible
     */
    public void testIsVisible() throws Exception {
        dc.setVisible(true);
        assertTrue("dc.isVisible()= false after" + " dc.setVisible(true)", dc.isVisible());
        dc.setVisible(false);
        assertFalse("dc.isVisible()= true after" + " dc.setVisible(false)", dc.isVisible());
    }

    /*
     * Tests methods isSelectionVisible and setSelectionVisible
     */
    public void testIsSelectionVisible() throws Exception {
        assertNotNull(dc);
        dc.setSelectionVisible(true);
        assertTrue("dc.isSelectionVisible()= false after" + " dc.setSelectionVisible(true)", dc
                .isSelectionVisible());
        dc.setSelectionVisible(false);
        assertFalse("dc.isSelectionVisible()= true after" + " dc.setSelectionVisible(false)",
                dc.isSelectionVisible());
    }

    public void testEquals() {
        assertFalse(dc.equals(new DefaultCaret()));
        assertTrue(dc.equals(dc));
        assertTrue(dc.equals(jta.getCaret()));
    }

    /*
     * Tests addChangeListener,removeChangeListener, getChangeListener
     */
    public void testChangeListeners() {
        try {
            SimpleChangeListener t1 = new SimpleChangeListener();
            SimpleChangeListener t2 = new SimpleChangeListener();
            SimpleChangeListener t3 = new SimpleChangeListener();
            dc.addChangeListener(t1);
            assertTrue(findListener(dc.getChangeListeners(), t1));
            assertTrue(findListener(dc.listenerList.getListeners(ChangeListener.class), t1));
            dc.addChangeListener(t2);
            assertTrue(findListener(dc.getChangeListeners(), t1));
            assertTrue(findListener(dc.listenerList.getListeners(ChangeListener.class), t1));
            assertTrue(findListener(dc.getChangeListeners(), t2));
            assertTrue(findListener(dc.listenerList.getListeners(ChangeListener.class), t2));
            dc.addChangeListener(t3);
            assertTrue(findListener(dc.getChangeListeners(), t1));
            assertTrue(findListener(dc.listenerList.getListeners(ChangeListener.class), t1));
            assertTrue(findListener(dc.getChangeListeners(), t2));
            assertTrue(findListener(dc.listenerList.getListeners(ChangeListener.class), t2));
            assertTrue(findListener(dc.getChangeListeners(), t3));
            assertTrue(findListener(dc.listenerList.getListeners(ChangeListener.class), t3));
            dc.removeChangeListener(t1);
            assertFalse(findListener(dc.getChangeListeners(), t1));
            assertFalse(findListener(dc.listenerList.getListeners(ChangeListener.class), t1));
            dc.removeChangeListener(t2);
            assertFalse(findListener(dc.getChangeListeners(), t1));
            assertFalse(findListener(dc.listenerList.getListeners(ChangeListener.class), t1));
            assertFalse(findListener(dc.getChangeListeners(), t2));
            assertFalse(findListener(dc.listenerList.getListeners(ChangeListener.class), t2));
            dc.removeChangeListener(t3);
            assertFalse(findListener(dc.getChangeListeners(), t1));
            assertFalse(findListener(dc.listenerList.getListeners(ChangeListener.class), t1));
            assertFalse(findListener(dc.getChangeListeners(), t2));
            assertFalse(findListener(dc.listenerList.getListeners(ChangeListener.class), t2));
            assertFalse(findListener(dc.getChangeListeners(), t3));
            assertFalse(findListener(dc.listenerList.getListeners(ChangeListener.class), t3));
        } catch (NullPointerException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception: " + s, bWasException);
    }

    public void testGetBlinkRate() throws Exception {
        assertEquals(0, dc.getBlinkRate());
        dc.setBlinkRate(100);
        assertEquals(100, dc.getBlinkRate());

        try { // Regression test for HARMONY-1795
            dc.setBlinkRate(-1);
            fail("IllegalArgumentException should have been thrown");
        } catch (IllegalArgumentException e) {
            // Expected
        }
    }

    public void testSetDot() throws Exception {
        dc.setDot(8);
        dc.moveDot(10);
        dc.setDot(5);
        assertEquals(5, dc.getDot());
        assertEquals(5, dc.getMark());
    }

    public void testMoveDot() throws Exception {
        dc.setDot(4);
        dc.moveDot(9);
        assertEquals("tArea", jta.getSelectedText());
        dc.moveDot(11);
        assertEquals("tArea f", jta.getSelectedText());
    }

    public void testGetDot() throws Exception {
        jta.setSelectionStart(11);
        jta.setSelectionEnd(14);
        assertEquals(14, dc.getDot());
        assertEquals(11, dc.getMark());
    }

    void checkValues(final int dot, final Position.Bias dotBias) {
        assertEquals(dot, dc.getDot());
        assertEquals(dot, dc.getMark());
        assertEquals(dotBias, dc.getDotBias());
    }

    /*
     * Tryes to set caret position by Mouse Events (dot = mark)
     */
    public void testPositionCaret() throws Exception {
        Position.Bias bias[] = new Position.Bias[1];
        int tmp;
        jta.setText(sLTR + sRTL + sLTR + sRTL + sLTR + sRTL + sLTR + sRTL);
        //dc.setDot(8);
        //dc.moveDot(10);
        dc.positionCaret(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0, 0, jta.getX() + r1.x,
                jta.getY() + r1.y, 0, false));
        tmp = jta.getUI().viewToModel(jta, new Point(r1.x, r1.y), bias);
        checkValues(tmp, bias[0]);
        //checkValues(6,6,Position.Bias.Backward);
        dc.positionCaret(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0, 0, jta.getX() + r5.x,
                jta.getY() + r5.y, 0, false));
        tmp = jta.getUI().viewToModel(jta, new Point(r5.x, r5.y), bias);
        checkValues(tmp, bias[0]);
        //checkValues(4,4,Position.Bias.Forward);
        dc.positionCaret(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0, 0, jta.getX() + r6.x,
                jta.getY() + r6.y, 0, false));
        tmp = jta.getUI().viewToModel(jta, new Point(r6.x, r6.y), bias);
        checkValues(tmp, bias[0]);
        //checkValues(6,6,Position.Bias.Forward);
    }

    /*
     * Tryes to move caret position by Mouse Events (dot = mark)
     */
    public void testMoveCaret() throws Exception {
        dc.positionCaret(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0, 0, jta.getX() + r1.x,
                jta.getY() + r1.y, 0, false));
        dc.moveCaret(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0, 0, jta.getX() + r2.x, jta
                .getY()
                + r2.y, 0, false));
        assertEquals(10, dc.getDot());
        assertEquals(6, dc.getMark());
        assertEquals(10, jta.getCaretPosition());
        dc.moveCaret(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0, 0, jta.getX() + r3.x, jta
                .getY()
                + r3.y, 0, false));
        assertEquals(15, dc.getDot());
        assertEquals(6, dc.getMark());
        assertEquals(15, jta.getCaretPosition());
    }

    /*
     * Tests setMagicCaretPosition and getMagicCaretPosition
     */
    public void testSetMagicCaretPosition() throws Exception {
        dc.setMagicCaretPosition(p);
        assertTrue(dc.getMagicCaretPosition().equals(p));
    }

    // TODO: may be add other listeners (not ChangeListener)
    public void testGetListeners() {
        EventListener[] EvLList = null;
        SimpleChangeListener ChL1 = new SimpleChangeListener();
        SimpleChangeListener ChL2 = new SimpleChangeListener();
        //SimpleCaretListener CL1 = new SimpleCaretListener();
        //SimpleCaretListener CL2 = new SimpleCaretListener();
        dc.addChangeListener(ChL1);
        dc.addChangeListener(ChL2);
        EvLList = dc.getListeners(ChangeListener.class);
        assertTrue(findListener(EvLList, ChL1));
        assertTrue(findListener(EvLList, ChL2));
        //assertEquals(EvLList.length,2);
        if ((EvLList != null) & (dc.getChangeListeners() != null)) {
            assertEquals(EvLList.length, dc.getChangeListeners().length);
            //dc.addChangeListener(ChL1);
            //dc.addChangeListener(ChL2);
        }
    }

    /*
     * To tests adjustVisibility method class ExtJTextArea(ejta) is used. If it
     * was invoked ejta.scrollRectToVisible then ejta.flag would become 1.
     */
    public void testAdjustVisibility() throws Exception {
        try {
            r = jta.modelToView(8);
            if (r == null) {
                assertNull(r);
                return;
            }
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception: " + s, bWasException);
        ((ExtJTextArea) jta).flag = 0;
        dc.adjustVisibility(r1);
        assertEquals(1, ((ExtJTextArea) jta).flag);
    }

    // Regression for HARMONY-2780
    public void testAdjustVisibilityNull() {
        new DefaultCaret().adjustVisibility(null);
        // No exception is expected
    }

    public void testFireStateChanged() {
        SimpleChangeListenerForFire CHL1 = new SimpleChangeListenerForFire("L1");
        SimpleChangeListenerForFire CHL2 = new SimpleChangeListenerForFire("L2");
        SimpleChangeListenerForFire CHL3 = new SimpleChangeListenerForFire("L3");
        dc.addChangeListener(CHL1);
        dc.addChangeListener(CHL2);
        dc.addChangeListener(CHL3);
        assertEquals(0, CHL1.flag);
        assertEquals(0, CHL2.flag);
        assertEquals(0, CHL3.flag);
        assertEquals(fireTest, "");
        dc.fireStateChanged();
        assertEquals(1, CHL1.flag);
        assertEquals(1, CHL2.flag);
        assertEquals(1, CHL3.flag);
        assertEquals(fireTest, "L3L2L1");
    }

    public void testGetSelectionPainter() throws Exception {
        Highlighter.Highlight[] h = jta.getHighlighter().getHighlights();
        pnt = dc.getSelectionPainter();
        assertNotNull("DefaultCaret.getSelectionPainter()=null", pnt);
        if (pnt != null) {
            assertTrue(pnt instanceof DefaultHighlighter.DefaultHighlightPainter);
            try {
                jta.getHighlighter().addHighlight(4, 9, pnt);
            } catch (BadLocationException e) {
                bWasException = true;
                s = e.getMessage();
            }
        }
        assertFalse("Unexpected exception: " + s, bWasException);
        if (pnt == null) {
            return;
        }
        h = jta.getHighlighter().getHighlights();
        assertEquals(1, h.length);
        assertEquals(h[0].getPainter(), dc.getSelectionPainter());
        assertEquals(4, h[0].getStartOffset());
        assertEquals(9, h[0].getEndOffset());
       
        // Regression for HARMONY-1768
        DefaultCaret obj = new DefaultCaret() {
            public  Highlighter.HighlightPainter getSelectionPainter(){
                return super.getSelectionPainter();
            }
        };
        assertNotNull(obj.getSelectionPainter());
    }

    public void testFocusGained() throws Exception {
        jta.setEditable(true);
        dc.focusGained(new FocusEvent(jta, FocusEvent.FOCUS_GAINED));
        assertTrue(dc.isVisible());
        dc.focusLost(new FocusEvent(jta, FocusEvent.FOCUS_LOST));
        jta.setEditable(false);
        dc.focusGained(new FocusEvent(jta, FocusEvent.FOCUS_GAINED));
        assertFalse(dc.isVisible());
        jta.setEditable(true);
        jta.setEnabled(false);
        dc.focusGained(new FocusEvent(jta, FocusEvent.FOCUS_GAINED));
        assertFalse(dc.isVisible());
    }

    public void testFocusLost() throws Exception {
        dc.focusLost(new FocusEvent(jta, FocusEvent.FOCUS_LOST));
        assertFalse(dc.isVisible());
    }

    public void testMouseDragged() throws Exception {
        dc.mousePressed(new MouseEvent(jta, MouseEvent.MOUSE_PRESSED, 0,
                InputEvent.BUTTON1_MASK, jta.getX() + r1.x, jta.getY() + r1.y, 0, false,
                MouseEvent.BUTTON1));
        dc.mouseDragged(new MouseEvent(jta, MouseEvent.MOUSE_DRAGGED, 0,
                InputEvent.BUTTON1_MASK, jta.getX() + r3.x, jta.getY() + r3.y, 0, false,
                MouseEvent.BUTTON1));
        assertEquals("rea for D", jta.getSelectedText());
        /*
         * dc.mousePressed(new MouseEvent(jta, MouseEvent.MOUSE_PRESSED, 0,
         * InputEvent.BUTTON1_MASK, jta.getX() + r4.x, jta .getY() + r4.y, 0,
         * false, MouseEvent.BUTTON1));
         */
        dc.mouseDragged(new MouseEvent(jta, MouseEvent.MOUSE_DRAGGED, 0,
                InputEvent.BUTTON1_MASK, jta.getX() + r4.x, jta.getY() + r4.y, 0, false,
                MouseEvent.BUTTON1));
        assertEquals("extA", jta.getSelectedText());
        /*
         * dc.mouseDragged(new MouseEvent(jta, MouseEvent.MOUSE_DRAGGED, 0,
         * InputEvent.BUTTON3_MASK, jta.getX() + r2.x, jta .getY() + r2.y, 0,
         * false)); try { assertEquals("JTextA", jta.getSelectedText()); } catch
         * (AssertionFailedError e) { e3 = e; }
         *
         * dc.mouseDragged(new MouseEvent(jta, MouseEvent.MOUSE_DRAGGED, 0,
         * InputEvent.BUTTON1_MASK, jta.getX() + r3.x, jta .getY() + r3.y, 0,
         * false)); try { assertEquals("JTextArea for D",
         * jta.getSelectedText()); } catch (AssertionFailedError e) { e4 = e; }
         */
    }

    public void testMouseClicked() throws Exception {
        dc.mouseClicked(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0,
                InputEvent.BUTTON1_DOWN_MASK, jta.getX() + r1.x, jta.getY() + r1.y, 2, false,
                MouseEvent.BUTTON1));
        assertEquals("JTextArea", jta.getSelectedText());
        dc.setDot(5);
        dc.mouseClicked(new MouseEvent(jta, MouseEvent.MOUSE_CLICKED, 0,
                InputEvent.BUTTON1_DOWN_MASK, jta.getX() + r1.x, jta.getY() + r1.y, 3, false,
                MouseEvent.BUTTON1));
        assertEquals("JTextArea for DefaultCaret Testing", jta.getSelectedText());
    }

    public void testMousePressed() throws Exception {
        dc.mousePressed(new MouseEvent(jta, MouseEvent.MOUSE_PRESSED, 0,
                InputEvent.SHIFT_DOWN_MASK, jta.getX() + r3.x, jta.getY() + r3.y, 0, false,
                MouseEvent.BUTTON1));
        assertEquals("JTextArea for D", jta.getSelectedText());
    }

    public void testDocInsChange_DotEqMark() throws Exception {
        try {
            dc.setDot(5);
            jta.getDocument().insertString(3, "insert", null);
            assertFalse("Unexpected exception: " + s, bWasException);
            assertEquals(11, dc.getDot());
            dc.setDot(5);
            jta.getDocument().insertString(2, "ins", null);
            assertFalse("Unexpected exception: " + s, bWasException);
            assertEquals(8, dc.getDot());
            dc.setDot(5);
            jta.getDocument().insertString(5, "inse", null);
            assertFalse("Unexpected exception: " + s, bWasException);
            assertEquals(9, dc.getDot());
            dc.setDot(5);
            jta.getDocument().insertString(7, "insert", null);
            assertEquals(5, dc.getDot());
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception: " + s, bWasException);
    }

    public void testDocInsChange_DotNotEqMark() throws Exception {
        try {
            dc.setDot(11);
            dc.moveDot(6);
            jta.getDocument().insertString(2, "in", null);
            assertEquals(8, dc.getDot());
            assertEquals(13, dc.getMark());
            dc.setDot(11);
            dc.moveDot(6);
            jta.getDocument().insertString(6, "ins", null);
            assertEquals(9, dc.getDot());
            assertEquals(14, dc.getMark());
            dc.setDot(11);
            dc.moveDot(6);
            jta.getDocument().insertString(7, "inser", null);
            assertEquals(6, dc.getDot());
            assertEquals(16, dc.getMark());
            dc.setDot(6);
            dc.moveDot(11);
            jta.getDocument().insertString(11, "insert", null);
            assertEquals(17, dc.getDot());
            assertEquals(6, dc.getMark());
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception: " + s, bWasException);
    }

    public void testDocRemoveChange_DotEqMark() throws Exception {
        dc.setDot(5);
        try {
            jta.getDocument().remove(3, 1);
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertEquals(4, dc.getDot());
        dc.setDot(5);
        try {
            jta.getDocument().remove(2, 3);
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertEquals(2, dc.getDot());
        dc.setDot(5);
        try {
            jta.getDocument().remove(3, 7);
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertEquals(3, dc.getDot());
        dc.setDot(5);
        try {
            jta.getDocument().remove(5, 8);
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertEquals(5, dc.getDot());
        dc.setDot(5);
        try {
            jta.getDocument().remove(7, 2);
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertEquals(5, dc.getDot());
        assertFalse("Unexpected exception: " + s, bWasException);
    }

    public void testDocRemoveChange_DotNotEqMark() throws Exception {
        dc.setDot(11);
        dc.moveDot(6);
        try {
            jta.getDocument().remove(3, 2);
            assertEquals(4, dc.getDot());
            assertEquals(9, dc.getMark());
            dc.setDot(11);
            dc.moveDot(6);
            jta.getDocument().remove(3, 4);
            assertEquals(3, dc.getDot());
            assertEquals(7, dc.getMark());
            dc.setDot(11);
            dc.moveDot(6);
            jta.getDocument().remove(6, 2);
            assertEquals(6, dc.getDot());
            assertEquals(9, dc.getMark());
            dc.setDot(6);
            dc.moveDot(11);
            jta.getDocument().remove(10, 7);
            assertEquals(10, dc.getDot());
            assertEquals(6, dc.getMark());
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception: " + s, bWasException);
    }

    /*
     * for 1.5.0
     *
     */
    public void testDocNeverUpdate() throws Exception {
        dc.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
        dc.setDot(6);
        try {
            jta.getDocument().remove(3, 10);
            assertEquals(6, dc.getDot());
            dc.setDot(11);
            dc.moveDot(6);
            jta.getDocument().remove(3, 10);
            assertEquals(6, dc.getDot());
            assertEquals(11, dc.getMark());
            dc.setDot(6);
            jta.getDocument().remove(2, 20);
            assertEquals(5, dc.getDot());
            dc.setDot(3);
            dc.moveDot(1);
            jta.getDocument().remove(2, 3);
            assertEquals(1, dc.getDot());
            assertEquals(2, dc.getMark());
        } catch (BadLocationException e) {
            bWasException = true;
            s = e.getMessage();
        }
        assertFalse("Unexpected exception: " + s, bWasException);
    }

    /*
     * for 1.5.0
     *
     */
    public void testConstants() {
        assertEquals(DefaultCaret.ALWAYS_UPDATE, 2);
        assertEquals(DefaultCaret.NEVER_UPDATE, 1);
        assertEquals(DefaultCaret.UPDATE_WHEN_ON_EDT, 0);
    }

    /*
     * for 1.5.0
     *
     */
    public void testSetGetUpdatePolicy() {
        dc.setUpdatePolicy(0);
        assertEquals(0, dc.getUpdatePolicy());
        dc.setUpdatePolicy(1);
        assertEquals(1, dc.getUpdatePolicy());
        dc.setUpdatePolicy(2);
        assertEquals(2, dc.getUpdatePolicy());
        //According to documentation there it was Exception
        //but 1.5 never produces it
        try {
            dc.setUpdatePolicy(3);
        } catch (IllegalArgumentException e) {
            bWasException = true;
            s = e.getMessage();
        }
        if (isHarmony()) {
            assertTrue("Not thrown Expected exception: " + s, bWasException);
        }
    }

    public void testCaretColor() throws Exception {
        //TODO Runnable
        jta.setSelectionColor(c1);
        jta.setCaretColor(c2);
        assertEquals(c1, jta.getSelectionColor());
        assertEquals(c2, jta.getCaretColor());
    }

    void checkFlag(final int i1) {
        assertEquals(i1, CHL.flag);
        CHL.flag = 0;
    }

    public void testInvokeFireStateChanged() throws Exception {
        CHL = new SimpleChangeListener();
        dc.addChangeListener(CHL);
        dc.setDot(5);
        checkFlag(1);
        dc.moveDot(8);
        checkFlag(1);
        dc.setVisible(true);
        checkFlag(0);
        dc.setVisible(false);
        checkFlag(0);
        dc.setSelectionVisible(true);
        checkFlag(0);
        dc.setSelectionVisible(false);
        checkFlag(0);
        jta.setCaretColor(new Color(235));
        checkFlag(0);
        jta.setCaretColor(new Color(235));
        checkFlag(0);
        jta.setSelectionColor(new Color(235));
        checkFlag(0);
        dc.setBlinkRate(100);
        checkFlag(0);
        jta.setDocument(new PlainDocument());
        checkFlag(1);
        jta.getCaret().deinstall(jta);
        checkFlag(0);
        dc.install(new JTextArea("JTextArea"));
        checkFlag(0);
    }

    public void testToString() throws Exception {
        dc.setDot(4);
        dc.moveDot(9);
        assertEquals("Dot=(9, Forward) Mark=(4, Forward)", dc.toString());
    }

    //Serialization is not supported now by Swing
    /*public void testSerialization() throws Exception {

     dc.setDot(4, Position.Bias.Backward);
     dc.setBlinkRate(100);
     dc.setVisible(true);
     dc.setSelectionVisible(true);
     dc.setMagicCaretPosition(new Point(200, 300));

     DefaultCaret dc1 = new DefaultCaret();

     try {
     FileOutputStream fo = new FileOutputStream("tmp");
     ObjectOutputStream so = new ObjectOutputStream(fo);
     so.writeObject(dc);
     so.flush();
     so.close();
     FileInputStream fi = new FileInputStream("tmp");
     ObjectInputStream si = new ObjectInputStream(fi);
     dc1 = (DefaultCaret) si.readObject();
     si.close();
     } catch (Exception e) {
     assertTrue("seralization failed" + e.getMessage(),false);
     }

     assertEquals("Dot=(4, Backward) Mark=(4, Backward)", dc1.toString());
     assertTrue(jta.equals(dc.getComponent()));
     assertTrue(dc1.isSelectionVisible());
     assertEquals(100, dc1.getBlinkRate());
     assertTrue(dc1.getMagicCaretPosition().equals(new Point(200, 300)));
     assertTrue(dc1.getSelectionPainter() instanceof DefaultHighlighter.DefaultHighlightPainter);
     assertTrue(dc1.listenerList.toString().equals(
     dc.listenerList.toString()));
     assertNull(dc1.changeEvent);

     } */
    /*
     * for 1.4.2
     */
    /*
     * public void testSetGetAsynchronousMovement(){
     * assertFalse(dc.getAsynchronousMovement());
     * dc.setAsynchronousMovement(true);
     * assertTrue(dc.getAsynchronousMovement()); }
     */
    public void testNavigationFilter() throws Exception {
        assertNull(jta.getNavigationFilter());
        filter = new SimpleNavigationFilter();
        jta.setNavigationFilter(filter);
        dc.setDot(3);
        dc.moveDot(4);
        assertEquals(1, filter.flagMoveDot);
        assertEquals(1, filter.flagSetDot);
    }

    //TODO
    public void testIsActive() throws Exception {
        dc.setVisible(true);
        assertTrue(dc.isActive());
        dc.setVisible(false);
        assertFalse(dc.isActive());
    }

    public void test3820() {
        DefaultCaret dc = new DefaultCaret();
        assertEquals(0, dc.getChangeListeners().length);
        dc.addChangeListener(null);
        assertEquals(0, dc.getChangeListeners().length);
    }

    public void test4208() {
        dc.setSelectionVisible(false);
        jta.selectAll();
        assertEquals(0, jta.getHighlighter().getHighlights().length);
        dc.setSelectionVisible(true);
        assertEquals(1, jta.getHighlighter().getHighlights().length);
    }
}


TOP

Related Classes of javax.swing.text.DefaultCaretTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.