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.

MenuBarDeclarativeTest.java 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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.components.menubar;
  17. import java.io.IOException;
  18. import java.util.List;
  19. import org.junit.Assert;
  20. import org.junit.Test;
  21. import com.vaadin.server.ExternalResource;
  22. import com.vaadin.server.ThemeResource;
  23. import com.vaadin.tests.design.DeclarativeTestBase;
  24. import com.vaadin.ui.MenuBar;
  25. import com.vaadin.ui.MenuBar.MenuItem;
  26. /**
  27. * Tests declarative support for menu bars.
  28. *
  29. * @since 7.4
  30. * @author Vaadin Ltd
  31. */
  32. public class MenuBarDeclarativeTest extends DeclarativeTestBase<MenuBar> {
  33. @Test
  34. // #16328
  35. public void testReadWrite() throws IOException {
  36. String design = "<v-menu-bar auto-open='' tabindex=5>"
  37. + "<menu checkable=''>Save</menu>"
  38. + "<menu description='Open a file'>Open</menu>"
  39. + "<menu disabled=''>Close</menu>"
  40. + "<menu icon='http://foo.bar/ico.png'>Help</menu>"
  41. + "<menu visible='false'>About</menu>"
  42. + "<menu>Sub<menu>Item</menu></menu>"
  43. + "<menu more>WTF?!</menu>" + "</v-menu-bar>";
  44. MenuBar bar = new MenuBar();
  45. bar.setAutoOpen(true);
  46. bar.setHtmlContentAllowed(true);
  47. bar.setTabIndex(5);
  48. bar.addItem("Save", null).setCheckable(true);
  49. bar.addItem("Open", null).setDescription("Open a file");
  50. bar.addItem("Close", null).setEnabled(false);
  51. bar.addItem("Help", null).setIcon(
  52. new ExternalResource("http://foo.bar/ico.png"));
  53. bar.addItem("About", null).setVisible(false);
  54. bar.addItem("Sub", null).addItem("Item", null);
  55. bar.setMoreMenuItem(bar.new MenuItem("WTF?!", null, null));
  56. testWrite(design, bar);
  57. testRead(design, bar);
  58. }
  59. @Test
  60. // #16328
  61. public void testTicketSpec1() throws IOException {
  62. String design = "<v-menu-bar auto-open='' plain-text tabindex=5> "
  63. + "<menu>File"
  64. + "<menu>Save</menu>"
  65. + "<menu icon=\"theme://../runo/icons/16/folder.png\">Open</menu>"
  66. + "<menu separator='' />"
  67. + "<menu disabled=''>Exit</menu>"
  68. + "<menu visible='false'>Not for everybody</menu>"
  69. + "</menu>"
  70. + "<menu description=\"This contains many items in sub menus\">Other"
  71. + "<menu style-name=\"fancy\">Sub"
  72. + "<menu checkable='' checked=''>Option 1 - no <b>html</b></menu>"
  73. + "<menu checkable=''>Option 2</menu>"
  74. + "<menu checkable=''>Option 3</menu>" //
  75. + "</menu>" //
  76. + "</menu>" //
  77. + "<menu more icon=\"theme://icon.png\">foo</menu>"
  78. + "</v-menu-bar>";
  79. // for one reason or another, no component has a correct .equals
  80. // implementation, which makes tests a bit annoying
  81. MenuBar menuBar = new MenuBar();
  82. menuBar.setHtmlContentAllowed(false);
  83. menuBar.setTabIndex(5);
  84. menuBar.setAutoOpen(true);
  85. // File menu
  86. MenuItem fileMenu = menuBar.addItem("File", null);
  87. fileMenu.addItem("Save", null);
  88. fileMenu.addItem("Open", new ThemeResource(
  89. "../runo/icons/16/folder.png"), null);
  90. fileMenu.addSeparator();
  91. fileMenu.addItem("Exit", null).setEnabled(false);
  92. fileMenu.addItem("Not for everybody", null).setVisible(false);
  93. MenuItem otherMenu = menuBar.addItem("Other", null);
  94. otherMenu.setDescription("This contains many items in sub menus");
  95. MenuItem subMenu = otherMenu.addItem("Sub", null);
  96. subMenu.setStyleName("fancy");
  97. MenuItem option1 = subMenu.addItem("Option 1 - no <b>html</b>", null);
  98. option1.setCheckable(true);
  99. option1.setChecked(true);
  100. subMenu.addItem("Option 2", null).setCheckable(true);
  101. subMenu.addItem("Option 3", null).setCheckable(true);
  102. menuBar.setMoreMenuItem(null);
  103. MenuItem moreMenu = menuBar.getMoreMenuItem();
  104. moreMenu.setIcon(new ThemeResource("icon.png"));
  105. moreMenu.setText("foo");
  106. testRead(design, menuBar);
  107. testWrite(design, menuBar);
  108. }
  109. @Test
  110. // #16328
  111. public void testTicketSpec2() throws IOException {
  112. String design = "<v-menu-bar>"
  113. + "<menu><b>File</b>"
  114. + "<menu><font style=\"color: red\">Save</font></menu>"
  115. + "<menu icon=\"theme://../runo/icons/16/folder.png\">Open</menu>"
  116. + "<menu separator='' />" + "<menu disabled=''>Exit</menu>" //
  117. + "</menu></v-menu-bar>";
  118. MenuBar menuBar = new MenuBar();
  119. menuBar.setHtmlContentAllowed(true);
  120. MenuItem fileMenu = menuBar.addItem("<b>File</b>", null);
  121. fileMenu.addItem("<font style=\"color: red\">Save</font>", null);
  122. fileMenu.addItem("Open", new ThemeResource(
  123. "../runo/icons/16/folder.png"), null);
  124. fileMenu.addSeparator();
  125. fileMenu.addItem("Exit", null).setEnabled(false);
  126. testRead(design, menuBar);
  127. testWrite(design, menuBar);
  128. }
  129. @Override
  130. public MenuBar testRead(String design, MenuBar expected) {
  131. MenuBar result = super.testRead(design, expected);
  132. List<MenuItem> expectedMenuItems = expected.getItems();
  133. List<MenuItem> actualMenuItems = result.getItems();
  134. Assert.assertEquals("Different amount of menu items",
  135. expectedMenuItems.size(), actualMenuItems.size());
  136. for (int i = 0; i < expectedMenuItems.size(); ++i) {
  137. compareMenus(expectedMenuItems.get(i), actualMenuItems.get(i));
  138. }
  139. return result;
  140. }
  141. private void compareMenus(MenuItem expected, MenuItem actual) {
  142. String baseError = "Error Comparing MenuItem " + expected.getText()
  143. + ": ";
  144. Assert.assertEquals(baseError + "Visibile", expected.isVisible(),
  145. actual.isVisible());
  146. Assert.assertEquals(baseError + "Checkable", expected.isCheckable(),
  147. actual.isCheckable());
  148. Assert.assertEquals(baseError + "Checked", expected.isChecked(),
  149. actual.isChecked());
  150. Assert.assertEquals(baseError + "Separator", expected.isSeparator(),
  151. actual.isSeparator());
  152. Assert.assertEquals(baseError + "Enabled", expected.isEnabled(),
  153. actual.isEnabled());
  154. Assert.assertEquals(baseError + "Text", expected.getText(),
  155. actual.getText());
  156. Assert.assertEquals(baseError + "Description",
  157. expected.getDescription(), actual.getDescription());
  158. Assert.assertEquals(baseError + "Style Name", expected.getStyleName(),
  159. actual.getStyleName());
  160. if (expected.getIcon() != null) {
  161. Assert.assertNotNull(baseError + "Icon was null", actual.getIcon());
  162. } else {
  163. if (actual.getIcon() != null) {
  164. Assert.fail(baseError + "Icon should've been null");
  165. }
  166. }
  167. Assert.assertEquals(baseError + "Has Children", expected.hasChildren(),
  168. actual.hasChildren());
  169. if (expected.hasChildren()) {
  170. List<MenuItem> children = expected.getChildren();
  171. List<MenuItem> actualChildren = actual.getChildren();
  172. Assert.assertEquals(baseError + "Child count", children.size(),
  173. actualChildren.size());
  174. for (int i = 0; i < children.size(); ++i) {
  175. compareMenus(children.get(i), actualChildren.get(i));
  176. }
  177. }
  178. }
  179. }