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.

AbstractComponentDeclarativeTest.java 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /*
  2. * Copyright 2000-2014 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.tests.server.component.abstractcomponent;
  17. import java.io.ByteArrayInputStream;
  18. import java.io.File;
  19. import java.lang.reflect.Field;
  20. import java.nio.charset.Charset;
  21. import java.util.Locale;
  22. import org.jsoup.nodes.Attributes;
  23. import org.jsoup.nodes.Element;
  24. import org.jsoup.parser.Tag;
  25. import org.junit.Before;
  26. import org.junit.Test;
  27. import com.vaadin.server.ErrorMessage.ErrorLevel;
  28. import com.vaadin.server.ExternalResource;
  29. import com.vaadin.server.FileResource;
  30. import com.vaadin.server.Responsive;
  31. import com.vaadin.server.ThemeResource;
  32. import com.vaadin.server.UserError;
  33. import com.vaadin.shared.ui.label.ContentMode;
  34. import com.vaadin.tests.design.DeclarativeTestBase;
  35. import com.vaadin.ui.AbstractComponent;
  36. import com.vaadin.ui.Button;
  37. import com.vaadin.ui.HorizontalSplitPanel;
  38. import com.vaadin.ui.Label;
  39. import com.vaadin.ui.declarative.Design;
  40. import com.vaadin.ui.declarative.DesignContext;
  41. /**
  42. * Test cases for reading and writing the properties of AbstractComponent.
  43. *
  44. * @since
  45. * @author Vaadin Ltd
  46. */
  47. public class AbstractComponentDeclarativeTest extends
  48. DeclarativeTestBase<AbstractComponent> {
  49. private AbstractComponent component;
  50. @Before
  51. public void setUp() {
  52. Label l = new Label();
  53. l.setContentMode(ContentMode.HTML);
  54. component = l;
  55. }
  56. @Test
  57. public void testEmptyDesign() {
  58. String design = "<vaadin-label>";
  59. testRead(design, component);
  60. testWrite(design, component);
  61. }
  62. @Test
  63. public void testProperties() {
  64. String design = "<vaadin-label id=\"testId\" primary-style-name=\"test-style\" "
  65. + "caption=\"test-caption\" locale=\"fi_FI\" description=\"test-description\" "
  66. + "error=\"<div>test-error</div>\" immediate />";
  67. component.setId("testId");
  68. component.setPrimaryStyleName("test-style");
  69. component.setCaption("test-caption");
  70. component.setLocale(new Locale("fi", "FI"));
  71. component.setDescription("test-description");
  72. component.setComponentError(new UserError("<div>test-error</div>",
  73. com.vaadin.server.AbstractErrorMessage.ContentMode.HTML,
  74. ErrorLevel.ERROR));
  75. component.setImmediate(true);
  76. testRead(design, component);
  77. testWrite(design, component);
  78. }
  79. @Test
  80. public void testReadImmediate() {
  81. // Additional tests for the immediate property, including
  82. // explicit immediate values
  83. String[] design = { "<vaadin-label/>",
  84. "<vaadin-label immediate=\"false\"/>",
  85. "<vaadin-label immediate=\"true\"/>",
  86. "<vaadin-label immediate />" };
  87. Boolean[] explicitImmediate = { null, Boolean.FALSE, Boolean.TRUE,
  88. Boolean.TRUE };
  89. boolean[] immediate = { false, false, true, true };
  90. for (int i = 0; i < design.length; i++) {
  91. component = (AbstractComponent) Design
  92. .read(new ByteArrayInputStream(design[i].getBytes(Charset
  93. .forName("UTF-8"))));
  94. assertEquals(immediate[i], component.isImmediate());
  95. assertEquals(explicitImmediate[i], getExplicitImmediate(component));
  96. }
  97. }
  98. @Test
  99. public void testExternalIcon() {
  100. String design = "<vaadin-label icon=\"http://example.com/example.gif\"/>";
  101. component
  102. .setIcon(new ExternalResource("http://example.com/example.gif"));
  103. testRead(design, component);
  104. testWrite(design, component);
  105. }
  106. @Test
  107. public void testThemeIcon() {
  108. String design = "<vaadin-label icon=\"theme://example.gif\"/>";
  109. component.setIcon(new ThemeResource("example.gif"));
  110. testRead(design, component);
  111. testWrite(design, component);
  112. }
  113. @Test
  114. public void testFileResourceIcon() {
  115. String design = "<vaadin-label icon=\"img/example.gif\"/>";
  116. component.setIcon(new FileResource(new File("img/example.gif")));
  117. testRead(design, component);
  118. testWrite(design, component);
  119. }
  120. @Test
  121. public void testWidthAndHeight() {
  122. String design = "<vaadin-label width=\"70%\" height=\"12px\"/>";
  123. component.setWidth("70%");
  124. component.setHeight("12px");
  125. testRead(design, component);
  126. testWrite(design, component);
  127. }
  128. @Test
  129. public void testSizeFull() {
  130. String design = "<vaadin-label size-full />";
  131. component.setSizeFull();
  132. testRead(design, component);
  133. testWrite(design, component);
  134. }
  135. @Test
  136. public void testSizeAuto() {
  137. String design = "<vaadin-label size-auto />";
  138. component.setSizeUndefined();
  139. testRead(design, component);
  140. testWrite(design, component);
  141. }
  142. @Test
  143. public void testHeightFull() {
  144. String design = "<vaadin-label height-full width=\"20px\"/>";
  145. component.setHeight("100%");
  146. component.setWidth("20px");
  147. testRead(design, component);
  148. testWrite(design, component);
  149. }
  150. @Test
  151. public void testHeightAuto() {
  152. String design = "<vaadin-horizontal-split-panel height-auto width=\"20px\" >";
  153. // we need to have default height of 100% -> use split panel
  154. AbstractComponent component = new HorizontalSplitPanel();
  155. component.setHeight(null);
  156. component.setWidth("20px");
  157. testRead(design, component);
  158. testWrite(design, component);
  159. }
  160. @Test
  161. public void testWidthFull() {
  162. String design = "<vaadin-button width-full height=\"20px\">Foo</vaadin-button>";
  163. AbstractComponent component = new Button();
  164. component.setCaptionAsHtml(true);
  165. component.setCaption("Foo");
  166. component.setHeight("20px");
  167. component.setWidth("100%");
  168. testRead(design, component);
  169. testWrite(design, component);
  170. }
  171. @Test
  172. public void testWidthAuto() {
  173. String design = "<vaadin-label height=\"20px\"/ width-auto />";
  174. component.setCaptionAsHtml(false);
  175. component.setHeight("20px");
  176. component.setWidth(null);
  177. testRead(design, component);
  178. testWrite(design, component);
  179. }
  180. @Test
  181. public void testResponsive() {
  182. String design = "<vaadin-label responsive />";
  183. Responsive.makeResponsive(component);
  184. testRead(design, component);
  185. testWrite(design, component);
  186. }
  187. @Test
  188. public void testResponsiveFalse() {
  189. String design = "<vaadin-label responsive =\"false\"/>";
  190. // Only test read as the attribute responsive=false would not be written
  191. testRead(design, component);
  192. }
  193. @Test
  194. public void testReadAlreadyResponsive() {
  195. AbstractComponent component = new Label();
  196. Responsive.makeResponsive(component);
  197. Element design = createDesign(true);
  198. component.readDesign(design, new DesignContext());
  199. assertEquals("Component should have only one extension", 1, component
  200. .getExtensions().size());
  201. }
  202. private Element createDesign(boolean responsive) {
  203. Attributes attributes = new Attributes();
  204. attributes.put("responsive", responsive);
  205. Element node = new Element(Tag.valueOf("vaadin-label"), "", attributes);
  206. return node;
  207. }
  208. private Boolean getExplicitImmediate(AbstractComponent component) {
  209. try {
  210. Field immediate = AbstractComponent.class
  211. .getDeclaredField("explicitImmediateValue");
  212. immediate.setAccessible(true);
  213. return (Boolean) immediate.get(component);
  214. } catch (Exception e) {
  215. throw new RuntimeException(
  216. "Getting the field explicitImmediateValue failed.");
  217. }
  218. }
  219. }