From c79dca4391bff459f090102447c5502089bf9fc7 Mon Sep 17 00:00:00 2001 From: Martin Vysny Date: Thu, 21 Feb 2019 07:36:43 +0200 Subject: Provide extensive error information on GridLayout.OutOfBoundsException and IllegalArgumentException (#11461) --- server/src/main/java/com/vaadin/ui/GridLayout.java | 12 +++++++++-- .../component/gridlayout/GridLayoutTest.java | 24 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) (limited to 'server') diff --git a/server/src/main/java/com/vaadin/ui/GridLayout.java b/server/src/main/java/com/vaadin/ui/GridLayout.java index 0a3e139ea9..46275dfdaf 100644 --- a/server/src/main/java/com/vaadin/ui/GridLayout.java +++ b/server/src/main/java/com/vaadin/ui/GridLayout.java @@ -203,8 +203,9 @@ public class GridLayout extends AbstractLayout // Checks the validity of the coordinates if (column2 < column1 || row2 < row1) { - throw new IllegalArgumentException( - "Illegal coordinates for the component"); + throw new IllegalArgumentException(String.format( + "Illegal coordinates for the component: %s!<=%s, %s!<=%s", + column1, column2, row1, row2)); } if (column1 < 0 || row1 < 0 || column2 >= getColumns() || row2 >= getRows()) { @@ -611,6 +612,11 @@ public class GridLayout extends AbstractLayout return childData.row2; } + @Override + public String toString() { + return String.format("Area{%s,%s - %s,%s}", getColumn1(), getRow1(), + getColumn2(), getRow2()); + } } private static boolean componentsOverlap(ChildComponentData a, @@ -694,6 +700,8 @@ public class GridLayout extends AbstractLayout * @param areaOutOfBounds */ public OutOfBoundsException(Area areaOutOfBounds) { + super(String.format("%s, layout dimension: %sx%s", areaOutOfBounds, + getColumns(), getRows())); this.areaOutOfBounds = areaOutOfBounds; } diff --git a/server/src/test/java/com/vaadin/tests/server/component/gridlayout/GridLayoutTest.java b/server/src/test/java/com/vaadin/tests/server/component/gridlayout/GridLayoutTest.java index abf2e823d5..88b06d7a2d 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/gridlayout/GridLayoutTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/gridlayout/GridLayoutTest.java @@ -99,6 +99,30 @@ public class GridLayoutTest { assertEquals(1, gl.getColumnExpandRatio(1), 0); } + @Test + public void verifyOutOfBoundsExceptionContainsHelpfulMessage() { + GridLayout grid = new GridLayout(1, 1); + try { + grid.addComponent(new Label(), 3, 3); + fail("Should have failed"); + } catch (GridLayout.OutOfBoundsException ex) { + assertEquals("Area{3,3 - 3,3}, layout dimension: 1x1", + ex.getMessage()); + } + } + + @Test + public void verifyAddComponentFailsWithHelpfulMessageOnInvalidArgs() { + GridLayout grid = new GridLayout(6, 6); + try { + grid.addComponent(new Label(), 3, 3, 2, 2); + fail("Should have failed"); + } catch (IllegalArgumentException ex) { + assertEquals("Illegal coordinates for the component: 3!<=2, 3!<=2", + ex.getMessage()); + } + } + private void assertContentPositions(GridLayout grid) { assertEquals(grid.getComponentCount(), children.length); int c = 0; -- cgit v1.2.3