]> source.dussan.org Git - vaadin-framework.git/blob
050ab282a608f2796334681eda10aaaa0d522400
[vaadin-framework.git] /
1 package com.vaadin.tests.server.component.abstractfield;
2
3 import java.util.Locale;
4
5 import junit.framework.TestCase;
6
7 import com.vaadin.data.util.MethodProperty;
8 import com.vaadin.data.util.converter.Converter;
9 import com.vaadin.data.util.converter.StringToIntegerConverter;
10 import com.vaadin.tests.data.bean.Address;
11 import com.vaadin.tests.data.bean.Country;
12 import com.vaadin.tests.data.bean.Person;
13 import com.vaadin.tests.data.bean.Sex;
14 import com.vaadin.ui.CheckBox;
15 import com.vaadin.ui.TextField;
16
17 public class AbstractFieldValueConversions extends TestCase {
18
19     Person paulaBean = new Person("Paula", "Brilliant", "paula@brilliant.com",
20             34, Sex.FEMALE, new Address("Paula street 1", 12345, "P-town",
21                     Country.FINLAND));
22
23     public void testWithoutConversion() {
24         TextField tf = new TextField();
25         tf.setPropertyDataSource(new MethodProperty<String>(paulaBean,
26                 "firstName"));
27         assertEquals("Paula", tf.getValue());
28         assertEquals("Paula", tf.getPropertyDataSource().getValue());
29         tf.setValue("abc");
30         assertEquals("abc", tf.getValue());
31         assertEquals("abc", tf.getPropertyDataSource().getValue());
32         assertEquals("abc", paulaBean.getFirstName());
33     }
34
35     public void testStringIdentityConversion() {
36         TextField tf = new TextField();
37         tf.setConverter(new Converter<String, String>() {
38
39             public String convertToModel(String value, Locale locale) {
40                 return value;
41             }
42
43             public String convertToPresentation(String value, Locale locale) {
44                 return value;
45             }
46
47             public Class<String> getModelType() {
48                 return String.class;
49             }
50
51             public Class<String> getPresentationType() {
52                 return String.class;
53             }
54         });
55         tf.setPropertyDataSource(new MethodProperty<String>(paulaBean,
56                 "firstName"));
57         assertEquals("Paula", tf.getValue());
58         assertEquals("Paula", tf.getPropertyDataSource().getValue());
59         tf.setValue("abc");
60         assertEquals("abc", tf.getValue());
61         assertEquals("abc", tf.getPropertyDataSource().getValue());
62         assertEquals("abc", paulaBean.getFirstName());
63     }
64
65     public void testFailingConversion() {
66         TextField tf = new TextField();
67         tf.setConverter(new Converter<String, Integer>() {
68
69             public Integer convertToModel(String value, Locale locale) {
70                 throw new ConversionException("Failed");
71             }
72
73             public String convertToPresentation(Integer value, Locale locale) {
74                 throw new ConversionException("Failed");
75             }
76
77             public Class<Integer> getModelType() {
78                 // TODO Auto-generated method stub
79                 return null;
80             }
81
82             public Class<String> getPresentationType() {
83                 // TODO Auto-generated method stub
84                 return null;
85             }
86         });
87         try {
88             tf.setValue(1);
89             fail("setValue(Integer) should throw an exception");
90         } catch (Converter.ConversionException e) {
91             // OK, expected
92         }
93     }
94
95     public void testIntegerStringConversion() {
96         TextField tf = new TextField();
97
98         tf.setConverter(new StringToIntegerConverter());
99         tf.setPropertyDataSource(new MethodProperty<Integer>(paulaBean, "age"));
100         assertEquals(34, tf.getPropertyDataSource().getValue());
101         assertEquals("34", tf.getValue());
102         tf.setValue("12");
103         assertEquals(12, tf.getPropertyDataSource().getValue());
104         assertEquals("12", tf.getValue());
105         tf.getPropertyDataSource().setValue(42);
106         assertEquals(42, tf.getPropertyDataSource().getValue());
107         assertEquals("42", tf.getValue());
108     }
109
110     public void testBooleanNullConversion() {
111         CheckBox cb = new CheckBox();
112         cb.setConverter(new Converter<Boolean, Boolean>() {
113
114             public Boolean convertToModel(Boolean value, Locale locale) {
115                 // value from a CheckBox should never be null as long as it is
116                 // not set to null (handled by conversion below).
117                 assertNotNull(value);
118                 return value;
119             }
120
121             public Boolean convertToPresentation(Boolean value, Locale locale) {
122                 // Datamodel -> field
123                 if (value == null) {
124                     return false;
125                 }
126
127                 return value;
128             }
129
130             public Class<Boolean> getModelType() {
131                 return Boolean.class;
132             }
133
134             public Class<Boolean> getPresentationType() {
135                 return Boolean.class;
136             }
137
138         });
139         MethodProperty<Boolean> property = new MethodProperty<Boolean>(
140                 paulaBean, "deceased");
141         cb.setPropertyDataSource(property);
142         assertEquals(Boolean.FALSE, property.getValue());
143         assertEquals(Boolean.FALSE, cb.getValue());
144         Boolean newDmValue = cb.getConverter().convertToPresentation(
145                 cb.getValue(), new Locale("fi", "FI"));
146         assertEquals(Boolean.FALSE, newDmValue);
147
148         // FIXME: Should be able to set to false here to cause datamodel to be
149         // set to false but the change will not be propagated to the Property
150         // (field value is already false)
151
152         cb.setValue(true);
153         assertEquals(Boolean.TRUE, cb.getValue());
154         assertEquals(Boolean.TRUE, property.getValue());
155
156         cb.setValue(false);
157         assertEquals(Boolean.FALSE, cb.getValue());
158         assertEquals(Boolean.FALSE, property.getValue());
159
160     }
161
162 }