package com.vaadin.v7.tests.data.converter; import org.junit.Assert; import org.junit.Test; import com.vaadin.v7.data.util.converter.Converter; import com.vaadin.v7.data.util.converter.Converter.ConversionException; import com.vaadin.v7.data.util.converter.ReverseConverter; import com.vaadin.v7.data.util.converter.StringToEnumConverter; public class StringToEnumConverterTest { public static enum FooEnum { VALUE1, SOME_VALUE, FOO_BAR_BAZ, Bar, nonStandardCase, _HUGH; } public static enum EnumWithCustomToString { ONE, TWO, THREE; @Override public String toString() { return "case " + (ordinal() + 1); } } public static enum EnumWithAmbigousToString { FOO, FOOBAR, FOO_BAR; @Override public String toString() { return name().replaceAll("_", ""); } } StringToEnumConverter converter = new StringToEnumConverter(); Converter<Enum, String> reverseConverter = new ReverseConverter<Enum, String>( converter); private String convertToString(Enum value) { return converter.convertToPresentation(value, String.class, null); } public Enum convertToEnum(String string, Class<? extends Enum> type) { return converter.convertToModel(string, type, null); } @Test public void testEmptyStringConversion() { Assert.assertEquals(null, converter.convertToModel("", Enum.class, null)); } @Test public void testInvalidEnumClassConversion() { try { converter.convertToModel("Foo", Enum.class, null); Assert.fail("No exception thrown"); } catch (ConversionException e) { // OK } } @Test public void testNullConversion() { Assert.assertEquals(null, converter.convertToModel(null, Enum.class, null)); } @Test public void testReverseNullConversion() { Assert.assertEquals(null, reverseConverter.convertToModel(null, String.class, null)); } @Test public void testValueConversion() { Assert.assertEquals(FooEnum.VALUE1, converter.convertToModel("Value1", FooEnum.class, null)); Assert.assertEquals(FooEnum.SOME_VALUE, converter.convertToModel("Some value", FooEnum.class, null)); Assert.assertEquals(FooEnum.FOO_BAR_BAZ, converter.convertToModel("Foo bar baz", FooEnum.class, null)); Assert.assertEquals(FooEnum.Bar, converter.convertToModel("Bar", FooEnum.class, null)); Assert.assertEquals(FooEnum.nonStandardCase, converter .convertToModel("Nonstandardcase", FooEnum.class, null)); Assert.assertEquals(FooEnum._HUGH, converter.convertToModel("_hugh", FooEnum.class, null)); } @Test public void testReverseValueConversion() { Assert.assertEquals("Value1", reverseConverter .convertToModel(FooEnum.VALUE1, String.class, null)); Assert.assertEquals("Some value", reverseConverter .convertToModel(FooEnum.SOME_VALUE, String.class, null)); Assert.assertEquals("Foo bar baz", reverseConverter .convertToModel(FooEnum.FOO_BAR_BAZ, String.class, null)); Assert.assertEquals("Bar", reverseConverter.convertToModel(FooEnum.Bar, String.class, null)); Assert.assertEquals("Nonstandardcase", reverseConverter .convertToModel(FooEnum.nonStandardCase, String.class, null)); Assert.assertEquals("_hugh", reverseConverter .convertToModel(FooEnum._HUGH, String.class, null)); } @Test public void preserveFormattingWithCustomToString() { for (EnumWithCustomToString e : EnumWithCustomToString.values()) { Assert.assertEquals(e.toString(), convertToString(e)); } } @Test public void findEnumWithCustomToString() { for (EnumWithCustomToString e : EnumWithCustomToString.values()) { Assert.assertSame(e, convertToEnum(e.toString(), EnumWithCustomToString.class)); Assert.assertSame(e, convertToEnum(e.name(), EnumWithCustomToString.class)); } } @Test public void unambigousValueInEnumWithAmbigous_succeed() { Assert.assertSame(EnumWithAmbigousToString.FOO, convertToEnum("foo", EnumWithAmbigousToString.class)); } @Test(expected = ConversionException.class) public void ambigousValue_throws() { convertToEnum("foobar", EnumWithAmbigousToString.class); } }