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.

GridHeaderFooterDeclarativeTest.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. package com.vaadin.v7.tests.server.component.grid.declarative;
  2. import org.jsoup.nodes.Element;
  3. import org.jsoup.parser.Tag;
  4. import org.junit.Test;
  5. import com.vaadin.shared.ui.ContentMode;
  6. import com.vaadin.ui.Label;
  7. import com.vaadin.ui.declarative.DesignContext;
  8. import com.vaadin.v7.ui.Grid;
  9. import com.vaadin.v7.ui.Grid.Column;
  10. import com.vaadin.v7.ui.Grid.FooterRow;
  11. import com.vaadin.v7.ui.Grid.HeaderRow;
  12. public class GridHeaderFooterDeclarativeTest extends GridDeclarativeTestBase {
  13. @Test
  14. public void testSingleDefaultHeader() {
  15. //@formatter:off
  16. String design = "<vaadin7-grid><table>"
  17. + "<colgroup>"
  18. + " <col sortable property-id='Column1'>"
  19. + " <col sortable property-id='Column2'>"
  20. + " <col sortable property-id='Column3'>"
  21. + "</colgroup>"
  22. + "<thead>"
  23. + " <tr default><th plain-text>Column1<th plain-text>Column2<th plain-text>Column3</tr>"
  24. + "</thead>"
  25. + "</table></vaadin7-grid>";
  26. //@formatter:on
  27. Grid grid = new Grid();
  28. grid.addColumn("Column1", String.class);
  29. grid.addColumn("Column2", String.class);
  30. grid.addColumn("Column3", String.class);
  31. testWrite(design, grid);
  32. testRead(design, grid, true);
  33. }
  34. @Test
  35. public void testSingleDefaultHTMLHeader() {
  36. //@formatter:off
  37. String design = "<vaadin7-grid><table>"
  38. + "<colgroup>"
  39. + " <col sortable property-id='Column1'>"
  40. + " <col sortable property-id='Column2'>"
  41. + " <col sortable property-id='Column3'>" + "</colgroup>"
  42. + "<thead>"
  43. + " <tr default><th>Column1<th>Column2<th>Column3</tr>"
  44. + "</thead>"
  45. + "</table></vaadin7-grid>";
  46. //@formatter:on
  47. Grid grid = new Grid();
  48. grid.addColumn("Column1", String.class);
  49. grid.addColumn("Column2", String.class);
  50. grid.addColumn("Column3", String.class);
  51. HeaderRow row = grid.getDefaultHeaderRow();
  52. for (Column c : grid.getColumns()) {
  53. row.getCell(c.getPropertyId()).setHtml(c.getHeaderCaption());
  54. }
  55. testWrite(design, grid);
  56. testRead(design, grid, true);
  57. }
  58. @Test
  59. public void testNoHeaderRows() {
  60. //@formatter:off
  61. String design = "<vaadin7-grid><table>"
  62. + "<colgroup>"
  63. + " <col sortable property-id='Column1'>"
  64. + "</colgroup>"
  65. + "<thead />"
  66. + "</table></vaadin7-grid>";
  67. //@formatter:on
  68. Grid grid = new Grid();
  69. grid.addColumn("Column1", String.class);
  70. grid.removeHeaderRow(grid.getDefaultHeaderRow());
  71. testWrite(design, grid);
  72. testRead(design, grid, true);
  73. }
  74. @Test
  75. public void testMultipleHeadersWithColSpans() {
  76. //@formatter:off
  77. String design = "<vaadin7-grid><table>"
  78. + "<colgroup>"
  79. + " <col sortable property-id='Column1'>"
  80. + " <col sortable property-id='Column2'>"
  81. + " <col sortable property-id='Column3'>"
  82. + "</colgroup>"
  83. + "<thead>"
  84. + " <tr><th colspan=3>Baz</tr>"
  85. + " <tr default><th>Column1<th>Column2<th>Column3</tr>"
  86. + " <tr><th>Foo<th colspan=2>Bar</tr>"
  87. + "</thead>"
  88. + "</table></vaadin7-grid>";
  89. //@formatter:on
  90. Grid grid = new Grid();
  91. grid.addColumn("Column1", String.class);
  92. grid.addColumn("Column2", String.class);
  93. grid.addColumn("Column3", String.class);
  94. HeaderRow row = grid.getDefaultHeaderRow();
  95. for (Column c : grid.getColumns()) {
  96. row.getCell(c.getPropertyId()).setHtml(c.getHeaderCaption());
  97. }
  98. grid.prependHeaderRow().join("Column1", "Column2", "Column3")
  99. .setHtml("Baz");
  100. row = grid.appendHeaderRow();
  101. row.getCell("Column1").setHtml("Foo");
  102. row.join("Column2", "Column3").setHtml("Bar");
  103. testWrite(design, grid);
  104. testRead(design, grid, true);
  105. }
  106. @Test
  107. public void testSingleDefaultFooter() {
  108. //@formatter:off
  109. String design = "<vaadin7-grid><table>"
  110. + "<colgroup>"
  111. + " <col sortable property-id='Column1'>"
  112. + " <col sortable property-id='Column2'>"
  113. + " <col sortable property-id='Column3'>"
  114. + "</colgroup>"
  115. + "<thead />" // No headers read or written
  116. + "<tfoot>"
  117. + " <tr><td plain-text>Column1<td plain-text>Column2<td plain-text>Column3</tr>"
  118. + "</tfoot>"
  119. + "</table></vaadin7-grid>";
  120. //@formatter:on
  121. Grid grid = new Grid();
  122. grid.addColumn("Column1", String.class);
  123. grid.addColumn("Column2", String.class);
  124. grid.addColumn("Column3", String.class);
  125. FooterRow row = grid.appendFooterRow();
  126. for (Column c : grid.getColumns()) {
  127. row.getCell(c.getPropertyId()).setText(c.getHeaderCaption());
  128. }
  129. grid.removeHeaderRow(grid.getDefaultHeaderRow());
  130. testWrite(design, grid);
  131. testRead(design, grid, true);
  132. }
  133. @Test
  134. public void testSingleDefaultHTMLFooter() {
  135. //@formatter:off
  136. String design = "<vaadin7-grid><table>"
  137. + "<colgroup>"
  138. + " <col sortable property-id='Column1'>"
  139. + " <col sortable property-id='Column2'>"
  140. + " <col sortable property-id='Column3'>" + "</colgroup>"
  141. + "<thead />" // No headers read or written
  142. + "<tfoot>"
  143. + " <tr><td>Column1<td>Column2<td>Column3</tr>"
  144. + "</tfoot>"
  145. + "</table></vaadin7-grid>";
  146. //@formatter:on
  147. Grid grid = new Grid();
  148. grid.addColumn("Column1", String.class);
  149. grid.addColumn("Column2", String.class);
  150. grid.addColumn("Column3", String.class);
  151. FooterRow row = grid.appendFooterRow();
  152. for (Column c : grid.getColumns()) {
  153. row.getCell(c.getPropertyId()).setHtml(c.getHeaderCaption());
  154. }
  155. grid.removeHeaderRow(grid.getDefaultHeaderRow());
  156. testWrite(design, grid);
  157. testRead(design, grid, true);
  158. }
  159. @Test
  160. public void testMultipleFootersWithColSpans() {
  161. //@formatter:off
  162. String design = "<vaadin7-grid><table>"
  163. + "<colgroup>"
  164. + " <col sortable property-id='Column1'>"
  165. + " <col sortable property-id='Column2'>"
  166. + " <col sortable property-id='Column3'>"
  167. + "</colgroup>"
  168. + "<thead />" // No headers read or written.
  169. + "<tfoot>"
  170. + " <tr><td colspan=3>Baz</tr>"
  171. + " <tr><td>Column1<td>Column2<td>Column3</tr>"
  172. + " <tr><td>Foo<td colspan=2>Bar</tr>"
  173. + "</tfoot>"
  174. + "</table></vaadin7-grid>";
  175. //@formatter:on
  176. Grid grid = new Grid();
  177. grid.addColumn("Column1", String.class);
  178. grid.addColumn("Column2", String.class);
  179. grid.addColumn("Column3", String.class);
  180. FooterRow row = grid.appendFooterRow();
  181. for (Column c : grid.getColumns()) {
  182. row.getCell(c.getPropertyId()).setHtml(c.getHeaderCaption());
  183. }
  184. grid.prependFooterRow().join("Column1", "Column2", "Column3")
  185. .setHtml("Baz");
  186. row = grid.appendFooterRow();
  187. row.getCell("Column1").setHtml("Foo");
  188. row.join("Column2", "Column3").setHtml("Bar");
  189. grid.removeHeaderRow(grid.getDefaultHeaderRow());
  190. testWrite(design, grid);
  191. testRead(design, grid, true);
  192. }
  193. @Test
  194. public void testComponentInGridHeader() {
  195. //@formatter:off
  196. String design = "<vaadin7-grid><table>"
  197. + "<colgroup>"
  198. + " <col sortable property-id='Column1'>"
  199. + "</colgroup>"
  200. + "<thead>"
  201. + "<tr default><th><vaadin-label><b>Foo</b></vaadin-label></tr>"
  202. + "</thead>"
  203. + "</table></vaadin7-grid>";
  204. //@formatter:on
  205. Label component = new Label("<b>Foo</b>");
  206. component.setContentMode(ContentMode.HTML);
  207. Grid grid = new Grid();
  208. grid.addColumn("Column1", String.class);
  209. grid.getDefaultHeaderRow().getCell("Column1").setComponent(component);
  210. testRead(design, grid, true);
  211. testWrite(design, grid);
  212. }
  213. @Test
  214. public void testComponentInGridFooter() {
  215. //@formatter:off
  216. String design = "<vaadin7-grid><table>"
  217. + "<colgroup>"
  218. + " <col sortable property-id='Column1'>"
  219. + "</colgroup>"
  220. + "<thead />" // No headers read or written
  221. + "<tfoot>"
  222. + "<tr><td><vaadin-label><b>Foo</b></vaadin-label></tr>"
  223. + "</tfoot>"
  224. + "</table></vaadin7-grid>";
  225. //@formatter:on
  226. Label component = new Label("<b>Foo</b>");
  227. component.setContentMode(ContentMode.HTML);
  228. Grid grid = new Grid();
  229. grid.addColumn("Column1", String.class);
  230. grid.prependFooterRow().getCell("Column1").setComponent(component);
  231. grid.removeHeaderRow(grid.getDefaultHeaderRow());
  232. testRead(design, grid, true);
  233. testWrite(design, grid);
  234. }
  235. @Test
  236. public void testHtmlEntitiesinGridHeaderFooter() {
  237. //@formatter:off
  238. String design = "<vaadin7-grid><table>"
  239. + "<colgroup>"
  240. + " <col sortable=\"true\" property-id=\"> test\">"
  241. + "</colgroup>"
  242. + "<thead>"
  243. + " <tr><th plain-text=\"true\">&gt; Test</th></tr>"
  244. + "</thead>"
  245. + "<tfoot>"
  246. + " <tr><td plain-text=\"true\">&gt; Test</td></tr>"
  247. + "</tfoot>"
  248. + "<tbody />"
  249. + "</table></vaadin7-grid>";
  250. //@formatter:on
  251. Grid grid = read(design);
  252. String actualHeader = grid.getHeaderRow(0).getCell("> test").getText();
  253. String actualFooter = grid.getFooterRow(0).getCell("> test").getText();
  254. String expected = "> Test";
  255. assertEquals(expected, actualHeader);
  256. assertEquals(expected, actualFooter);
  257. design = design.replace("plain-text=\"true\"", "");
  258. grid = read(design);
  259. actualHeader = grid.getHeaderRow(0).getCell("> test").getHtml();
  260. actualFooter = grid.getFooterRow(0).getCell("> test").getHtml();
  261. expected = "&gt; Test";
  262. assertEquals(expected, actualHeader);
  263. assertEquals(expected, actualFooter);
  264. grid = new Grid();
  265. grid.setColumns("test");
  266. HeaderRow header = grid.addHeaderRowAt(0);
  267. FooterRow footer = grid.addFooterRowAt(0);
  268. grid.removeHeaderRow(grid.getDefaultHeaderRow());
  269. // entities should be encoded when writing back, not interpreted as HTML
  270. header.getCell("test").setText("&amp; Test");
  271. footer.getCell("test").setText("&amp; Test");
  272. Element root = new Element(Tag.valueOf("vaadin7-grid"), "");
  273. grid.writeDesign(root, new DesignContext());
  274. assertEquals("&amp;amp; Test",
  275. root.getElementsByTag("th").get(0).html());
  276. assertEquals("&amp;amp; Test",
  277. root.getElementsByTag("td").get(0).html());
  278. header = grid.addHeaderRowAt(0);
  279. footer = grid.addFooterRowAt(0);
  280. // entities should not be encoded, this is already given as HTML
  281. header.getCell("test").setHtml("&amp; Test");
  282. footer.getCell("test").setHtml("&amp; Test");
  283. root = new Element(Tag.valueOf("vaadin7-grid"), "");
  284. grid.writeDesign(root, new DesignContext());
  285. assertEquals("&amp; Test",
  286. root.getElementsByTag("th").get(0).html());
  287. assertEquals("&amp; Test",
  288. root.getElementsByTag("td").get(0).html());
  289. }
  290. }