diff options
author | Mika Murtojarvi <mika@vaadin.com> | 2015-04-08 11:05:23 +0300 |
---|---|---|
committer | Mika Murtojarvi <mika@vaadin.com> | 2015-04-08 11:36:37 +0300 |
commit | 6abcbdf1eeb8f23ebda97df3ffad7b0abdee37ea (patch) | |
tree | beeffc67cd93cb7bbfa12cb5211270004861b87b | |
parent | 8664c97c7bb6fb36b2ebbe3849b51ec00e052e24 (diff) | |
download | vaadin-framework-6abcbdf1eeb8f23ebda97df3ffad7b0abdee37ea.tar.gz vaadin-framework-6abcbdf1eeb8f23ebda97df3ffad7b0abdee37ea.zip |
Allow setting local id via DesignContext (#16584).
Change-Id: Ie599e8517823ca431d2d9e9232217db53444d7aa
3 files changed, 69 insertions, 5 deletions
diff --git a/server/src/com/vaadin/ui/declarative/DesignContext.java b/server/src/com/vaadin/ui/declarative/DesignContext.java index 54be5dcea3..fe3abcfb77 100644 --- a/server/src/com/vaadin/ui/declarative/DesignContext.java +++ b/server/src/com/vaadin/ui/declarative/DesignContext.java @@ -170,16 +170,16 @@ public class DesignContext implements Serializable { * component, the mapping from c to the string is removed. Similarly, if * component was mapped to some string s different from localId, the mapping * from s to component is removed. - * - * @param localId - * The new local id of the component. * @param component * The component whose local id is to be set. + * @param localId + * The new local id of the component. + * * @return true, if there already was a local id mapping from the string to * some component or from the component to some string. Otherwise * returns false. */ - private boolean mapLocalId(String localId, Component component) { + public boolean setComponentLocalId(Component component, String localId) { return twoWayMap(localId, component, localIdToComponent, componentToLocalId); } @@ -466,7 +466,7 @@ public class DesignContext implements Serializable { // from the attributes of componentDesign if (attributes.hasKey(LOCAL_ID_ATTRIBUTE)) { String localId = attributes.get(LOCAL_ID_ATTRIBUTE); - boolean mappingExists = mapLocalId(localId, component); + boolean mappingExists = setComponentLocalId(component, localId); if (mappingExists) { throw new DesignException( "the following local id is not unique: " + localId); diff --git a/server/tests/src/com/vaadin/tests/design/DesignContextLocalIdTest.java b/server/tests/src/com/vaadin/tests/design/DesignContextLocalIdTest.java new file mode 100644 index 0000000000..c3d7e6d8cf --- /dev/null +++ b/server/tests/src/com/vaadin/tests/design/DesignContextLocalIdTest.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.design; + +import static org.junit.Assert.assertEquals; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; + +import org.junit.Test; + +import com.vaadin.ui.Button; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.declarative.Design; +import com.vaadin.ui.declarative.DesignContext; + +/** + * Tests that setting local id via DesignContext works as intended. + * + * @since + * @author Vaadin Ltd + */ +public class DesignContextLocalIdTest { + + @Test + public void testSetLocalId() throws FileNotFoundException { + DesignContext ctx = Design.read(new FileInputStream( + "server/tests/src/com/vaadin/tests/design/local-ids.html"), + new VerticalLayout()); + TextField tf = (TextField) ctx.getComponentByLocalId("foo"); + Button b = (Button) ctx.getComponentByLocalId("bar"); + // A duplicate id should be handled by removing the id from the old + // component. + ctx.setComponentLocalId(b, "foo"); + assertEquals("Found the wrong component by local id.", ctx + .getComponentByLocalId("foo").getClass(), Button.class); + assertEquals("Found the wrong component by local id.", + ctx.getComponentByLocalId("bar"), null); + // Set an id also for the text field. + ctx.setComponentLocalId(tf, "bar"); + assertEquals("Found the wrong component by local id.", ctx + .getComponentByLocalId("foo").getClass(), Button.class); + assertEquals("Found the wrong component by local id.", ctx + .getComponentByLocalId("bar").getClass(), TextField.class); + } +} diff --git a/server/tests/src/com/vaadin/tests/design/local-ids.html b/server/tests/src/com/vaadin/tests/design/local-ids.html new file mode 100644 index 0000000000..638d004124 --- /dev/null +++ b/server/tests/src/com/vaadin/tests/design/local-ids.html @@ -0,0 +1,4 @@ +<v-vertical-layout> + <v-text-field caption="Enter your name" _id="foo"/> + <v-button _id="bar">Say hello</v-button> +</v-vertical-layout> |