You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RendererTest.java 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package com.vaadin.v7.tests.server.renderer;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertNull;
  4. import static org.junit.Assert.assertSame;
  5. import java.util.Date;
  6. import java.util.Locale;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. import com.vaadin.server.VaadinSession;
  10. import com.vaadin.tests.util.AlwaysLockedVaadinSession;
  11. import com.vaadin.v7.data.Item;
  12. import com.vaadin.v7.data.util.IndexedContainer;
  13. import com.vaadin.v7.data.util.converter.Converter;
  14. import com.vaadin.v7.data.util.converter.StringToIntegerConverter;
  15. import com.vaadin.v7.tests.server.component.grid.TestGrid;
  16. import com.vaadin.v7.ui.Grid;
  17. import com.vaadin.v7.ui.Grid.AbstractRenderer;
  18. import com.vaadin.v7.ui.Grid.Column;
  19. import com.vaadin.v7.ui.renderers.ButtonRenderer;
  20. import com.vaadin.v7.ui.renderers.DateRenderer;
  21. import com.vaadin.v7.ui.renderers.HtmlRenderer;
  22. import com.vaadin.v7.ui.renderers.NumberRenderer;
  23. import com.vaadin.v7.ui.renderers.TextRenderer;
  24. import elemental.json.JsonValue;
  25. public class RendererTest {
  26. private static class TestBean {
  27. int i = 42;
  28. @Override
  29. public String toString() {
  30. return "TestBean [" + i + "]";
  31. }
  32. }
  33. private static class ExtendedBean extends TestBean {
  34. float f = 3.14f;
  35. }
  36. private static class TestRenderer extends TextRenderer {
  37. @Override
  38. public JsonValue encode(String value) {
  39. return super.encode("renderer(" + value + ")");
  40. }
  41. }
  42. private static class TestConverter implements Converter<String, TestBean> {
  43. @Override
  44. public TestBean convertToModel(String value,
  45. Class<? extends TestBean> targetType, Locale locale)
  46. throws ConversionException {
  47. return null;
  48. }
  49. @Override
  50. public String convertToPresentation(TestBean value,
  51. Class<? extends String> targetType, Locale locale)
  52. throws ConversionException {
  53. if (value instanceof ExtendedBean) {
  54. return "ExtendedBean(" + value.i + ", "
  55. + ((ExtendedBean) value).f + ")";
  56. } else {
  57. return "TestBean(" + value.i + ")";
  58. }
  59. }
  60. @Override
  61. public Class<TestBean> getModelType() {
  62. return TestBean.class;
  63. }
  64. @Override
  65. public Class<String> getPresentationType() {
  66. return String.class;
  67. }
  68. }
  69. private Grid grid;
  70. private Column intColumn;
  71. private Column textColumn;
  72. private Column beanColumn;
  73. private Column htmlColumn;
  74. private Column numberColumn;
  75. private Column dateColumn;
  76. private Column extendedBeanColumn;
  77. private Column buttonColumn;
  78. @Before
  79. @SuppressWarnings("unchecked")
  80. public void setUp() {
  81. VaadinSession.setCurrent(new AlwaysLockedVaadinSession(null));
  82. IndexedContainer c = new IndexedContainer();
  83. c.addContainerProperty("int", Integer.class, 0);
  84. c.addContainerProperty("text", String.class, "");
  85. c.addContainerProperty("html", String.class, "");
  86. c.addContainerProperty("number", Number.class, null);
  87. c.addContainerProperty("date", Date.class, null);
  88. c.addContainerProperty("bean", TestBean.class, null);
  89. c.addContainerProperty("button", String.class, null);
  90. c.addContainerProperty("extendedBean", ExtendedBean.class, null);
  91. Object id = c.addItem();
  92. Item item = c.getItem(id);
  93. item.getItemProperty("int").setValue(123);
  94. item.getItemProperty("text").setValue("321");
  95. item.getItemProperty("html").setValue("<b>html</b>");
  96. item.getItemProperty("number").setValue(3.14);
  97. item.getItemProperty("date").setValue(new Date(123456789));
  98. item.getItemProperty("bean").setValue(new TestBean());
  99. item.getItemProperty("extendedBean").setValue(new ExtendedBean());
  100. grid = new TestGrid(c);
  101. intColumn = grid.getColumn("int");
  102. textColumn = grid.getColumn("text");
  103. htmlColumn = grid.getColumn("html");
  104. numberColumn = grid.getColumn("number");
  105. dateColumn = grid.getColumn("date");
  106. beanColumn = grid.getColumn("bean");
  107. extendedBeanColumn = grid.getColumn("extendedBean");
  108. buttonColumn = grid.getColumn("button");
  109. }
  110. @Test
  111. public void testDefaultRendererAndConverter() throws Exception {
  112. assertSame(TextRenderer.class, intColumn.getRenderer().getClass());
  113. assertSame(StringToIntegerConverter.class,
  114. intColumn.getConverter().getClass());
  115. assertSame(TextRenderer.class, textColumn.getRenderer().getClass());
  116. // String->String; converter not needed
  117. assertNull(textColumn.getConverter());
  118. assertSame(TextRenderer.class, beanColumn.getRenderer().getClass());
  119. // MyBean->String; converter not found
  120. assertNull(beanColumn.getConverter());
  121. }
  122. @Test
  123. public void testFindCompatibleConverter() throws Exception {
  124. intColumn.setRenderer(renderer());
  125. assertSame(StringToIntegerConverter.class,
  126. intColumn.getConverter().getClass());
  127. textColumn.setRenderer(renderer());
  128. assertNull(textColumn.getConverter());
  129. }
  130. @Test(expected = IllegalArgumentException.class)
  131. public void testCannotFindConverter() {
  132. beanColumn.setRenderer(renderer());
  133. }
  134. @Test
  135. public void testExplicitConverter() throws Exception {
  136. beanColumn.setRenderer(renderer(), converter());
  137. extendedBeanColumn.setRenderer(renderer(), converter());
  138. }
  139. @Test
  140. public void testEncoding() throws Exception {
  141. assertEquals("42", render(intColumn, 42).asString());
  142. intColumn.setRenderer(renderer());
  143. assertEquals("renderer(42)", render(intColumn, 42).asString());
  144. assertEquals("2.72", render(textColumn, "2.72").asString());
  145. textColumn.setRenderer(new TestRenderer());
  146. assertEquals("renderer(2.72)", render(textColumn, "2.72").asString());
  147. }
  148. @Test
  149. public void testEncodingWithoutConverter() throws Exception {
  150. assertEquals("TestBean [42]",
  151. render(beanColumn, new TestBean()).asString());
  152. }
  153. @Test
  154. public void testBeanEncoding() throws Exception {
  155. beanColumn.setRenderer(renderer(), converter());
  156. extendedBeanColumn.setRenderer(renderer(), converter());
  157. assertEquals("renderer(TestBean(42))",
  158. render(beanColumn, new TestBean()).asString());
  159. assertEquals("renderer(ExtendedBean(42, 3.14))",
  160. render(beanColumn, new ExtendedBean()).asString());
  161. assertEquals("renderer(ExtendedBean(42, 3.14))",
  162. render(extendedBeanColumn, new ExtendedBean()).asString());
  163. }
  164. @Test
  165. public void testNullEncoding() {
  166. textColumn.setRenderer(new TextRenderer());
  167. htmlColumn.setRenderer(new HtmlRenderer());
  168. numberColumn.setRenderer(new NumberRenderer());
  169. dateColumn.setRenderer(new DateRenderer());
  170. buttonColumn.setRenderer(new ButtonRenderer());
  171. assertEquals("", textColumn.getRenderer().encode(null).asString());
  172. assertEquals("", htmlColumn.getRenderer().encode(null).asString());
  173. assertEquals("", numberColumn.getRenderer().encode(null).asString());
  174. assertEquals("", dateColumn.getRenderer().encode(null).asString());
  175. assertEquals("", buttonColumn.getRenderer().encode(null).asString());
  176. }
  177. @Test
  178. public void testNullEncodingWithDefault() {
  179. textColumn.setRenderer(new TextRenderer("default value"));
  180. htmlColumn.setRenderer(new HtmlRenderer("default value"));
  181. numberColumn.setRenderer(
  182. new NumberRenderer("%s", Locale.getDefault(), "default value"));
  183. dateColumn.setRenderer(new DateRenderer("%s", "default value"));
  184. buttonColumn.setRenderer(new ButtonRenderer("default value"));
  185. assertEquals("default value",
  186. textColumn.getRenderer().encode(null).asString());
  187. assertEquals("default value",
  188. htmlColumn.getRenderer().encode(null).asString());
  189. assertEquals("default value",
  190. numberColumn.getRenderer().encode(null).asString());
  191. assertEquals("default value",
  192. dateColumn.getRenderer().encode(null).asString());
  193. assertEquals("default value",
  194. buttonColumn.getRenderer().encode(null).asString());
  195. }
  196. private TestConverter converter() {
  197. return new TestConverter();
  198. }
  199. private TestRenderer renderer() {
  200. return new TestRenderer();
  201. }
  202. private JsonValue render(Column column, Object value) {
  203. return AbstractRenderer.encodeValue(value, column.getRenderer(),
  204. column.getConverter(), grid.getLocale());
  205. }
  206. }