From 88812ab9eed6b8e9babc3d9aac1cf13b5ee8750b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Tue, 30 Oct 2012 12:50:08 +0200 Subject: [PATCH] Avoid NPE if CustomComponent has no child (#9895) Change-Id: I020951fb4490b09f5026b9d75de95d1661399e93 --- .../CustomComponentConnector.java | 10 ++-- .../CustomComponentHideContent.html | 42 +++++++++++++++ .../CustomComponentHideContent.java | 53 +++++++++++++++++++ 3 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.html create mode 100644 uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.java diff --git a/client/src/com/vaadin/client/ui/customcomponent/CustomComponentConnector.java b/client/src/com/vaadin/client/ui/customcomponent/CustomComponentConnector.java index d14337afe4..09c90b3577 100644 --- a/client/src/com/vaadin/client/ui/customcomponent/CustomComponentConnector.java +++ b/client/src/com/vaadin/client/ui/customcomponent/CustomComponentConnector.java @@ -38,13 +38,13 @@ public class CustomComponentConnector extends @Override public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) { - ComponentConnector newChild = null; + VCustomComponent customComponent = getWidget(); if (getChildComponents().size() == 1) { - newChild = getChildComponents().get(0); + ComponentConnector newChild = getChildComponents().get(0); + customComponent.setWidget(newChild.getWidget()); + } else { + customComponent.setWidget(null); } - VCustomComponent customComponent = getWidget(); - customComponent.setWidget(newChild.getWidget()); - } } diff --git a/uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.html b/uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.html new file mode 100644 index 0000000000..0616c10ab3 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.html @@ -0,0 +1,42 @@ + + + + + + +New Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
New Test
open/run/com.vaadin.tests.components.customcomponent.CustomComponentHideContent?restartApplication
clickvaadin=runcomvaadintestscomponentscustomcomponentCustomComponentHideContent::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]
assertElementNotPresentvaadin=runcomvaadintestscomponentscustomcomponentCustomComponentHideContent::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VCustomComponent[0]/VLabel[0]
clickvaadin=runcomvaadintestscomponentscustomcomponentCustomComponentHideContent::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentscustomcomponentCustomComponentHideContent::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VCustomComponent[0]/VLabel[0]This is the content
+ + diff --git a/uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.java b/uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.java new file mode 100644 index 0000000000..47dca9d57e --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/customcomponent/CustomComponentHideContent.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012 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.customcomponent; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Label; + +public class CustomComponentHideContent extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + final Label content = new Label("This is the content"); + CustomComponent customComponent = new CustomComponent(content); + addComponent(customComponent); + + addComponent(new Button("Toggle content visibility", + new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + content.setVisible(!content.isVisible()); + } + })); + } + + @Override + protected String getTestDescription() { + return "Hiding the composition root of a CustomComponent should not cause client-side exceptions"; + } + + @Override + protected Integer getTicketNumber() { + return Integer.valueOf(9895); + } + +} -- 2.39.5