From b6910633fedce478a53db0fe6673acdaaebb4337 Mon Sep 17 00:00:00 2001 From: Henrik Paul Date: Fri, 19 Dec 2014 13:39:17 +0200 Subject: [PATCH] DefaultTextRenderer shows nulls as empty strings (#13334) Change-Id: I1fa88cbbb946b932a2a453392a50aff91c36671b --- .../src/com/vaadin/client/widgets/Grid.java | 10 +++- .../GridDefaultTextRenderer.java | 32 ++++++++++ .../GridDefaultTextRendererTest.java | 60 +++++++++++++++++++ .../grid/GridDefaultTextRendererWidget.java | 56 +++++++++++++++++ 4 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRenderer.java create mode 100644 uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRendererTest.java create mode 100644 uitest/src/com/vaadin/tests/widgetset/client/grid/GridDefaultTextRendererWidget.java diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index 63070dcd92..a5b90e5563 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -2519,7 +2519,15 @@ public class Grid extends ResizeComposite implements + DEFAULT_RENDERER_WARNING); warned = true; } - cell.getElement().setInnerText(data.toString()); + + final String text; + if (data == null) { + text = ""; + } else { + text = data.toString(); + } + + cell.getElement().setInnerText(text); } } diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRenderer.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRenderer.java new file mode 100644 index 0000000000..5c4ccfae89 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRenderer.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.components.grid.basicfeatures; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.widgetset.TestingWidgetSet; +import com.vaadin.tests.widgetset.client.grid.GridDefaultTextRendererWidget; +import com.vaadin.tests.widgetset.server.TestWidgetComponent; +import com.vaadin.ui.UI; + +@Widgetset(TestingWidgetSet.NAME) +public class GridDefaultTextRenderer extends UI { + + @Override + protected void init(VaadinRequest request) { + setContent(new TestWidgetComponent(GridDefaultTextRendererWidget.class)); + } +} diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRendererTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRendererTest.java new file mode 100644 index 0000000000..cd31bfc860 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridDefaultTextRendererTest.java @@ -0,0 +1,60 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.components.grid.basicfeatures; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; + +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.NotificationElement; +import com.vaadin.testbench.elements.ServerClass; +import com.vaadin.tests.annotations.TestCategory; +import com.vaadin.tests.tb3.MultiBrowserTest; + +@TestCategory("grid") +public class GridDefaultTextRendererTest extends MultiBrowserTest { + + @ServerClass("com.vaadin.tests.widgetset.server.TestWidgetComponent") + public static class MyGridElement extends GridElement { + // empty + } + + private GridElement grid; + + @Before + public void init() { + openTestURL(); + grid = $(MyGridElement.class).first(); + assertFalse("There was an unexpected notification during init", + $(NotificationElement.class).exists()); + } + + @Test + public void testNullIsRenderedAsEmptyStringByDefaultTextRenderer() { + assertTrue("First cell should've been empty", grid.getCell(0, 0) + .getText().isEmpty()); + } + + @Test + public void testStringIsRenderedAsStringByDefaultTextRenderer() { + assertEquals("Second cell should've been populated ", "string", grid + .getCell(1, 0).getText()); + } +} diff --git a/uitest/src/com/vaadin/tests/widgetset/client/grid/GridDefaultTextRendererWidget.java b/uitest/src/com/vaadin/tests/widgetset/client/grid/GridDefaultTextRendererWidget.java new file mode 100644 index 0000000000..173ae097ed --- /dev/null +++ b/uitest/src/com/vaadin/tests/widgetset/client/grid/GridDefaultTextRendererWidget.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.widgetset.client.grid; + +import com.vaadin.client.widget.grid.datasources.ListDataSource; +import com.vaadin.client.widgets.Grid; +import com.vaadin.client.widgets.Grid.Column; +import com.vaadin.client.widgets.Grid.SelectionMode; +import com.vaadin.shared.ui.grid.HeightMode; + +public class GridDefaultTextRendererWidget extends + PureGWTTestApplication> { + /* + * This can't be null, because grid thinks that a row object of null means + * "data is still being fetched". + */ + private static final String NULL_STRING = ""; + + private Grid grid; + + public GridDefaultTextRendererWidget() { + super(new Grid()); + grid = getTestedWidget(); + + grid.setDataSource(new ListDataSource(NULL_STRING, "string")); + grid.addColumn(new Column() { + @Override + public String getValue(String row) { + if (!NULL_STRING.equals(row)) { + return row; + } else { + return null; + } + } + }); + + grid.setHeightByRows(2); + grid.setHeightMode(HeightMode.ROW); + grid.setSelectionMode(SelectionMode.NONE); + addNorth(grid, 500); + } + +} -- 2.39.5