Package javax.swing

Source Code of javax.swing.SpringLayoutTest

/*
*  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.
*/
package javax.swing;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.TextField;

import javax.swing.SpringLayout.Constraints;

public class SpringLayoutTest extends SwingTestCase {
    private Component component;
    private SpringLayout layout;
    private JPanel container;
    private JButton button;
    private JTextField textField;
    private JPanel panel;
    private JButton innerButton;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        layout = new SpringLayout();
        component = new JLabel("label");
        container = new JPanel(layout);
        button = new JButton();
        textField = new JTextField();
        panel = new JPanel();
        innerButton = new JButton();

        container.add(button);
        container.add(panel);
        container.add(textField);

        panel.add(innerButton);

        setComponentSizes(container, Spring.constant(0, 5, Integer.MAX_VALUE),
                          Spring.constant(0, 5, Integer.MAX_VALUE));

        setComponentSizes(button, Spring.constant(2, 5, 100),
                          Spring.constant(2, 5, 100));

        setComponentSizes(textField, Spring.constant(2, 10, Integer.MAX_VALUE),
                          Spring.constant(2, 10, Integer.MAX_VALUE));

        setComponentSizes(panel, Spring.constant(1, 3, Integer.MAX_VALUE),
                          Spring.constant(1, 3, Integer.MAX_VALUE));

        setComponentSizes(innerButton, Spring.constant(2, 10, 60),
                          Spring.constant(2, 10, 60));
    }

    public void testSpringLayout() {
        SpringLayout.Constraints constrains = new SpringLayout.Constraints();
        assertNull(constrains.getX());
        assertNull(constrains.getY());
        assertNull(constrains.getWidth());
        assertNull(constrains.getHeight());
        constrains = new SpringLayout.Constraints(Spring.width(component), Spring.constant(0));
        assertNull(constrains.getWidth());
        assertNull(constrains.getHeight());
        SpringTest.assertSizes(0, 0, 0, 0, constrains.getY());
        SpringTest.assertSizes(component.getMinimumSize().width,
                component.getPreferredSize().width, component.getMaximumSize().width,
                constrains.getX());
        assertNull(constrains.getWidth());
        assertNull(constrains.getHeight());
        constrains = new SpringLayout.Constraints(component);
        SpringTest.assertSizes(0, 0, 0, 0, constrains.getX());
        SpringTest.assertSizes(0, 0, 0, 0, constrains.getY());
        SpringTest.assertSizes(component.getMinimumSize().width,
                component.getPreferredSize().width, component.getMaximumSize().width,
                constrains.getWidth());
        SpringTest.assertSizes(component.getMinimumSize().height,
                component.getPreferredSize().height, component.getMaximumSize().height,
                constrains.getHeight());
        constrains = new SpringLayout.Constraints(Spring.constant(1), Spring.constant(2),
                Spring.constant(3), Spring.constant(4));
        SpringTest.assertSizes(1, 1, 1, 1, constrains.getX());
        SpringTest.assertSizes(2, 2, 2, 2, constrains.getY());
        SpringTest.assertSizes(3, 3, 3, 3, constrains.getWidth());
        SpringTest.assertSizes(4, 4, 4, 4, constrains.getHeight());
        constrains = new SpringLayout.Constraints(Spring.constant(1), null);
        SpringTest.assertSizes(1, 1, 1, 1, constrains.getX());
        Container container = new JPanel();
        container.setLayout(layout);
        container.add(new JLabel(""));
        constrains = layout.getConstraints(component);
        SpringTest.assertSizes(0, 0, 0, 0, constrains.getX());
        SpringTest.assertSizes(0, 0, 0, 0, constrains.getY());
        SpringTest.assertSizes(component.getMinimumSize().width,
                component.getPreferredSize().width, component.getMaximumSize().width,
                constrains.getWidth());
        SpringTest.assertSizes(component.getMinimumSize().height,
                component.getPreferredSize().height, component.getMaximumSize().height,
                constrains.getHeight());
    }

    public void testGetLayoutAlignmentX() {
        JPanel container = new JPanel(layout);
        assertEquals(0.5f, layout.getLayoutAlignmentX(null), 0.01);
        assertEquals(0.5f, layout.getLayoutAlignmentX(container), 0.01);
    }

    public void testGetLayoutAlignmentY() {
        JPanel container = new JPanel(layout);
        assertEquals(0.5f, layout.getLayoutAlignmentY(null), 0.01);
        assertEquals(0.5f, layout.getLayoutAlignmentY(container), 0.01);
    }

    public void testGetConstraints() {
        Constraints constraints = layout.getConstraints(null);
        assertNotNull(constraints);
        layout.addLayoutComponent(component, "not_constraints");
        constraints = layout.getConstraints(component);
        assertNotNull(constraints);
        SpringTest.assertSizes(0, 0, 0, constraints.getX());
        SpringTest.assertSizes(0, 0, 0, constraints.getY());
        SpringTest.assertSizes(component.getMinimumSize().width,
                component.getPreferredSize().width, component.getMaximumSize().width,
                constraints.getWidth());
        SpringTest.assertSizes(component.getMinimumSize().height,
                component.getPreferredSize().height, component.getMaximumSize().height,
                constraints.getHeight());
        layout.addLayoutComponent(component, null);
        constraints = layout.getConstraints(component);
        assertNotNull(constraints);
        SpringTest.assertSizes(0, 0, 0, constraints.getX());
        SpringTest.assertSizes(0, 0, 0, constraints.getY());
        SpringTest.assertSizes(component.getMinimumSize().width,
                component.getPreferredSize().width, component.getMaximumSize().width,
                constraints.getWidth());
        SpringTest.assertSizes(component.getMinimumSize().height,
                component.getPreferredSize().height, component.getMaximumSize().height,
                constraints.getHeight());
        Constraints componentConstraints = new SpringLayout.Constraints(component);
        layout.addLayoutComponent(component, constraints);
        constraints = layout.getConstraints(component);
        assertFalse(componentConstraints.equals(constraints));
        SpringTest.assertValues(componentConstraints.getX(), constraints.getX());
        SpringTest.assertValues(componentConstraints.getY(), constraints.getY());
        SpringTest.assertValues(componentConstraints.getWidth(), constraints.getWidth());
        SpringTest.assertValues(componentConstraints.getHeight(), constraints.getHeight());

        assertNotNull(layout.getConstraints(new JLabel()));
    }

    public void testGetConstraint() {
        layout.putConstraint(SpringLayout.SOUTH, button, Spring.constant(5),
                             SpringLayout.NORTH, container);
        layout.putConstraint(SpringLayout.EAST, button, Spring.constant(5),
                             SpringLayout.WEST, container);

        layout.layoutContainer(container);

        Spring constraint = layout.getConstraint(SpringLayout.WEST, button);
        assertEquals(0, constraint.getValue());
        layout.getConstraints(button).setConstraint(SpringLayout.EAST, Spring.constant(100));
        layout.layoutContainer(container);
        assertEquals(95, constraint.getValue());

        assertNotNull(layout.getConstraint(SpringLayout.EAST, new JLabel()));
    }

    public void testPutConstraint_Cycles() throws Exception {
        if (isHarmony()) {
          layout.putConstraint(SpringLayout.EAST, button, 5, SpringLayout.WEST, panel);
          layout.putConstraint(SpringLayout.EAST, panel, 5, SpringLayout.WEST, textField);
          layout.putConstraint(SpringLayout.EAST, textField, 5, SpringLayout.WEST, button);
          layout.layoutContainer(container);
          layout.layoutContainer(container);

          layout.getConstraints(button);

          assertEdges(layout.getConstraints(button), -3, 2, 0, 5);
          assertEdges(layout.getConstraints(panel), -3, 0, 0, 3);
          assertEdges(layout.getConstraints(textField), -5, 5, 0, 10);

          layout.putConstraint(SpringLayout.EAST, textField, 5, SpringLayout.WEST, container);
          layout.layoutContainer(container);
        }
    }

    public void testPutConstraint() throws Exception {
        JFrame frame = new JFrame("testPutConstraint");
        container.setLayout(layout);
        layout.putConstraint(SpringLayout.SOUTH, button, 5, SpringLayout.NORTH, container);
        layout.putConstraint(SpringLayout.EAST, button, Spring.constant(5),
                             SpringLayout.WEST, container);

        frame.pack();
        frame.setVisible(true);
        frame.setSize(100, 200);
        assertEquals(0, button.getX());
        assertEquals(0, button.getY());

        layout.putConstraint(SpringLayout.EAST, button, Spring.constant(15),
                             SpringLayout.WEST, container);

        layout.layoutContainer(container);
        assertEquals(10, button.getX());
        assertEquals(0, button.getY());

        layout.putConstraint(SpringLayout.SOUTH, button,
                             null,
                             SpringLayout.NORTH, container);

        testExceptionalCase(new NullPointerCase() {
            @Override
            public void exceptionalAction() throws Exception {
               layout.layoutContainer(container);
            }

        });
        assertEquals(10, button.getX());
        assertEquals(0, button.getY());


        //Independence from constraints order
        layout = new SpringLayout();
        container.setLayout(layout);
        JTextField textField = new JTextField();
        textField.getInsets().set(5, 5, 5, 5);
        setComponentSizes(textField, Spring.constant(2, 10, Integer.MAX_VALUE),
                          Spring.constant(2, 10, Integer.MAX_VALUE));
        container.add(textField);

        layout.getConstraints(button).setHeight(Spring.constant(50));

        layout.putConstraint(SpringLayout.NORTH, textField, Spring.constant(5),
                             SpringLayout.SOUTH, button);

        layout.putConstraint(SpringLayout.SOUTH, textField, Spring.constant(-10),
                             SpringLayout.SOUTH, container);

        container.setSize(200, 200);
        layout.layoutContainer(container);
        if (isHarmony()) {
            assertEquals(135, textField.getHeight());
        } else {
            assertEquals(10, textField.getHeight());
        }

        layout = new SpringLayout();
        textField = new JTextField();
        container.add(textField);
        container.setLayout(layout);
        layout.getConstraints(button).setHeight(Spring.constant(50));

        layout.putConstraint(SpringLayout.SOUTH, textField, Spring.constant(-10),
                             SpringLayout.SOUTH, container);

        layout.putConstraint(SpringLayout.NORTH, textField, Spring.constant(5),
                             SpringLayout.SOUTH, button);

        container.setSize(200, 200);
        layout.layoutContainer(container);
        assertEquals(135, textField.getHeight());

        component = new TextField();
        layout.putConstraint(SpringLayout.NORTH, textField, Spring.constant(5),
                             SpringLayout.SOUTH, component);
        layout.layoutContainer(container);
        assertEquals(185, textField.getHeight());
    }

    public void testAddLayoutComponent() throws Exception {
        Constraints constraints = new Constraints(Spring.constant(1), Spring.constant(2),
                                                  Spring.constant(3), Spring.constant(4));
        layout.addLayoutComponent(null, constraints);
        Constraints componentCnstraints = layout.getConstraints(null);
        assertNotNull(componentCnstraints);
        assertSame(componentCnstraints, constraints);

        layout.addLayoutComponent(button, null);
        componentCnstraints = layout.getConstraints(button);
        assertNotNull(componentCnstraints);
        assertEquals(componentCnstraints.getX().getValue(), 0);
        assertEquals(componentCnstraints.getY().getValue(), 0);
        assertEquals(componentCnstraints.getWidth().getValue(), button.getPreferredSize().width);
        assertEquals(componentCnstraints.getHeight().getValue(), button.getPreferredSize().height);

        layout.addLayoutComponent(button, constraints);
        componentCnstraints = layout.getConstraints(button);
        assertSame(componentCnstraints, constraints);
    }

    public void testRemoveLayoutComponent() {
        layout.removeLayoutComponent(null);
        layout.removeLayoutComponent(new JLabel());

        layout.addLayoutComponent(component, new SpringLayout.Constraints(component));
        layout.removeLayoutComponent(null);
        layout.removeLayoutComponent(new JLabel());

        JPanel panel = new JPanel(layout);
        panel.add(component);
        Constraints constraints1 = layout.getConstraints(component);
        layout.removeLayoutComponent(component);

        Constraints constraints2 = layout.getConstraints(component);
        assertNotSame(constraints1, constraints2);
        SpringTest.assertSizes(0, 0, 0, 0, constraints2.getX());
        SpringTest.assertSizes(0, 0, 0, 0, constraints2.getY());

        component = new JTextField();
        JLabel label = new JLabel("label");
        setComponentSizes(label, Spring.constant(5), Spring.constant(10));
        panel.add(component);
        panel.add(label);

        layout.getConstraints(label).setX(Spring.constant(15));
        layout.putConstraint(SpringLayout.WEST, component,
                             5,
                             SpringLayout.EAST, label);
        layout.layoutContainer(panel);
        assertEquals(15, label.getX());

        layout.removeLayoutComponent(label);
        layout.layoutContainer(panel);
        assertEquals(0, label.getX());
    }

    public void testInvalidateLayout() throws Exception {
        JFrame frame = new JFrame("testMinimumLayoutSize");
        frame.setContentPane(container);
        layout = new SpringLayout();
        container.setLayout(layout);
        Constraints buttonConstraints = layout.getConstraints(button);
        buttonConstraints.setHeight(Spring.constant(33, 34, 35));
        Constraints containerConstraints = layout.getConstraints(container);
        containerConstraints.setConstraint(SpringLayout.SOUTH,
                                           buttonConstraints.getConstraint(SpringLayout.SOUTH));
        containerConstraints.setConstraint(SpringLayout.EAST,
                                           buttonConstraints.getConstraint(SpringLayout.EAST));
        containerConstraints.setConstraint(SpringLayout.WEST, Spring.constant(3));       
        frame.pack();
        frame.setVisible(true);
        frame.setSize(100, 200);

        Spring width = buttonConstraints.getWidth();
        if (isHarmony()) {
            assertEquals(5, width.getValue());
        } else {
            assertEquals(115, width.getValue());
        }
        frame.setSize(200, 300);
        layout.invalidateLayout(container);
        assertSame(width, buttonConstraints.getWidth());
        if (isHarmony()) {
            assertEquals(5, width.getValue());
        } else {
            assertEquals(115, width.getValue());
        }
    }

    public void testLayoutContainer() throws Exception {
        button.setPreferredSize(new Dimension(11, 12));

        Constraints buttonConstraints = layout.getConstraints(button);
        buttonConstraints.setHeight(Spring.constant(35));
        Constraints containerConstraints = layout.getConstraints(container);
        containerConstraints.setConstraint(SpringLayout.SOUTH,
                                           buttonConstraints.getConstraint(SpringLayout.SOUTH));
        container.setSize(100, 200);
        layout.layoutContainer(container);
        assertBounds(0, 0, 11, 35, button.getBounds());

        containerConstraints.setConstraint(SpringLayout.EAST, buttonConstraints.getWidth());
        layout.layoutContainer(container);
        assertBounds(0, 0, 100, 35, button.getBounds());

        container.setSize(101, 201);
        buttonConstraints.setHeight(Spring.constant(40));
        layout.layoutContainer(innerButton);
        assertBounds(0, 0, 100, 35, button.getBounds());

        container.setSize(102, 202);
        buttonConstraints.setHeight(Spring.constant(50));
        layout.layoutContainer(textField);
        assertBounds(0, 0, 100, 35, button.getBounds());

        //putConstraints()
        layout = new SpringLayout();
        container.setLayout(layout);
        layout.putConstraint(SpringLayout.SOUTH, button, Spring.constant(5),
                             SpringLayout.NORTH, panel);
        layout.putConstraint(SpringLayout.SOUTH, button, Spring.constant(15),
                             SpringLayout.NORTH, panel);
        layout.putConstraint(SpringLayout.SOUTH, textField, Spring.constant(55),
                             SpringLayout.SOUTH, button);
        layout.putConstraint(SpringLayout.EAST, button, Spring.constant(15),
                             SpringLayout.WEST, panel);

        layout.putConstraint(SpringLayout.EAST, textField, Spring.constant(55),
                             SpringLayout.EAST, button);
        container.setSize(100, 200);
        layout.layoutContainer(container);

        Spring y = Spring.sum(Spring.sum(layout.getConstraint(SpringLayout.SOUTH, button),
                                         Spring.constant(55)),
                              Spring.minus(Spring.height(textField)));
        Spring height = Spring.height(textField);
        assertBounds(4, 3, 11, 12, button.getBounds());
        assertBounds(60, y.getValue(), 10, height.getValue(), textField.getBounds());

        layout = new SpringLayout();
        container.setLayout(layout);
        layout.putConstraint(SpringLayout.NORTH, button, Spring.constant(5),
                             SpringLayout.NORTH, panel);
        layout.putConstraint(SpringLayout.NORTH, button, Spring.constant(15),
                             SpringLayout.NORTH, panel);
        layout.putConstraint(SpringLayout.NORTH, textField, Spring.constant(55),
                             SpringLayout.SOUTH, button);
        layout.putConstraint(SpringLayout.WEST, button, Spring.constant(15),
                             SpringLayout.WEST, panel);
        layout.putConstraint(SpringLayout.WEST, textField, Spring.constant(55),
                             SpringLayout.EAST, button);
        layout.layoutContainer(container);
        y = Spring.sum(layout.getConstraint(SpringLayout.SOUTH, button),
                       Spring.constant(55));
        height = Spring.height(textField);
        assertBounds(15, 15, 11, 12, button.getBounds());
        assertBounds(81, y.getValue(), 10, height.getValue(), textField.getBounds());
    }

    public void testMinimumLayoutSize() throws Exception {
        //container
        setComponentSizes(button, Spring.constant(2, 5, 100), Spring.constant(3, 6, 101));
        Constraints buttonConstraints = layout.getConstraints(button);
        buttonConstraints.setHeight(Spring.constant(33, 34, 35));
        Constraints containerConstraints = layout.getConstraints(container);
        containerConstraints.setConstraint(SpringLayout.SOUTH,
                                           buttonConstraints.getConstraint(SpringLayout.SOUTH));
        containerConstraints.setConstraint(SpringLayout.EAST,
                                           buttonConstraints.getConstraint(SpringLayout.EAST));
        containerConstraints.setConstraint(SpringLayout.WEST, Spring.constant(3));
        layout.layoutContainer(container);
        assertEquals(2, layout.minimumLayoutSize(container).width);
        assertEquals(33, layout.minimumLayoutSize(container).height);

        //putConstraints()
        assertEquals(button.getInsets().left + button.getInsets().right,
                     layout.minimumLayoutSize(button).width);

        assertEquals(panel.getInsets().left + panel.getInsets().right,
                     layout.minimumLayoutSize(panel).width);

        assertEquals(innerButton.getInsets().left + innerButton.getInsets().right,
                     layout.minimumLayoutSize(innerButton).width);

        buttonConstraints.setX(Spring.constant(20));
        assertEquals(button.getInsets().left + button.getInsets().right,
                     layout.minimumLayoutSize(button).width);
        assertEquals(0, layout.getConstraint(SpringLayout.EAST, button).getPreferredValue());

        buttonConstraints.setWidth(Spring.constant(100));
        assertEquals(100 + button.getInsets().left + button.getInsets().right,
                     layout.minimumLayoutSize(button).width);

        layout.getConstraints(innerButton).setX(Spring.constant(20));
        assertEquals(innerButton.getInsets().left + innerButton.getInsets().right,
                     layout.minimumLayoutSize(innerButton).width);

        layout.getConstraints(innerButton).setWidth(Spring.constant(100));
        assertEquals(100 + innerButton.getInsets().left + innerButton.getInsets().right,
                     layout.minimumLayoutSize(innerButton).width);

        layout.getConstraints(panel).setX(Spring.constant(20));
        assertEquals(panel.getInsets().left + panel.getInsets().right,
                     layout.minimumLayoutSize(panel).width);
        assertEquals(0, layout.getConstraint(SpringLayout.EAST, panel).getPreferredValue());

        layout.getConstraints(panel).setWidth(Spring.constant(100));
        assertEquals(100 + panel.getInsets().left + panel.getInsets().right,
                     layout.minimumLayoutSize(panel).width);
        assertEquals(100, layout.getConstraint(SpringLayout.EAST, panel).getPreferredValue());


        layout = new SpringLayout();
        container.setLayout(layout);
        layout.putConstraint(SpringLayout.SOUTH, button, Spring.constant(15),
                             SpringLayout.NORTH, container);
        layout.putConstraint(SpringLayout.EAST, button, Spring.constant(5),
                             SpringLayout.WEST, container);
        assertEquals(panel.getInsets().left + panel.getInsets().right,
                     layout.minimumLayoutSize(panel).width);
        assertEquals(innerButton.getInsets().left + innerButton.getInsets().right,
                     layout.minimumLayoutSize(innerButton).width);

        assertEquals(5 + button.getInsets().left + button.getInsets().right,
                     layout.minimumLayoutSize(button).width);
    }

    public void testPreferredLayoutSize() throws Exception {
        //container
        setComponentSizes(button,
                          Spring.constant(2, 5, 100),
                          Spring.constant(3, 6, 101));
        Constraints buttonConstraints = layout.getConstraints(button);
        buttonConstraints.setHeight(Spring.constant(33, 34, 35));
        Constraints containerConstraints = layout.getConstraints(container);
        containerConstraints.setConstraint(SpringLayout.SOUTH,
                                           buttonConstraints
                                               .getConstraint(SpringLayout.SOUTH));
        containerConstraints.setConstraint(SpringLayout.EAST,
                                           buttonConstraints
                                               .getConstraint(SpringLayout.EAST));
        containerConstraints.setConstraint(SpringLayout.WEST,
                                           Spring.constant(3));
        layout.layoutContainer(container);
        assertEquals(5, layout.preferredLayoutSize(container).width);
        assertEquals(34, layout.preferredLayoutSize(container).height);

        //putConstraints()
        assertEquals(button.getInsets().left
                     + button.getInsets().right,
                     layout.preferredLayoutSize(button).width);

        assertEquals(panel.getInsets().left
                     + panel.getInsets().right,
                     layout.preferredLayoutSize(panel).width);

        assertEquals(innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.preferredLayoutSize(innerButton).width);

        buttonConstraints.setX(Spring.constant(20));
        assertEquals(button.getInsets().left
                     + button.getInsets().right,
                     layout.preferredLayoutSize(button).width);
        assertEquals(0,
                     layout.getConstraint(SpringLayout.EAST, button)
                        .getPreferredValue());

        buttonConstraints.setWidth(Spring.constant(100));
        assertEquals(100
                     + button.getInsets().left
                     + button.getInsets().right,
                     layout.preferredLayoutSize(button).width);

        layout.getConstraints(innerButton).setX(Spring.constant(20));
        assertEquals(innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.preferredLayoutSize(innerButton).width);

        layout.getConstraints(innerButton).setWidth(Spring.constant(100));
        assertEquals(100
                     + innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.preferredLayoutSize(innerButton).width);

        layout.getConstraints(panel).setX(Spring.constant(20));
        assertEquals(panel.getInsets().left
                     + panel.getInsets().right,
                     layout.preferredLayoutSize(panel).width);

        assertEquals(0,
                     layout.getConstraint(SpringLayout.EAST, panel)
                        .getPreferredValue());

        layout.getConstraints(panel).setWidth(Spring.constant(100));
        assertEquals(100
                     + panel.getInsets().left
                     + panel.getInsets().right,
                     layout.preferredLayoutSize(panel).width);
        assertEquals(100,
                     layout.getConstraint(SpringLayout.EAST, panel)
                        .getPreferredValue());

        layout = new SpringLayout();
        container.setLayout(layout);
        layout.putConstraint(SpringLayout.SOUTH, button,
                             Spring.constant(15),
                             SpringLayout.NORTH, container);


        layout.putConstraint(SpringLayout.EAST, button,
                             Spring.constant(5),
                             SpringLayout.WEST, container);

        assertEquals(panel.getInsets().left
                     + panel.getInsets().right,
                     layout.preferredLayoutSize(panel).width);

        assertEquals(innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.preferredLayoutSize(innerButton).width);

        assertEquals(5
                     + button.getInsets().left
                     + button.getInsets().right,
                     layout.preferredLayoutSize(button).width);
    }

    public void testMaximumLayoutSize() throws Exception {
        //container
        setComponentSizes(button,
                          Spring.constant(2, 5, 100),
                          Spring.constant(3, 6, 101));
        Constraints buttonConstraints = layout.getConstraints(button);
        buttonConstraints.setHeight(Spring.constant(33, 34, 35));
        Constraints containerConstraints = layout.getConstraints(container);
        containerConstraints.setConstraint(SpringLayout.SOUTH,
                                           buttonConstraints
                                               .getConstraint(SpringLayout.SOUTH));
        containerConstraints.setConstraint(SpringLayout.EAST,
                                           buttonConstraints
                                               .getConstraint(SpringLayout.EAST));
        containerConstraints.setConstraint(SpringLayout.WEST,
                                           Spring.constant(3));
        layout.layoutContainer(container);
        assertEquals(100, layout.maximumLayoutSize(container).width);
        assertEquals(35, layout.maximumLayoutSize(container).height);

        //putConstraints()
        assertEquals(Integer.MAX_VALUE
                     + button.getInsets().left
                     + button.getInsets().right,
                     layout.maximumLayoutSize(button).width);

        assertEquals(Integer.MAX_VALUE
                     + panel.getInsets().left
                     + panel.getInsets().right,
                     layout.maximumLayoutSize(panel).width);

        assertEquals(Integer.MAX_VALUE
                     + innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.maximumLayoutSize(innerButton).width);

        buttonConstraints.setX(Spring.constant(20));
        assertEquals(Integer.MAX_VALUE
                     + button.getInsets().left
                     + button.getInsets().right,
                     layout.maximumLayoutSize(button).width);
        assertEquals(0,
                     layout.getConstraint(SpringLayout.EAST, button)
                        .getPreferredValue());

        buttonConstraints.setWidth(Spring.constant(100));
        assertEquals(100
                     + button.getInsets().left
                     + button.getInsets().right,
                     layout.maximumLayoutSize(button).width);

        layout.getConstraints(innerButton).setX(Spring.constant(20));
        assertEquals(Integer.MAX_VALUE
                     + innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.maximumLayoutSize(innerButton).width);

        layout.getConstraints(innerButton).setWidth(Spring.constant(100));
        assertEquals(100
                     + innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.maximumLayoutSize(innerButton).width);

        layout.getConstraints(panel).setX(Spring.constant(20));
        assertEquals(Integer.MAX_VALUE
                     + panel.getInsets().left
                     + panel.getInsets().right,
                     layout.maximumLayoutSize(panel).width);

        assertEquals(0,
                     layout.getConstraint(SpringLayout.EAST, panel)
                        .getPreferredValue());

        layout.getConstraints(panel).setWidth(Spring.constant(100));
        assertEquals(100
                     + panel.getInsets().left
                     + panel.getInsets().right,
                     layout.maximumLayoutSize(panel).width);
        assertEquals(100,
                     layout.getConstraint(SpringLayout.EAST, panel)
                        .getPreferredValue());

        layout = new SpringLayout();
        container.setLayout(layout);
        layout.putConstraint(SpringLayout.SOUTH, button,
                             Spring.constant(15),
                             SpringLayout.NORTH, container);

        layout.putConstraint(SpringLayout.EAST, button,
                             Spring.constant(5),
                             SpringLayout.WEST, container);

        assertEquals(Integer.MAX_VALUE
                     + panel.getInsets().left
                     + panel.getInsets().right,
                     layout.maximumLayoutSize(panel).width);

        assertEquals(Integer.MAX_VALUE
                     + innerButton.getInsets().left
                     + innerButton.getInsets().right,
                     layout.maximumLayoutSize(innerButton).width);

        assertEquals(5
                     + button.getInsets().left
                     + button.getInsets().right,
                     layout.maximumLayoutSize(button).width);
    }

    public void testConstraints_Constraints() throws Exception {
        Constraints constraints;

        //SpringLayout.Constraints()
        constraints = new SpringLayout.Constraints();
        assertNull(constraints.getConstraint(SpringLayout.WEST));
        assertNull(constraints.getConstraint(SpringLayout.EAST));
        assertNull(constraints.getConstraint(SpringLayout.NORTH));
        assertNull(constraints.getConstraint(SpringLayout.SOUTH));
        assertNull(constraints.getWidth());
        assertNull(constraints.getHeight());
        assertNull(constraints.getX());
        assertNull(constraints.getY());

        //SpringLayout.Constraints(Spring x, Spring y)
        constraints = new SpringLayout.Constraints(Spring.constant(1),
                                                   Spring.constant(2));
        SpringTest.assertSizes(1, 1, 1,
                               constraints.getConstraint(SpringLayout.WEST));
        assertNull(constraints.getConstraint(SpringLayout.EAST));
        SpringTest.assertSizes(2, 2, 2,
                               constraints.getConstraint(SpringLayout.NORTH));
        assertNull(constraints.getConstraint(SpringLayout.SOUTH));
        assertNull(constraints.getWidth());
        assertNull(constraints.getHeight());
        SpringTest.assertSizes(1, 1, 1, constraints.getX());
        SpringTest.assertSizes(2, 2, 2, constraints.getY());

        //SpringLayout.Constraints(Spring x, Spring y,
        //                         Spring width, Spring height)
        constraints = new SpringLayout.Constraints(Spring.constant(1),
                                                   Spring.constant(2),
                                                   Spring.constant(10),
                                                   Spring.constant(20));
        SpringTest.assertSizes(1, 1, 1, 1,
                               constraints.getConstraint(SpringLayout.WEST));
        SpringTest.assertSizes(11, 11, 11, 11,
                               constraints.getConstraint(SpringLayout.EAST));
        SpringTest.assertSizes(2, 2, 2, 2,
                               constraints.getConstraint(SpringLayout.NORTH));
        SpringTest.assertSizes(22, 22, 22, 22,
                               constraints.getConstraint(SpringLayout.SOUTH));
        SpringTest.assertSizes(1, 1, 1, 1, constraints.getX());
        SpringTest.assertSizes(2, 2, 2, 2, constraints.getY());
        SpringTest.assertSizes(10, 10, 10, 10, constraints.getWidth());
        SpringTest.assertSizes(20, 20, 20, 20, constraints.getHeight());

        //SpringLayout.Constraints(Component c)
        setComponentSizes(button,
                          Spring.constant(1, 2, 3),
                          Spring.constant(11, 12, 13));
        constraints = new SpringLayout.Constraints(button);

        SpringTest.assertSizes(0, 0, 0, 0,
                               constraints.getConstraint(SpringLayout.WEST));
        SpringTest.assertSizes(1, 2, 3, 2,
                               constraints.getConstraint(SpringLayout.EAST));
        SpringTest.assertSizes(0, 0, 0, 0,
                               constraints.getConstraint(SpringLayout.NORTH));
        SpringTest.assertSizes(11, 12, 13, 12,
                               constraints.getConstraint(SpringLayout.SOUTH));
        SpringTest.assertSizes(0, 0, 0, 0, constraints.getX());
        SpringTest.assertSizes(0, 0, 0, 0, constraints.getY());

        SpringTest.assertSizes(1, 2, 3, 2, constraints.getWidth());
        SpringTest.assertSizes(11, 12, 13, 12, constraints.getHeight());
    }

    public void testConstraints_SetConstraint() throws Exception {
        Constraints constraints;
        layout.getConstraints(container).setConstraint(SpringLayout.WEST,
                                                      Spring.constant(5));

        layout.getConstraints(button).setConstraint(SpringLayout.WEST,
                                                    Spring.constant(6));
        layout.getConstraints(button).setX(Spring.constant(7));

        constraints = layout.getConstraints(textField);
        constraints.setX(Spring.constant(8));
        constraints.setWidth(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(30));

        layout.getConstraints(panel).setConstraint(SpringLayout.WEST,
                                                   Spring.constant(7));
        constraints.setWidth(Spring.constant(20));
        layout.getConstraints(panel).setConstraint(SpringLayout.EAST,
                                                   Spring.constant(17));

        constraints = layout.getConstraints(innerButton);
        constraints.setX(Spring.constant(18));
        constraints.setWidth(Spring.constant(20));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(50));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        assertEdges(layout.getConstraints(container),
                    0, 200, 0, 300);

        assertEdges(layout.getConstraints(button),
                    7, 12, 0, 5);

        assertEdges(layout.getConstraints(textField),
                    10, 30, 0, 10);

        if (isHarmony()) {
            assertEdges(layout.getConstraints(panel),
                        7, 17, 0, 3);
        } else {
            assertEdges(layout.getConstraints(panel),
                        14, 17, 0, 3);
        }

        assertEdges(layout.getConstraints(innerButton),
                    30, 50, 0, 10);

        component = new JPanel();
        setComponentSizes(component, Spring.constant(10), Spring.constant(5));
        layout.getConstraints(panel).setConstraint(SpringLayout.NORTH,
                                                   Spring.constant(1));
        assertEdges(layout.getConstraints(component),
                    0, 10, 0, 5);
    }

    public void testConstraints_GetConstraint() throws Exception {
        Constraints constraints;
        layout.getConstraints(container).setConstraint(SpringLayout.WEST,
                                                      Spring.constant(5));

        layout.getConstraints(button).setConstraint(SpringLayout.WEST,
                                                    Spring.constant(6));
        layout.getConstraints(button).setX(Spring.constant(7));

        constraints = layout.getConstraints(textField);
        constraints.setX(Spring.constant(8));
        constraints.setWidth(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(30));

        layout.getConstraints(panel).setConstraint(SpringLayout.WEST,
                                                   Spring.constant(7));
        constraints.setWidth(Spring.constant(20));
        layout.getConstraints(panel).setConstraint(SpringLayout.EAST,
                                                   Spring.constant(17));

        constraints = layout.getConstraints(innerButton);
        constraints.setX(Spring.constant(18));
        constraints.setWidth(Spring.constant(20));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(50));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        constraints = layout.getConstraints(container);
        SpringTest.assertSizes(0, 0, 0, 0,
                               constraints.getConstraint(SpringLayout.WEST));
        SpringTest.assertSizes(0, 0, Integer.MAX_VALUE, 200,
                               constraints.getConstraint(SpringLayout.EAST));

        constraints = layout.getConstraints(button);
        Spring west = constraints.getConstraint(SpringLayout.WEST);
        Spring east = constraints.getConstraint(SpringLayout.EAST);
        SpringTest.assertSizes(7, 7, 7, 7, west);
        SpringTest.assertSizes(9, 12, 107, 12, east);

        constraints.setConstraint(SpringLayout.WEST,
                                  Spring.constant(200));
        constraints.setConstraint(SpringLayout.EAST,
                                  Spring.constant(100));
        constraints.setWidth(Spring.constant(7));
        layout.layoutContainer(container);
        SpringTest.assertSizes(7, 7, 7, 7, west);
        SpringTest.assertSizes(9, 12, 107, 12, east);

        constraints.getConstraint("wrong value");

        constraints = layout.getConstraints(innerButton);
        west = constraints.getConstraint(SpringLayout.WEST);
        east = constraints.getConstraint(SpringLayout.EAST);
        SpringTest.assertSizes(30, 30, 30, 30, west);
        SpringTest.assertSizes(50, 50, 50, 50, east);

        constraints = new SpringLayout.Constraints();
        constraints.setConstraint(SpringLayout.EAST,
                                  Spring.constant(5));
        assertNull(constraints.getConstraint(SpringLayout.WEST));
        SpringTest.assertSizes(5, 5, 5,
                               constraints.getConstraint(SpringLayout.EAST));
        assertNull(constraints.getWidth());

        constraints.setY(Spring.constant(3));
        SpringTest.assertSizes(3, 3, 3, constraints.getY());
        SpringTest.assertSizes(3, 3, 3,
                               constraints.getConstraint(SpringLayout.NORTH));
        assertNull(constraints.getConstraint(SpringLayout.SOUTH));

        constraints = new SpringLayout.Constraints();
        constraints.setHeight(Spring.constant(3));
        assertNull(constraints.getY());
        assertNull(constraints.getConstraint(SpringLayout.SOUTH));
        assertNull(constraints.getConstraint(SpringLayout.NORTH));

        constraints = new SpringLayout.Constraints(Spring.constant(1),
                                                   Spring.constant(2));
        constraints.setWidth(Spring.constant(10));
        SpringTest.assertSizes(11, 11, 11,
                               constraints.getConstraint(SpringLayout.EAST));

    }

    public void testConstraints_SetHeight() throws Exception {
        layout.getConstraints(container).setHeight(Spring.constant(5));
        layout.getConstraints(button).setHeight(Spring.constant(6));
        layout.getConstraints(button).setHeight(Spring.constant(8));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setHeight(Spring.constant(8));
        constraints.setY(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(40));

        layout.getConstraints(panel).setHeight(Spring.constant(6));
        constraints.setY(Spring.constant(20));


        layout.getConstraints(innerButton).setHeight(Spring.constant(15));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        assertEquals(300, container.getHeight());
        assertEquals(8, button.getHeight());
        assertEquals(8, textField.getHeight());
        assertEquals(6, panel.getHeight());
        assertEquals(0, innerButton.getHeight());
    }

    public void testConstraints_GetHeight() throws Exception {
        layout.getConstraints(container).setHeight(Spring.constant(5));
        layout.getConstraints(button).setHeight(Spring.constant(6));
        layout.getConstraints(button).setHeight(Spring.constant(8));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setHeight(Spring.constant(8));
        constraints.setY(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(40));

        layout.getConstraints(panel).setHeight(Spring.constant(6));
        constraints.setY(Spring.constant(20));


        layout.getConstraints(innerButton).setHeight(Spring.constant(15));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        SpringTest.assertSizes(5, 5, 5,
                               layout.getConstraints(container).getHeight());
        SpringTest.assertSizes(8, 8, 8,
                               layout.getConstraints(button).getHeight());
        SpringTest.assertSizes(8, 8, 8,
                               layout.getConstraints(textField).getHeight());
        SpringTest.assertSizes(6, 6, 6,
                               layout.getConstraints(panel).getHeight());
        SpringTest.assertSizes(15, 15, 15,
                               layout.getConstraints(innerButton).getHeight());

        container.setSize(200, 300);
        layout.layoutContainer(button);
        SpringTest.assertSizes(8, 8, 8,
                               layout.getConstraints(button).getHeight());

    }

    public void testConstraints_SetWidth() throws Exception {
        layout.getConstraints(container).setWidth(Spring.constant(5));
        layout.getConstraints(button).setWidth(Spring.constant(6));
        layout.getConstraints(button).setWidth(Spring.constant(8));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setWidth(Spring.constant(8));
        constraints.setX(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(40));

        layout.getConstraints(panel).setWidth(Spring.constant(6));
        constraints.setX(Spring.constant(20));


        layout.getConstraints(innerButton).setWidth(Spring.constant(15));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        assertEquals(200, container.getWidth());
        assertEquals(8, button.getWidth());
        assertEquals(20, textField.getWidth());
        assertEquals(6, panel.getWidth());
        assertEquals(0, innerButton.getWidth());
    }

    public void testConstraints_GetWidth() throws Exception {
        layout.getConstraints(container).setWidth(Spring.constant(5));
        layout.getConstraints(button).setWidth(Spring.constant(6));
        layout.getConstraints(button).setWidth(Spring.constant(8));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setWidth(Spring.constant(8));
        constraints.setX(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(40));

        layout.getConstraints(panel).setWidth(Spring.constant(6));
        constraints.setX(Spring.constant(20));


        layout.getConstraints(innerButton).setWidth(Spring.constant(15));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        SpringTest.assertSizes(5, 5, 5,
                               layout.getConstraints(container).getWidth());
        SpringTest.assertSizes(8, 8, 8,
                               layout.getConstraints(button).getWidth());
        SpringTest.assertSizes(20, 20, 20,
                               layout.getConstraints(textField).getWidth());
        SpringTest.assertSizes(6, 6, 6,
                               layout.getConstraints(panel).getWidth());
        SpringTest.assertSizes(15, 15, 15,
                               layout.getConstraints(innerButton).getWidth());

        container.setSize(200, 300);
        layout.layoutContainer(button);
        SpringTest.assertSizes(8, 8, 8,
                               layout.getConstraints(button).getWidth());
    }

    public void testConstraints_SetX() throws Exception {
        layout.getConstraints(container).setX(Spring.constant(5));
        layout.getConstraints(button).setX(Spring.constant(6));
        layout.getConstraints(button).setX(Spring.constant(7));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setX(Spring.constant(8));
        constraints.setWidth(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(30));

        layout.getConstraints(panel).setX(Spring.constant(7));
        constraints.setWidth(Spring.constant(20));


        layout.getConstraints(innerButton).setX(Spring.constant(17));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        assertEquals(0, container.getX());
        assertEquals(7, button.getX());
        assertEquals(10, textField.getX());
        assertEquals(7, panel.getX());
        assertEquals(0, innerButton.getX());
    }

    public void testConstraints_GetX() throws Exception {
        layout.getConstraints(container).setX(Spring.constant(5));
        layout.getConstraints(button).setX(Spring.constant(6));
        layout.getConstraints(button).setX(Spring.constant(7));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setX(Spring.constant(8));
        constraints.setWidth(Spring.constant(10));
        constraints.setConstraint(SpringLayout.EAST, Spring.constant(30));

        layout.getConstraints(panel).setX(Spring.constant(7));
        constraints.setWidth(Spring.constant(20));


        layout.getConstraints(innerButton).setX(Spring.constant(17));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        SpringTest.assertSizes(0, 0, 0,
                               layout.getConstraints(container).getX());
        SpringTest.assertSizes(7, 7, 7,
                               layout.getConstraints(button).getX());
        SpringTest.assertSizes(10, 10, 10,
                               layout.getConstraints(textField).getX());
        SpringTest.assertSizes(7, 7, 7,
                               layout.getConstraints(panel).getX());
        SpringTest.assertSizes(17, 17, 17,
                               layout.getConstraints(innerButton).getX());

        container.setSize(200, 300);
        layout.layoutContainer(button);
        SpringTest.assertSizes(0, 0, 0,
                               layout.getConstraints(button).getX());
    }

    public void testConstraints_SetY() throws Exception {
        layout.getConstraints(container).setY(Spring.constant(5));
        layout.getConstraints(button).setY(Spring.constant(6));
        layout.getConstraints(button).setY(Spring.constant(8));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setY(Spring.constant(8));
        constraints.setHeight(Spring.constant(10));
        constraints.setConstraint(SpringLayout.SOUTH, Spring.constant(40));

        layout.getConstraints(panel).setY(Spring.constant(6));
        constraints.setHeight(Spring.constant(20));


        layout.getConstraints(innerButton).setY(Spring.constant(15));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        assertEquals(0, container.getY());
        assertEquals(8, button.getY());
        assertEquals(20, textField.getY());
        assertEquals(6, panel.getY());
        assertEquals(0, innerButton.getY());
    }

    public void testConstraints_GetY() throws Exception {
        layout.getConstraints(container).setY(Spring.constant(5));
        layout.getConstraints(button).setY(Spring.constant(6));
        layout.getConstraints(button).setY(Spring.constant(8));

        Constraints constraints = layout.getConstraints(textField);
        constraints.setY(Spring.constant(8));
        constraints.setHeight(Spring.constant(10));
        constraints.setConstraint(SpringLayout.SOUTH, Spring.constant(40));

        layout.getConstraints(panel).setY(Spring.constant(6));
        constraints.setHeight(Spring.constant(20));


        layout.getConstraints(innerButton).setY(Spring.constant(15));

        container.setSize(200, 300);
        layout.layoutContainer(container);

        SpringTest.assertSizes(0, 0, 0,
                               layout.getConstraints(container).getY());
        SpringTest.assertSizes(8, 8, 8,
                               layout.getConstraints(button).getY());
        SpringTest.assertSizes(20, 20, 20,
                               layout.getConstraints(textField).getY());
        SpringTest.assertSizes(6, 6, 6,
                               layout.getConstraints(panel).getY());
        SpringTest.assertSizes(15, 15, 15,
                               layout.getConstraints(innerButton).getY());

        container.setSize(200, 300);
        layout.layoutContainer(button);
        SpringTest.assertSizes(0, 0, 0, layout.getConstraints(button).getY());
    }

    public static void setComponentSizes(final Component component,
                                   final Spring width, final Spring height) {
       component.setMinimumSize(new Dimension(width.getMinimumValue(),
                                              height.getMinimumValue()));
       component.setPreferredSize(new Dimension(width.getPreferredValue(),
                                                height.getPreferredValue()));
       component.setMaximumSize(new Dimension(width.getMaximumValue(),
                                              height.getMaximumValue()));
    }

    private void assertBounds(final int x, final int y,
                              final int width, final int height,
                              final Rectangle bounds) {
        assertLocation(x, y, bounds);
        assertSize(width, height, bounds);
    }

    private void assertEdges(final Constraints constraints,
                                 final int west, final int east,
                                 final int north, final int south) {
            assertEquals(west,
                         constraints.getConstraint(SpringLayout.WEST).getValue());
            assertEquals(east,
                         constraints.getConstraint(SpringLayout.EAST).getValue());
            assertEquals(north,
                         constraints.getConstraint(SpringLayout.NORTH).getValue());
            assertEquals(south,
                         constraints.getConstraint(SpringLayout.SOUTH).getValue());
        }
    private void assertLocation(final int x, final int y,
                              final Rectangle bounds) {
        assertEquals(x, bounds.x);
        assertEquals(y, bounds.y);
    }

    private void assertSize(final int width, final int height,
                            final Rectangle bounds) {
        assertEquals(width, bounds.width);
        assertEquals(height, bounds.height);
    }
}
TOP

Related Classes of javax.swing.SpringLayoutTest

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.