Package javax.swing.text

Source Code of javax.swing.text.FlowViewTest

/*
*  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
* @version $Revision$
*/
package javax.swing.text;

import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BasicSwingTestCase;
import javax.swing.SizeRequirements;
import javax.swing.event.DocumentEvent;
import javax.swing.text.FlowView.FlowStrategy;
import javax.swing.text.ViewTestHelpers.ChildrenFactory;
import javax.swing.text.ViewTestHelpers.ElementPartView;

/**
* Tests the majority of methods of FlowView class.
* @see javax.swing.text.FlowView_ChangesTest
*
*/
public class FlowViewTest extends BasicSwingTestCase {
    protected static class FlowViewImpl extends FlowView {
        private int count = 0;

        public FlowViewImpl(final Element element, final int axis) {
            super(element, axis);
        }

        @Override
        protected View createRow() {
            return new BoxView(getElement(), getAxis() == Y_AXIS ? X_AXIS : Y_AXIS) {
                private final int id = count++;

                @Override
                public String toString() {
                    return "row(" + id + ")";
                }

                @Override
                protected void loadChildren(ViewFactory factory) {
                    return;
                }

                @Override
                public int getStartOffset() {
                    return getViewCount() > 0 ? getView(0).getStartOffset() : super
                            .getStartOffset();
                }

                @Override
                public int getEndOffset() {
                    int count = getViewCount();
                    return count > 0 ? getView(count - 1).getEndOffset() : super.getEndOffset();
                }
            };
        }

        @Override
        public String toString() {
            return "flow";
        }
    }

    protected static class FlowViewImplWithFactory extends FlowViewImpl {
        private final ViewFactory factory;

        public FlowViewImplWithFactory(final Element element, final int axis) {
            this(element, axis, new ChildrenFactory());
        }

        public FlowViewImplWithFactory(final Element element, final int axis,
                final ViewFactory factory) {
            super(element, axis);
            this.factory = factory;
        }

        @Override
        public ViewFactory getViewFactory() {
            return factory;
        }

        @Override
        public String toString() {
            return "theFlow";
        }
    }

    private Document doc;

    private Element root;

    private FlowView view;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        doc = new PlainDocument();
        doc.insertString(0, "line1\nline2\nline3", null);
        root = doc.getDefaultRootElement();
        view = new FlowViewImpl(root, View.Y_AXIS);
    }

    public void testSetParent() {
        assertNull(view.getParent());
        assertNull(view.layoutPool);
        assertEquals(0, view.getViewCount());
        assertNull(view.getViewFactory());
        final View parent = new BoxView(root, View.X_AXIS);
        view.setParent(parent);
        assertNotNull(view.getParent());
        assertEquals(0, view.getViewCount());
        assertNotNull(view.layoutPool);
        assertSame(view, view.layoutPool.getParent());
        assertSame(root, view.layoutPool.getElement());
        assertEquals(0, view.layoutPool.getViewCount());
    }

    public void testSetParentWithFactory() {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        assertNull(view.getParent());
        assertNull(view.layoutPool);
        assertEquals(0, view.getViewCount());
        assertNotNull(view.getViewFactory());
        final View parent = new BoxView(root, View.X_AXIS);
        view.setParent(parent);
        assertNotNull(view.getParent());
        assertEquals(0, view.getViewCount());
        assertNotNull(view.layoutPool);
        assertSame(view, view.layoutPool.getParent());
        assertSame(root, view.layoutPool.getElement());
        assertEquals(root.getElementCount(), view.layoutPool.getViewCount());
    }

    /**
     * Tests <code>getViewIndexAtPosition()</code> when views represent entire
     * elements.
     */
    public void testGetViewIndexAtPositionEntire() {
        assertEquals(0, view.getViewCount());
        final ViewFactory vf = new ChildrenFactory();
        final Element first = root.getElement(0);
        final Element second = root.getElement(1);
        final int middle = (first.getStartOffset() + first.getEndOffset()) / 2;
        View[] views = new View[] { vf.create(first), vf.create(second) };
        view.replace(0, 0, views);
        assertEquals(-1, view.getViewIndexAtPosition(-1));
        assertEquals(0, view.getViewIndexAtPosition(first.getStartOffset()));
        assertEquals(0, view.getViewIndexAtPosition(middle));
        assertEquals(1, view.getViewIndexAtPosition(first.getEndOffset()));
        assertEquals(1, view.getViewIndexAtPosition(second.getStartOffset()));
        assertEquals(1, view.getViewIndexAtPosition(second.getEndOffset() - 1));
        assertEquals(-1, view.getViewIndexAtPosition(second.getEndOffset()));
        assertEquals(-1, view.getViewIndexAtPosition(second.getEndOffset() + 2));
        assertNull(view.layoutPool);
    }

    /**
     * Tests <code>getViewIndexAtPosition()</code> when views represent portions
     * of elements.
     */
    public void testGetViewIndexAtPositionPartial() {
        assertEquals(0, view.getViewCount());
        final ViewFactory vf = new ChildrenFactory();
        final Element first = root.getElement(0);
        final Element second = root.getElement(1);
        final int middle = (first.getStartOffset() + first.getEndOffset()) / 2;
        View[] views = new View[] { new ElementPartView(first, first.getStartOffset(), middle),
                new ElementPartView(first, middle, first.getEndOffset()), vf.create(second) };
        view.replace(0, 0, views);
        assertEquals(-1, view.getViewIndexAtPosition(-1));
        assertEquals(0, view.getViewIndexAtPosition(first.getStartOffset()));
        assertEquals(0, view.getViewIndexAtPosition(middle - 1));
        assertEquals(1, view.getViewIndexAtPosition(middle));
        assertEquals(1, view.getViewIndexAtPosition(middle + 1));
        assertEquals(1, view.getViewIndexAtPosition(first.getEndOffset() - 1));
        assertEquals(2, view.getViewIndexAtPosition(first.getEndOffset()));
        assertEquals(2, view.getViewIndexAtPosition(second.getStartOffset()));
        assertEquals(2, view.getViewIndexAtPosition(second.getEndOffset() - 1));
        assertEquals(-1, view.getViewIndexAtPosition(second.getEndOffset()));
        assertEquals(-1, view.getViewIndexAtPosition(second.getEndOffset() + 2));
        assertNull(view.layoutPool);
    }

    public void testLoadChildren() {
        assertNull(view.layoutPool);
        assertNull(view.getViewFactory());
        view.loadChildren(new ChildrenFactory());
        assertNotNull(view.layoutPool);
        assertSame(view, view.layoutPool.getParent());
        assertSame(root, view.layoutPool.getElement());
        assertEquals(0, view.layoutPool.getViewCount());
    }

    public void testLoadChildrenWithFactory() {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        assertNull(view.layoutPool);
        assertNotNull(view.getViewFactory());
        view.loadChildren(new ChildrenFactory());
        assertNotNull(view.layoutPool);
        assertSame(view, view.layoutPool.getParent());
        assertSame(root, view.layoutPool.getElement());
        assertEquals(root.getElementCount(), view.layoutPool.getViewCount());
    }

    public void testLoadChildrenWithFactoryEmtpyPool() {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        assertNull(view.layoutPool);
        assertNotNull(view.getViewFactory());
        view.loadChildren(null);
        assertNotNull(view.layoutPool);
        view.layoutPool.removeAll();
        view.loadChildren(null);
        assertEquals(root.getElementCount(), view.layoutPool.getViewCount());
    }

    public void testLoadChildrenEmtpyPoolNullFactory() {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        assertNull(view.layoutPool);
        assertNotNull(view.getViewFactory());
        view.loadChildren(null);
        assertNotNull(view.layoutPool);
        view.layoutPool.removeAll();
        ((CompositeView) view.layoutPool).loadChildren(null);
        assertEquals(0, view.layoutPool.getViewCount());
    }

    public void testLoadChildrenStrategy() {
        final boolean[] called = new boolean[] { false };
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        view.strategy = new FlowStrategy() {
            @Override
            public void insertUpdate(FlowView fv, DocumentEvent event, Rectangle alloc) {
                called[0] = true;
                assertSame(view, fv);
                assertNull(event);
                assertNull(alloc);
                super.insertUpdate(fv, event, alloc);
            }
        };
        view.loadChildren(null);
        assertTrue(called[0]);
    }

    public void testCalculateMinorAxisRequirements() {
        view.layoutPool = new PlainView(root) {
            @Override
            public float getPreferredSpan(int axis) {
                return axis == X_AXIS ? -13 : 13;
            }

            @Override
            public float getMinimumSpan(int axis) {
                return axis == X_AXIS ? -19 : 7;
            }

            @Override
            public float getMaximumSpan(int axis) {
                return axis == X_AXIS ? -7 : 19;
            }

            @Override
            public float getAlignment(int axis) {
                return axis == X_AXIS ? 0.312f : 0.213f;
            }
        };
        SizeRequirements xSR = view.calculateMinorAxisRequirements(View.X_AXIS, null);
        assertEquals(-19, xSR.minimum);
        assertEquals(-13, xSR.preferred);
        assertEquals(Integer.MAX_VALUE, xSR.maximum);
        assertEquals(0.5f, xSR.alignment, 1e-5f);
        SizeRequirements ySR = view.calculateMinorAxisRequirements(View.Y_AXIS, xSR);
        assertSame(xSR, ySR);
        assertEquals(7, xSR.minimum);
        assertEquals(13, xSR.preferred);
        assertEquals(Integer.MAX_VALUE, xSR.maximum);
        assertEquals(0.5f, xSR.alignment, 1e-5f);
    }

    public void testLayout() {
        final List<Integer> layoutChanges = new ArrayList<Integer>();
        final Marker prefMarker = new Marker();
        view = new FlowViewImplWithFactory(root, View.Y_AXIS) {
            @Override
            public void layoutChanged(int axis) {
                layoutChanges.add(new Integer(axis));
                super.layoutChanged(axis);
            }

            @Override
            public void preferenceChanged(View child, boolean width, boolean height) {
                assertNull(child);
                assertFalse(width);
                assertTrue(height);
                prefMarker.setOccurred();
                super.preferenceChanged(child, width, height);
            }
        };
        view.loadChildren(null);
        assertEquals(root.getElementCount(), view.layoutPool.getViewCount());
        assertEquals(0, view.getViewCount());
        layoutChanges.clear();
        assertFalse(view.isAllocationValid());
        assertEquals(Short.MAX_VALUE, view.layoutSpan);
        final boolean[] called = new boolean[] { false };
        final int width = 513;
        final int height = 137;
        view.strategy = new FlowStrategy() {
            @Override
            public void layout(FlowView fv) {
                assertSame(view, fv);
                super.layout(fv);
                called[0] = true;
            }
        };
        view.layout(width, height);
        assertEquals(width, view.layoutSpan);
        assertEquals(1, view.getViewCount());
        assertTrue(called[0]);
        assertTrue(view.isAllocationValid());
        assertEquals(2, layoutChanges.size());
        assertEquals(View.X_AXIS, layoutChanges.get(0).intValue());
        assertEquals(View.Y_AXIS, layoutChanges.get(1).intValue());
        layoutChanges.clear();
        called[0] = false;
        view.layout(width, height);
        assertFalse(called[0]);
        assertEquals(0, layoutChanges.size());
        view.layoutChanged(View.X_AXIS);
        layoutChanges.clear();
        assertFalse(view.isAllocationValid());
        view.layout(width, height);
        assertTrue(called[0]);
        assertEquals(0, layoutChanges.size());
        called[0] = false;
        view.layout(width, height - 1);
        assertFalse(called[0]);
        assertEquals(0, layoutChanges.size());
        view.layout(width - 1, height);
        assertEquals(width - 1, view.layoutSpan);
        assertTrue(called[0]);
        assertEquals(2, layoutChanges.size());
        assertEquals(View.X_AXIS, layoutChanges.get(0).intValue());
        assertEquals(View.Y_AXIS, layoutChanges.get(1).intValue());
        layoutChanges.clear();
        // Test if preferenceChanged() is called
        view.removeAll();
        int prefSpan = (int) view.getPreferredSpan(View.Y_AXIS);
        assertEquals(0, prefSpan);
        view.layout(width, height);
        assertTrue(view.getViewCount() != 0);
        assertEquals(getSpanY(), (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(isHarmony(), prefMarker.isOccurred());
    }

    public void testFlowView() {
        assertSame(root, view.getElement());
        assertEquals(View.Y_AXIS, view.getAxis());
        assertEquals(Short.MAX_VALUE, view.layoutSpan);
        assertNull(view.layoutPool);
        assertNotNull(view.strategy);
        FlowView other = new FlowViewImpl(root, View.Y_AXIS);
        assertSame(view.strategy, other.strategy);
    }

    public void testGetFlowAxis() {
        assertEquals(View.Y_AXIS, view.getAxis());
        assertEquals(View.X_AXIS, view.getFlowAxis());
        view = new FlowViewImpl(root, View.X_AXIS);
        assertEquals(View.X_AXIS, view.getAxis());
        assertEquals(View.Y_AXIS, view.getFlowAxis());
        view = new FlowViewImpl(root, 10);
        assertEquals(10, view.getAxis());
        assertEquals(View.Y_AXIS, view.getFlowAxis());
        view.setAxis(View.Y_AXIS);
        assertEquals(View.X_AXIS, view.getFlowAxis());
    }

    public void testGetFlowStart() {
        assertEquals(0, view.getViewCount());
        assertEquals(0, view.getFlowStart(0));
        assertEquals(0, view.getFlowStart(1));
        assertEquals(0, view.getFlowStart(2));
        view.setInsets((short) 5, (short) 7, (short) 6, (short) 3);
        assertEquals(0, view.getFlowStart(0));
        assertEquals(0, view.getFlowStart(1));
        assertEquals(0, view.getFlowStart(2));
    }

    public void testGetFlowSpan() {
        assertEquals(0, view.getViewCount());
        assertEquals(Short.MAX_VALUE, view.layoutSpan);
        view.layoutSpan = -10;
        assertEquals(-10, view.getFlowSpan(0));
        assertEquals(-10, view.getFlowSpan(1));
        assertEquals(-10, view.getFlowSpan(2));
        view.setInsets((short) 5, (short) 7, (short) 6, (short) 3);
        assertEquals(-10, view.getFlowSpan(0));
        assertEquals(-10, view.getFlowSpan(1));
        assertEquals(-10, view.getFlowSpan(2));
    }

    public void testGetSpanNoRow() throws Exception {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        view.loadChildren(null);
        assertEquals(0, view.getViewCount());
        view.layoutPool.replace(1, view.layoutPool.getViewCount() - 1, null);
        assertEquals(1, view.layoutPool.getViewCount());
        final View child = view.layoutPool.getView(0);
        int childX = (int) child.getPreferredSpan(View.X_AXIS);
        int childY = (int) child.getPreferredSpan(View.Y_AXIS);
        assertEquals(childX, (int) child.getMinimumSpan(View.X_AXIS));
        assertEquals(childY, (int) child.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) child.getMaximumSpan(View.X_AXIS));
        assertEquals(childY, (int) child.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.layoutPool.getPreferredSpan(View.X_AXIS));
        assertEquals(childY, (int) view.layoutPool.getPreferredSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.layoutPool.getMaximumSpan(View.X_AXIS));
        assertEquals(childY, (int) view.layoutPool.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.getPreferredSpan(View.X_AXIS));
        assertEquals(0, (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.X_AXIS));
        assertEquals(0, (int) view.getMaximumSpan(View.Y_AXIS));
    }

    public void testGetSpanOneRowNoChildren() throws Exception {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        view.loadChildren(null);
        assertEquals(0, view.getViewCount());
        view.layoutPool.replace(1, view.layoutPool.getViewCount() - 1, null);
        assertEquals(1, view.layoutPool.getViewCount());
        final View row = view.createRow();
        view.append(row);
        final View child = view.layoutPool.getView(0);
        int childX = (int) child.getPreferredSpan(View.X_AXIS);
        int childY = (int) child.getPreferredSpan(View.Y_AXIS);
        assertEquals(childX, (int) child.getMinimumSpan(View.X_AXIS));
        assertEquals(childY, (int) child.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) child.getMaximumSpan(View.X_AXIS));
        assertEquals(childY, (int) child.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.layoutPool.getPreferredSpan(View.X_AXIS));
        assertEquals(childY, (int) view.layoutPool.getPreferredSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.layoutPool.getMaximumSpan(View.X_AXIS));
        assertEquals(childY, (int) view.layoutPool.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.getPreferredSpan(View.X_AXIS));
        assertEquals(0, (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.X_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.Y_AXIS));
    }

    public void testGetSpanOneRowOneChild() throws Exception {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        view.loadChildren(null);
        assertEquals(0, view.getViewCount());
        view.layoutPool.replace(1, view.layoutPool.getViewCount() - 1, null);
        assertEquals(1, view.layoutPool.getViewCount());
        final View row = view.createRow();
        view.append(row);
        final View child = view.layoutPool.getView(0);
        row.append(child);
        int childX = (int) child.getPreferredSpan(View.X_AXIS);
        int childY = (int) child.getPreferredSpan(View.Y_AXIS);
        assertEquals(childX, (int) child.getMinimumSpan(View.X_AXIS));
        assertEquals(childY, (int) child.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) child.getMaximumSpan(View.X_AXIS));
        assertEquals(childY, (int) child.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.layoutPool.getPreferredSpan(View.X_AXIS));
        assertEquals(childY, (int) view.layoutPool.getPreferredSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.layoutPool.getMaximumSpan(View.X_AXIS));
        assertEquals(childY, (int) view.layoutPool.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.X_AXIS));
        assertEquals(childY, (int) view.getMinimumSpan(View.Y_AXIS));
        assertEquals(childX, (int) view.getPreferredSpan(View.X_AXIS));
        assertEquals(childY, (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.X_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.Y_AXIS));
    }

    public void testGetSpanNoRowFlexible() throws Exception {
        ChildrenFactory factory = new ChildrenFactory();
        factory.makeFlexible();
        view = new FlowViewImplWithFactory(root, View.Y_AXIS, factory);
        view.loadChildren(null);
        assertEquals(0, view.getViewCount());
        view.layoutPool.replace(1, view.layoutPool.getViewCount() - 1, null);
        assertEquals(1, view.layoutPool.getViewCount());
        final View child = view.layoutPool.getView(0);
        int childPrefX = (int) child.getPreferredSpan(View.X_AXIS);
        int childPrefY = (int) child.getPreferredSpan(View.Y_AXIS);
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.layoutPool.getPreferredSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.layoutPool.getPreferredSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.layoutPool.getMaximumSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.layoutPool.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.getPreferredSpan(View.X_AXIS));
        assertEquals(0, (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.X_AXIS));
        assertEquals(0, (int) view.getMaximumSpan(View.Y_AXIS));
    }

    public void testGetSpanOneRowNoChildrenFlexible() throws Exception {
        ChildrenFactory factory = new ChildrenFactory();
        factory.makeFlexible();
        view = new FlowViewImplWithFactory(root, View.Y_AXIS, factory);
        view.loadChildren(null);
        assertEquals(0, view.getViewCount());
        view.layoutPool.replace(1, view.layoutPool.getViewCount() - 1, null);
        assertEquals(1, view.layoutPool.getViewCount());
        final View row = view.createRow();
        view.append(row);
        final View child = view.layoutPool.getView(0);
        int childPrefX = (int) child.getPreferredSpan(View.X_AXIS);
        int childPrefY = (int) child.getPreferredSpan(View.Y_AXIS);
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.layoutPool.getPreferredSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.layoutPool.getPreferredSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.layoutPool.getMaximumSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.layoutPool.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.getPreferredSpan(View.X_AXIS));
        assertEquals(0, (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.X_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.Y_AXIS));
    }

    public void testGetSpanOneRowOneChildFlexible() throws Exception {
        ChildrenFactory factory = new ChildrenFactory();
        factory.makeFlexible();
        view = new FlowViewImplWithFactory(root, View.Y_AXIS, factory);
        view.loadChildren(null);
        assertEquals(0, view.getViewCount());
        view.layoutPool.replace(1, view.layoutPool.getViewCount() - 1, null);
        assertEquals(1, view.layoutPool.getViewCount());
        final View row = view.createRow();
        view.append(row);
        final View child = view.layoutPool.getView(0);
        row.append(child);
        int childMinY = (int) child.getMinimumSpan(View.Y_AXIS);
        int childPrefX = (int) child.getPreferredSpan(View.X_AXIS);
        int childPrefY = (int) child.getPreferredSpan(View.Y_AXIS);
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.X_AXIS));
        assertEquals(0, (int) view.layoutPool.getMinimumSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.layoutPool.getPreferredSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.layoutPool.getPreferredSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.layoutPool.getMaximumSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.layoutPool.getMaximumSpan(View.Y_AXIS));
        assertEquals(0, (int) view.getMinimumSpan(View.X_AXIS));
        assertEquals(childMinY, (int) view.getMinimumSpan(View.Y_AXIS));
        assertEquals(childPrefX, (int) view.getPreferredSpan(View.X_AXIS));
        assertEquals(childPrefY, (int) view.getPreferredSpan(View.Y_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.X_AXIS));
        assertEquals(Integer.MAX_VALUE, (int) view.getMaximumSpan(View.Y_AXIS));
    }

    public void testGetAttributesLayoutPool() {
        view = new FlowViewImplWithFactory(root, View.Y_AXIS);
        view.loadChildren(null);
        assertSame(view.getAttributes(), view.layoutPool.getAttributes());
        view.layoutPool.setParent(null);
        assertNull(view.layoutPool.getAttributes());
    }

    private int getSpanY() {
        int span = 0;
        View row = view.getView(0);
        for (int i = 0; i < row.getViewCount(); i++) {
            span = Math.max(span, (int) row.getView(i).getPreferredSpan(View.Y_AXIS));
        }
        return span;
    }
}
TOP

Related Classes of javax.swing.text.FlowViewTest

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.