Index: trunk/test/unit/org/openstreetmap/josm/tools/MultiLineFlowLayoutTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/tools/MultiLineFlowLayoutTest.java	(revision 10622)
+++ trunk/test/unit/org/openstreetmap/josm/tools/MultiLineFlowLayoutTest.java	(revision 10622)
@@ -0,0 +1,136 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import static org.junit.Assert.assertEquals;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Test {@link MultiLineFlowLayout}
+ * @author Michael Zangl
+ */
+public class MultiLineFlowLayoutTest {
+    /**
+     * No special rules.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    private static final int TEST_WIDHT = 500;
+    private JPanel container;
+
+    /**
+     * Prepare test container.
+     */
+    @Before
+    public void setUp() {
+        JPanel parent = new JPanel();
+        parent.setBounds(0, 0, TEST_WIDHT, 500);
+
+        container = new JPanel(new MultiLineFlowLayout(FlowLayout.CENTER, 0, 0));
+        parent.add(container);
+    }
+
+    /**
+     * Test that one line is layed out correctly
+     */
+    @Test
+    public void testOneLine() {
+        fillOneLine();
+
+        container.invalidate();
+        Dimension preffered = container.getPreferredSize();
+        assertEquals(TEST_WIDHT, preffered.width);
+        assertEquals(100, preffered.height);
+
+        Dimension minimum = container.getMinimumSize();
+        assertEquals(TEST_WIDHT, minimum.width);
+        assertEquals(50, minimum.height);
+    }
+
+    /**
+     * Test that insets are respected
+     */
+    @Test
+    public void testInsets() {
+        fillOneLine();
+
+        container.setBorder(BorderFactory.createEmptyBorder(3, 0, 7, 0));
+        container.invalidate();
+        Dimension preffered = container.getPreferredSize();
+        assertEquals(TEST_WIDHT, preffered.width);
+        assertEquals(110, preffered.height);
+
+        // This should force wrapping
+        container.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 40));
+        container.invalidate();
+        preffered = container.getPreferredSize();
+        assertEquals(TEST_WIDHT, preffered.width);
+        assertEquals(200, preffered.height);
+    }
+
+    /**
+     * Test that gaps are respected
+     */
+    @Test
+    public void testGaps() {
+        fillOneLine();
+
+        container.setLayout(new MultiLineFlowLayout(FlowLayout.LEADING, 20, 10));
+        container.invalidate();
+        Dimension preffered = container.getPreferredSize();
+        assertEquals(TEST_WIDHT, preffered.width);
+        assertEquals(230, preffered.height);
+    }
+
+    /**
+     * Test that it behaves the same as FlowLayout for one line.
+     */
+    @Test
+    public void testSameAsFlowLayout() {
+        fillOneLine();
+        JPanel childx = new JPanel();
+        childx.setPreferredSize(new Dimension(300, 100));
+        childx.setMinimumSize(new Dimension(200, 50));
+        childx.setVisible(false);
+        container.add(childx);
+        container.setBorder(BorderFactory.createEmptyBorder(3, 4, 5, 6));
+
+        container.setLayout(new MultiLineFlowLayout(FlowLayout.LEADING, 2, 1));
+        container.invalidate();
+        Dimension is = container.getPreferredSize();
+
+        container.setLayout(new FlowLayout(FlowLayout.LEADING, 2, 1));
+        container.invalidate();
+        Dimension should = container.getPreferredSize();
+
+        assertEquals(should.height, is.height);
+    }
+
+    private void fillOneLine() {
+        JPanel child1 = new JPanel();
+        child1.setPreferredSize(new Dimension(300, 100));
+        child1.setMinimumSize(new Dimension(200, 50));
+        container.add(child1);
+        JPanel child2 = new JPanel();
+        child2.setPreferredSize(new Dimension(100, 100));
+        child1.setMinimumSize(new Dimension(100, 50));
+        container.add(child2);
+        JPanel child3 = new JPanel();
+        child3.setPreferredSize(new Dimension(50, 100));
+        child1.setMinimumSize(new Dimension(50, 50));
+        container.add(child3);
+    }
+}
