summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/src/com/vaadin/ui/Label.java11
-rw-r--r--server/tests/src/com/vaadin/ui/LabelDataSource.java128
-rw-r--r--uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.html51
-rw-r--r--uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.java35
4 files changed, 211 insertions, 14 deletions
diff --git a/server/src/com/vaadin/ui/Label.java b/server/src/com/vaadin/ui/Label.java
index bdac278b1f..9434e92186 100644
--- a/server/src/com/vaadin/ui/Label.java
+++ b/server/src/com/vaadin/ui/Label.java
@@ -260,15 +260,20 @@ public class Label extends AbstractComponent implements Property<String>,
((Property.ValueChangeNotifier) dataSource).removeListener(this);
}
- if (!ConverterUtil.canConverterHandle(getConverter(), String.class,
- newDataSource.getType())) {
+ if (newDataSource != null
+ && !ConverterUtil.canConverterHandle(getConverter(),
+ String.class, newDataSource.getType())) {
// Try to find a converter
Converter<String, ?> c = ConverterUtil.getConverter(String.class,
newDataSource.getType(), getSession());
setConverter(c);
}
dataSource = newDataSource;
- getState().text = getDataSourceValue();
+ if (dataSource != null) {
+ // Update the value from the data source. If data source was set to
+ // null, retain the old value
+ getState().text = getDataSourceValue();
+ }
// Listens the new data source if possible
if (dataSource != null
diff --git a/server/tests/src/com/vaadin/ui/LabelDataSource.java b/server/tests/src/com/vaadin/ui/LabelDataSource.java
new file mode 100644
index 0000000000..3abe12535b
--- /dev/null
+++ b/server/tests/src/com/vaadin/ui/LabelDataSource.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2011 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.ui;
+
+import java.util.Locale;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.server.WrappedRequest;
+
+public class LabelDataSource {
+
+ Label label;
+ private static final String STRING_DS_VALUE = "String DatA source";
+ private static final int INTEGER_DS_VALUE = 1587;
+ private static final String INTEGER_STRING_VALUE_FI = "1 587";
+ private static final String INTEGER_STRING_VALUE_EN_US = "1,587";
+ private static final Object INTEGER_STRING_VALUE_DE = "1.587";
+ ObjectProperty<String> stringDataSource;
+ private ObjectProperty<Integer> integerDataSource;
+ VaadinSession vaadinSession;
+
+ @Before
+ public void setup() {
+ vaadinSession = new VaadinSession();
+ VaadinSession.setCurrent(vaadinSession);
+
+ label = new Label();
+ stringDataSource = new ObjectProperty<String>(STRING_DS_VALUE);
+ integerDataSource = new ObjectProperty<Integer>(INTEGER_DS_VALUE);
+ }
+
+ @Test
+ public void stringDataSource() {
+ label.setPropertyDataSource(stringDataSource);
+ Assert.assertEquals(STRING_DS_VALUE, label.getState().text);
+ Assert.assertEquals(STRING_DS_VALUE, label.getValue());
+ Assert.assertEquals(stringDataSource, label.getPropertyDataSource());
+ label.setPropertyDataSource(null);
+ Assert.assertEquals(STRING_DS_VALUE, label.getState().text);
+ Assert.assertEquals(STRING_DS_VALUE, label.getValue());
+ Assert.assertEquals(null, label.getPropertyDataSource());
+ label.setValue("foo");
+ Assert.assertEquals("foo", label.getState().text);
+ Assert.assertEquals("foo", label.getValue());
+ Assert.assertNull(label.getPropertyDataSource());
+
+ }
+
+ @Test
+ public void integerDataSourceFi() {
+ label.setLocale(new Locale("fi", "FI"));
+ label.setPropertyDataSource(integerDataSource);
+ Assert.assertEquals(INTEGER_STRING_VALUE_FI, label.getState().text);
+ Assert.assertEquals(INTEGER_STRING_VALUE_FI, label.getValue());
+ Assert.assertEquals(integerDataSource, label.getPropertyDataSource());
+ }
+
+ @Test
+ public void integerDataSourceEn() {
+ label.setLocale(new Locale("en", "US"));
+ label.setPropertyDataSource(integerDataSource);
+ Assert.assertEquals(INTEGER_STRING_VALUE_EN_US, label.getState().text);
+ Assert.assertEquals(INTEGER_STRING_VALUE_EN_US, label.getValue());
+ Assert.assertEquals(integerDataSource, label.getPropertyDataSource());
+ }
+
+ @Test
+ public void changeLocaleAfterDataSource() {
+ label.setLocale(new Locale("en", "US"));
+ label.setPropertyDataSource(integerDataSource);
+ label.setLocale(new Locale("fi", "FI"));
+ Assert.assertEquals(INTEGER_STRING_VALUE_FI, label.getState().text);
+ Assert.assertEquals(INTEGER_STRING_VALUE_FI, label.getValue());
+ Assert.assertEquals(integerDataSource, label.getPropertyDataSource());
+ }
+
+ @Test
+ public void setRemoveDataSource() {
+ label.setValue("before");
+ label.setPropertyDataSource(stringDataSource);
+ Assert.assertEquals(STRING_DS_VALUE, label.getValue());
+ label.setPropertyDataSource(null);
+ Assert.assertEquals(STRING_DS_VALUE, label.getValue());
+ label.setValue("after");
+ Assert.assertEquals("after", label.getValue());
+ }
+
+ public class MockUI extends UI {
+
+ public MockUI() {
+ setSession(vaadinSession);
+ }
+
+ @Override
+ protected void init(WrappedRequest request) {
+ }
+
+ }
+
+ @Test
+ public void attachToSessionWithDifferentLocale() {
+ label.setValue("before");
+ // label.setLocale(Locale.GERMANY);
+ label.setPropertyDataSource(integerDataSource);
+ UI ui = new MockUI();
+ ui.setLocale(Locale.GERMANY);
+ ui.addComponent(label);
+ Assert.assertEquals(INTEGER_STRING_VALUE_DE, label.getState().text);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.html b/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.html
index bda4403b2b..e62ef4bba1 100644
--- a/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.html
+++ b/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.html
@@ -21,6 +21,7 @@
<td>//div[@id='runLabelPropertySourceValue-596713704']/div/div[2]/div[2]/div/div/div</td>
<td>Hello Vaadin user</td>
</tr>
+<!--set data source-->
<tr>
<td>click</td>
<td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]</td>
@@ -31,7 +32,55 @@
<td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VLabel[0]</td>
<td>This text should appear on the label after clicking the button.</td>
</tr>
-
+<!--remove data source-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VLabel[0]</td>
+ <td>This text should appear on the label after clicking the button.</td>
+</tr>
+<!--set value to foo-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VLabel[0]</td>
+ <td>foo</td>
+</tr>
+<!--set data source-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VLabel[0]</td>
+ <td>This text should appear on the label after clicking the button.</td>
+</tr>
+<!--set value to foo (should fail)-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VLabel[0]</td>
+ <td>This text should appear on the label after clicking the button.</td>
+</tr>
+<tr>
+ <td>assertCSSClass</td>
+ <td>vaadin=runLabelPropertySourceValue::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>v-errorindicator</td>
+</tr>
</tbody></table>
</body>
</html>
diff --git a/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.java b/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.java
index fdbb3caddb..c3d0d9cccd 100644
--- a/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.java
+++ b/uitest/src/com/vaadin/tests/components/label/LabelPropertySourceValue.java
@@ -5,28 +5,43 @@ import com.vaadin.server.WrappedRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Label;
-public class LabelPropertySourceValue extends AbstractTestUI implements
- Button.ClickListener {
+public class LabelPropertySourceValue extends AbstractTestUI {
private Label label;
@Override
public void setup(WrappedRequest request) {
label = new Label("Hello Vaadin user");
+ addComponent(label);
Button button = new Button("Give label a new property data source...");
- button.addClickListener(this);
+ button.addClickListener(new ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ ObjectProperty<String> p = new ObjectProperty<String>(
+ "This text should appear on the label after clicking the button.");
+
+ label.setPropertyDataSource(p);
+ }
+ });
+ addComponent(button);
+ button = new Button("Remove data source", new ClickListener() {
- addComponent(label);
+ @Override
+ public void buttonClick(ClickEvent event) {
+ label.setPropertyDataSource(null);
+ }
+ });
addComponent(button);
- }
- public void buttonClick(ClickEvent event) {
- ObjectProperty<String> p = new ObjectProperty<String>(
- "This text should appear on the label after clicking the button.");
+ button = new Button("Set label value to 'foo'", new ClickListener() {
- label.setPropertyDataSource(p);
- //
+ @Override
+ public void buttonClick(ClickEvent event) {
+ label.setValue("foo");
+ }
+ });
+ addComponent(button);
}
@Override