aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2012-06-25 15:48:27 +0300
committerArtur Signell <artur@vaadin.com>2012-06-25 15:51:37 +0300
commit4a997b3d5334d07185011f62e5508a88abc370fc (patch)
treef9d24da5e138e8a7e03636f32bdb9025c5616ec8 /tests
parentfee6f306961ffff67809c33715c719075ba2c450 (diff)
downloadvaadin-framework-4a997b3d5334d07185011f62e5508a88abc370fc.tar.gz
vaadin-framework-4a997b3d5334d07185011f62e5508a88abc370fc.zip
Test for converter factory and related fixes (#8992)
Diffstat (limited to 'tests')
-rw-r--r--tests/server-side/com/vaadin/tests/data/converter/ConverterFactory.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/server-side/com/vaadin/tests/data/converter/ConverterFactory.java b/tests/server-side/com/vaadin/tests/data/converter/ConverterFactory.java
new file mode 100644
index 0000000000..b97f987ae3
--- /dev/null
+++ b/tests/server-side/com/vaadin/tests/data/converter/ConverterFactory.java
@@ -0,0 +1,100 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.tests.data.converter;
+
+import java.util.Locale;
+
+import junit.framework.TestCase;
+
+import com.vaadin.Application;
+import com.vaadin.data.util.converter.Converter;
+import com.vaadin.data.util.converter.DefaultConverterFactory;
+import com.vaadin.ui.TextField;
+
+public class ConverterFactory extends TestCase {
+
+ public static class ConvertTo42 implements Converter<String, Integer> {
+
+ public Integer convertToModel(String value, Locale locale)
+ throws com.vaadin.data.util.converter.Converter.ConversionException {
+ return 42;
+ }
+
+ public String convertToPresentation(Integer value, Locale locale)
+ throws com.vaadin.data.util.converter.Converter.ConversionException {
+ return "42";
+ }
+
+ public Class<Integer> getModelType() {
+ return Integer.class;
+ }
+
+ public Class<String> getPresentationType() {
+ return String.class;
+ }
+
+ }
+
+ public static class ConverterFactory42 extends DefaultConverterFactory {
+ @Override
+ public <PRESENTATION, MODEL> Converter<PRESENTATION, MODEL> createConverter(
+ Class<PRESENTATION> presentationType, Class<MODEL> modelType) {
+ if (modelType == Integer.class) {
+ return (Converter<PRESENTATION, MODEL>) new ConvertTo42();
+ }
+
+ return super.createConverter(presentationType, modelType);
+ }
+ }
+
+ public void testApplicationConverterFactoryInBackgroundThread() {
+ Application.setCurrentApplication(null);
+ final Application appWithCustomIntegerConverter = new Application();
+ appWithCustomIntegerConverter
+ .setConverterFactory(new ConverterFactory42());
+
+ TextField tf = new TextField("", "123") {
+ @Override
+ public Application getApplication() {
+ return appWithCustomIntegerConverter;
+ };
+ };
+ tf.setConverter(Integer.class);
+ // The application converter always returns 42. Current application is
+ // null
+ assertEquals(42, tf.getConvertedValue());
+ }
+
+ public void testApplicationConverterFactoryForDetachedComponent() {
+ final Application appWithCustomIntegerConverter = new Application();
+ appWithCustomIntegerConverter
+ .setConverterFactory(new ConverterFactory42());
+ Application.setCurrentApplication(appWithCustomIntegerConverter);
+
+ TextField tf = new TextField("", "123");
+ tf.setConverter(Integer.class);
+ // The application converter always returns 42. Current application is
+ // null
+ assertEquals(42, tf.getConvertedValue());
+ }
+
+ public void testApplicationConverterFactoryForDifferentThanCurrentApplication() {
+ final Application fieldAppWithCustomIntegerConverter = new Application();
+ fieldAppWithCustomIntegerConverter
+ .setConverterFactory(new ConverterFactory42());
+ Application.setCurrentApplication(new Application());
+
+ TextField tf = new TextField("", "123") {
+ @Override
+ public Application getApplication() {
+ return fieldAppWithCustomIntegerConverter;
+ }
+ };
+ tf.setConverter(Integer.class);
+
+ // The application converter always returns 42. Application.getCurrent()
+ // should not be used
+ assertEquals(42, tf.getConvertedValue());
+ }
+}