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 13KB

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