BoxViewTest.java :  » Apache-Harmony-Java-SE » javax-package » javax » swing » text » Java Open Source

Java Open Source » Apache Harmony Java SE » javax package 
javax package » javax » swing » text » BoxViewTest.java
/*
 *  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 Alexey A. Ivanov
 */
package javax.swing.text;

import java.awt.Rectangle;
import javax.swing.BasicSwingTestCase;

public class BoxViewTest extends BasicSwingTestCase {
    private Document doc;

    private Element root;

    private BoxView view;

    /*
     * @see TestCase#setUp()
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        doc = new PlainDocument();
        doc.insertString(0, "line1\nline\t2", null);
        root = doc.getDefaultRootElement();
        view = new BoxView(root, View.X_AXIS);
    }

    public void testGetAlignment() {
        assertEquals(0.5f, view.getAlignment(View.X_AXIS), 0.00001f);
        assertEquals(0.5f, view.getAlignment(View.Y_AXIS), 0.00001f);
        try {
            view.getAlignment(3);
            fail("IllegalArgumentException must be thrown");
        } catch (IllegalArgumentException e) {
        }
    }

    public void testPreferenceChanged() {
        view.layout(width, height);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        view.preferenceChanged(null, true, false);
        assertFalse(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        view.layout(width, height);
        view.preferenceChanged(null, false, true);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertFalse(view.isLayoutValid(View.Y_AXIS));
    }

    public void testReplace() {
        // Check child cound and size of the cache of allocations
        assertEquals(0, view.getViewCount());
        try {
            view.getOffset(view.getAxis(), 0);
            fail("ArrayIndexOutOfBoundsException is expected");
        } catch (ArrayIndexOutOfBoundsException e) {
        }
        try {
            view.getSpan(view.getAxis(), 0);
            fail("ArrayIndexOutOfBoundsException is expected");
        } catch (ArrayIndexOutOfBoundsException e) {
        }
        // Do layout and check it became valid
        view.layout(width, height);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        // Add two children into the view
        view.replace(0, 0, new View[] { new PlainView(root), new PlainView(root) });
        // Check the side effects
        assertFalse(view.isLayoutValid(View.X_AXIS));
        assertFalse(view.isLayoutValid(View.Y_AXIS));
        // Now we can get offset and span of child at index 1
        view.getOffset(view.getAxis(), 1);
        view.getSpan(view.getAxis(), 1);
        // ...but can't get ones of child at index 2 as it doesn't exist
        try {
            view.getOffset(view.getAxis(), 2);
            fail("ArrayIndexOutOfBoundsException is expected");
        } catch (ArrayIndexOutOfBoundsException e) {
        }
        try {
            view.getSpan(view.getAxis(), 2);
            fail("ArrayIndexOutOfBoundsException is expected");
        } catch (ArrayIndexOutOfBoundsException e) {
        }
    }

    private static void assertCalled(final boolean[] called, final boolean layout,
            final boolean major, final boolean minor) {
        assertEquals(layout, called[0]);
        assertEquals(major, called[1]);
        assertEquals(minor, called[2]);
        // Reset flags
        called[0] = called[1] = called[2] = false;
    }

    public void testSetSize() {
        final boolean[] called = new boolean[] { false, false, false };
        view = new BoxView(root, View.X_AXIS) {
            @Override
            public void layout(final int w, final int h) {
                assertEquals(width - getLeftInset() - getRightInset(), w);
                assertEquals(height - getTopInset() - getBottomInset(), h);
                called[0] = true;
                super.layout(w, h);
            }

            @Override
            protected void layoutMajorAxis(final int targetSpan, final int axis,
                    final int[] offsets, final int[] spans) {
                called[1] = true;
                super.layoutMajorAxis(targetSpan, axis, offsets, spans);
            }

            @Override
            protected void layoutMinorAxis(final int targetSpan, final int axis,
                    final int[] offsets, final int[] spans) {
                called[2] = true;
                super.layoutMinorAxis(targetSpan, axis, offsets, spans);
            }
        };
        view.setSize(width, height);
        assertCalled(called, true, true, true);
        // Call with same sizes doesn't do the layout itself
        view.setSize(width, height);
        assertCalled(called, true, false, false);
        // Set only left inset, layout of the major axis (X) must be updated
        view.setInsets((short) 0, (short) 1, (short) 0, (short) 0);
        view.setSize(width, height);
        assertCalled(called, true, true, false);
        // Set new insets and try again
        view.setParagraphInsets(CompositeViewTest.getAttributeSet());
        view.setSize(width, height);
        assertCalled(called, true, true, true);
    }

    /**
     * Rectangle that is used in tests of is{After,Before}.
     */
    private static final Rectangle rect = new Rectangle(10, 15, 20, 30);

    /**
     * Tests isAfter with default axis value of X.
     *
     * Differences in values are marked with asterisk in trailing comment.
     */
    public void testIsAfter01() {
        assertEquals(View.X_AXIS, view.getAxis());
        assertFalse(view.isAfter(0, 0, rect));
        assertFalse(view.isAfter(9, 0, rect));
        assertFalse(view.isAfter(0, 14, rect));
        assertFalse(view.isAfter(9, 14, rect));
        assertFalse(view.isAfter(9, 15, rect));
        assertFalse(view.isAfter(9, 35, rect));
        assertFalse(view.isAfter(10, 14, rect));
        assertFalse(view.isAfter(10, 15, rect));
        assertFalse(view.isAfter(20, 15, rect));
        assertFalse(view.isAfter(20, 14, rect));
        assertFalse(view.isAfter(20, 45, rect));
        assertFalse(view.isAfter(20, 46, rect)); // *
        assertFalse(view.isAfter(20, 50, rect)); // *
        assertFalse(view.isAfter(30, 20, rect));
        assertTrue(view.isAfter(31, 20, rect)); // *
        assertTrue(view.isAfter(31, 15, rect)); // *
        assertTrue(view.isAfter(31, 0, rect)); // *
    }

    /**
     * Tests isAfter with axis value set to Y.
     *
     * Differences in values are marked with asterisk in trailing comment.
     */
    public void testIsAfter02() {
        view.setAxis(View.Y_AXIS);
        assertFalse(view.isAfter(0, 0, rect));
        assertFalse(view.isAfter(9, 0, rect));
        assertFalse(view.isAfter(0, 14, rect));
        assertFalse(view.isAfter(9, 14, rect));
        assertFalse(view.isAfter(9, 15, rect));
        assertFalse(view.isAfter(9, 35, rect));
        assertFalse(view.isAfter(10, 14, rect));
        assertFalse(view.isAfter(10, 15, rect));
        assertFalse(view.isAfter(20, 15, rect));
        assertFalse(view.isAfter(20, 14, rect));
        assertFalse(view.isAfter(20, 45, rect));
        assertTrue(view.isAfter(20, 46, rect)); // *
        assertTrue(view.isAfter(20, 50, rect)); // *
        assertFalse(view.isAfter(30, 20, rect));
        assertFalse(view.isAfter(31, 20, rect)); // *
        assertFalse(view.isAfter(31, 15, rect)); // *
        assertFalse(view.isAfter(31, 0, rect)); // *
    }

    /**
     * Tests isBefore with default axis value of X.
     *
     * Differences in values are marked with asterisk in trailing comment.
     */
    public void testIsBefore01() {
        assertTrue(view.isBefore(0, 0, rect));
        assertTrue(view.isBefore(9, 0, rect));
        assertTrue(view.isBefore(0, 14, rect));
        assertTrue(view.isBefore(9, 14, rect));
        assertTrue(view.isBefore(9, 15, rect)); // *
        assertTrue(view.isBefore(9, 35, rect)); // *
        assertFalse(view.isBefore(10, 14, rect)); // *
        assertFalse(view.isBefore(10, 15, rect));
        assertFalse(view.isBefore(20, 15, rect));
        assertFalse(view.isBefore(20, 14, rect)); // *
    }

    /**
     * Tests isBefore with axis value set to Y.
     *
     * Differences in values are marked with asterisk in trailing comment.
     */
    public void testIsBefore02() {
        view.setAxis(View.Y_AXIS);
        assertTrue(view.isBefore(0, 0, rect));
        assertTrue(view.isBefore(9, 0, rect));
        assertTrue(view.isBefore(0, 14, rect));
        assertTrue(view.isBefore(9, 14, rect));
        assertFalse(view.isBefore(9, 15, rect)); // *
        assertFalse(view.isBefore(9, 35, rect)); // *
        assertTrue(view.isBefore(10, 14, rect)); // *
        assertFalse(view.isBefore(10, 15, rect));
        assertFalse(view.isBefore(20, 15, rect));
        assertTrue(view.isBefore(20, 14, rect)); // *
    }

    public void testBoxView() {
        view = new BoxView(root, View.X_AXIS);
        assertSame(root, view.getElement());
        assertEquals(View.X_AXIS, view.getAxis());
        view = new BoxView(root, View.Y_AXIS);
        assertSame(root, view.getElement());
        assertEquals(View.Y_AXIS, view.getAxis());
        final boolean[] setAxisCalled = new boolean[1];
        view = new BoxView(root, -1251) {
            @Override
            public void setAxis(int axis) {
                setAxisCalled[0] = true;
                super.setAxis(axis);
            }
        };
        assertSame(root, view.getElement());
        assertEquals(-1251, view.getAxis());
        assertFalse(setAxisCalled[0]);
    }

    public void testGetAxis() {
        assertEquals(View.X_AXIS, view.getAxis());
    }

    public void testGetHeight() {
        assertEquals(0, view.getHeight());
        assertFalse(view.isLayoutValid(View.X_AXIS));
        view.layout(width, height);
        assertEquals(height, view.getHeight());
        view.setSize(width, height);
        assertEquals(height, view.getHeight());
        // Layout invalidation doesn't change the height
        view.layoutChanged(View.Y_AXIS);
        assertEquals(height, view.getHeight());
        // Put some insets
        view.setInsets((short) 10, (short) 0, (short) 0, (short) 0);
        view.setSize(width, height);
        if (isHarmony()) {
            assertEquals(height - view.getTopInset(), view.getHeight());
        } else {
            // The width isn't changed
            assertEquals(height, view.getHeight());
        }
        view.setInsets((short) 0, (short) 0, (short) 10, (short) 0);
        view.setSize(width, height);
        if (isHarmony()) {
            assertEquals(height - view.getBottomInset(), view.getHeight());
        } else {
            // The width is reduced by right inset twice
            assertEquals(height - 2 * view.getBottomInset(), view.getHeight());
        }
        // No matter if insets are set, layout width isn't changed
        view.setInsets((short) 7, (short) 0, (short) 4, (short) 0);
        view.layout(width, height);
        if (isHarmony()) {
            assertEquals(height, view.getHeight());
        } else {
            assertEquals(height + (view.getTopInset() - view.getBottomInset()), view
                    .getHeight());
        }
    }

    public void testGetWidth() {
        assertEquals(0, view.getWidth());
        assertFalse(view.isLayoutValid(View.X_AXIS));
        view.layout(width, height);
        assertEquals(width, view.getWidth());
        view.setSize(width, height);
        assertEquals(width, view.getWidth());
        // Layout invalidation doesn't change the width
        view.layoutChanged(View.X_AXIS);
        assertEquals(width, view.getWidth());
        // Put some insets
        view.setInsets((short) 0, (short) 10, (short) 0, (short) 0);
        view.setSize(width, height);
        if (isHarmony()) {
            assertEquals(width - view.getLeftInset(), view.getWidth());
        } else {
            // The width isn't changed
            assertEquals(width, view.getWidth());
        }
        view.setInsets((short) 0, (short) 0, (short) 0, (short) 10);
        view.setSize(width, height);
        if (isHarmony()) {
            assertEquals(width - view.getRightInset(), view.getWidth());
        } else {
            // The width is reduced by right inset twice
            assertEquals(width - 2 * view.getRightInset(), view.getWidth());
        }
        // No matter if insets are set, layout width isn't changed
        view.setInsets((short) 0, (short) 7, (short) 0, (short) 4);
        view.layout(width, height);
        if (isHarmony()) {
            assertEquals(width, view.getWidth());
        } else {
            assertEquals(width + (view.getLeftInset() - view.getRightInset()), view.getWidth());
        }
    }

    public void testIsAllocationValid() {
        assertFalse(view.isAllocationValid());
        view.layout(width, height);
        assertTrue(view.isAllocationValid());
        view.preferenceChanged(null, true, false);
        assertFalse(view.isAllocationValid());
    }

    public void testIsLayoutValid() {
        assertFalse(view.isLayoutValid(View.X_AXIS));
        assertFalse(view.isLayoutValid(View.Y_AXIS));
        view.layout(width, height);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
    }

    private final int width = 150;

    private final int height = 325;

    public void testLayout() {
        final boolean[] called = new boolean[] { false, false };
        view = new BoxView(root, View.X_AXIS) {
            @Override
            protected void layoutMajorAxis(final int targetSpan, final int axis,
                    final int[] offsets, final int[] spans) {
                called[0] = true;
                assertEquals(width, targetSpan);
                assertEquals(X_AXIS, axis);
                super.layoutMajorAxis(targetSpan, axis, offsets, spans);
            }

            @Override
            protected void layoutMinorAxis(final int targetSpan, final int axis,
                    final int[] offsets, final int[] spans) {
                called[1] = true;
                assertEquals(height, targetSpan);
                assertEquals(Y_AXIS, axis);
                super.layoutMinorAxis(targetSpan, axis, offsets, spans);
            }
        };
        assertFalse(view.isLayoutValid(View.X_AXIS));
        assertFalse(view.isLayoutValid(View.Y_AXIS));
        view.layout(width, height);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        assertTrue(called[0]);
        called[0] = false;
        assertTrue(called[1]);
        called[1] = false;
        view.preferenceChanged(null, true, false);
        assertFalse(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        view.layout(width, height);
        assertTrue(called[0]);
        called[0] = false;
        assertFalse(called[1]);
        called[1] = false;
    }

    /**
     * Tests that <code>layoutChanged</code> isn't called
     * when width or height passed to
     * <code>layout</code> is changed.
     */
    public void testLayout02() {
        final boolean[] called = new boolean[] { false };
        view = new BoxView(root, View.X_AXIS) {
            @Override
            public void layoutChanged(int axis) {
                called[0] = false;
                super.layoutChanged(axis);
            }
        };
        assertFalse(view.isLayoutValid(View.X_AXIS));
        assertFalse(view.isLayoutValid(View.Y_AXIS));
        view.layout(width, height);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        assertFalse(called[0]);
        view.layout(width, height);
        assertFalse(called[0]);
        view.layout(width - 10, height);
        assertFalse(called[0]);
        view.layout(width - 10, height - 20);
        assertFalse(called[0]);
    }

    public void testLayoutChanged() {
        view.layout(width, height);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertTrue(view.isLayoutValid(View.Y_AXIS));
        view.layoutChanged(View.Y_AXIS);
        assertTrue(view.isLayoutValid(View.X_AXIS));
        assertFalse(view.isLayoutValid(View.Y_AXIS));
    }

    public void testSetAxis() {
        view.setAxis(View.Y_AXIS);
        assertEquals(View.Y_AXIS, view.getAxis());
        view.setAxis(View.X_AXIS);
        assertEquals(View.X_AXIS, view.getAxis());
        view.setAxis(-1251);
        assertEquals(-1251, view.getAxis());
    }
    /*
     public void testPaint() {
     }

     public void testPaintChild() {
     }
     */
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.