您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ListSelectTest.java 9.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. package com.vaadin.tests.components.listselect;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertTrue;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. import java.util.Optional;
  7. import java.util.stream.Collectors;
  8. import java.util.stream.Stream;
  9. import org.junit.Assert;
  10. import org.junit.Before;
  11. import org.junit.Test;
  12. import org.openqa.selenium.By;
  13. import org.openqa.selenium.WebElement;
  14. import org.openqa.selenium.support.ui.Select;
  15. import com.vaadin.testbench.elements.AbstractComponentElement.ReadOnlyException;
  16. import com.vaadin.testbench.elements.ListSelectElement;
  17. import com.vaadin.tests.tb3.SingleBrowserTestPhantomJS2;
  18. public class ListSelectTest extends SingleBrowserTestPhantomJS2 {
  19. @Before
  20. public void setUp() throws Exception {
  21. openTestURL();
  22. }
  23. @Test
  24. public void initialLoad_containsCorrectItems() {
  25. assertItems(20);
  26. }
  27. @Test
  28. public void initialItems_reduceItemCount_containsCorrectItems() {
  29. selectMenuPath("Component", "Data provider", "Items", "5");
  30. assertItems(5);
  31. }
  32. @Test
  33. public void initialItems_increaseItemCount_containsCorrectItems() {
  34. selectMenuPath("Component", "Data provider", "Items", "100");
  35. assertItems(100);
  36. }
  37. @Test
  38. public void clickToSelect() {
  39. selectMenuPath("Component", "Listeners", "Selection listener");
  40. selectItem("Item 4");
  41. Assert.assertEquals("1. Selected: [Item 4]", getLogRow(0));
  42. selectItem("Item 2");
  43. Assert.assertEquals("3. Selected: [Item 2]", getLogRow(0));
  44. addItemsToSelection("Item 4");
  45. Assert.assertEquals("4. Selected: [Item 2, Item 4]", getLogRow(0));
  46. addItemsToSelection("Item 10", "Item 0", "Item 9"); // will cause 3
  47. // events
  48. Assert.assertEquals(
  49. "7. Selected: [Item 2, Item 4, Item 10, Item 0, Item 9]",
  50. getLogRow(0));
  51. removeItemsFromSelection("Item 0", "Item 2", "Item 9"); // will cause 3
  52. // events
  53. Assert.assertEquals("10. Selected: [Item 4, Item 10]", getLogRow(0));
  54. }
  55. @Test
  56. public void disabled_clickToSelect() {
  57. selectMenuPath("Component", "State", "Enabled");
  58. List<WebElement> select = getListSelect()
  59. .findElements(By.tagName("select"));
  60. Assert.assertEquals(1, select.size());
  61. Assert.assertNotNull(select.get(0).getAttribute("disabled"));
  62. selectMenuPath("Component", "Listeners", "Selection listener");
  63. String lastLogRow = getLogRow(0);
  64. selectItem("Item 4");
  65. Assert.assertEquals(lastLogRow, getLogRow(0));
  66. assertNothingSelected();
  67. addItemsToSelection("Item 2");
  68. Assert.assertEquals(lastLogRow, getLogRow(0));
  69. assertNothingSelected();
  70. removeItemsFromSelection("Item 4");
  71. Assert.assertEquals(lastLogRow, getLogRow(0));
  72. assertNothingSelected();
  73. }
  74. @Test
  75. public void readOnly_clickToSelect() {
  76. selectMenuPath("Component", "Listeners", "Selection listener");
  77. selectMenuPath("Component", "State", "Readonly");
  78. List<WebElement> select = getListSelect()
  79. .findElements(By.tagName("select"));
  80. Assert.assertEquals(1, select.size());
  81. Assert.assertNotNull(select.get(0).getAttribute("disabled"));
  82. String lastLogRow = getLogRow(0);
  83. selectItem("Item 4");
  84. Assert.assertEquals(lastLogRow, getLogRow(0));
  85. assertNothingSelected();
  86. }
  87. @Test(expected = ReadOnlyException.class)
  88. public void readOnly_selectByText() {
  89. selectMenuPath("Component", "Listeners", "Selection listener");
  90. selectMenuPath("Component", "State", "Readonly");
  91. List<WebElement> select = getListSelect()
  92. .findElements(By.tagName("select"));
  93. Assert.assertEquals(1, select.size());
  94. Assert.assertNotNull(select.get(0).getAttribute("disabled"));
  95. addItemsToSelection("Item 2");
  96. }
  97. @Test(expected = ReadOnlyException.class)
  98. public void readOnly_deselectByText() {
  99. selectMenuPath("Component", "Listeners", "Selection listener");
  100. selectItem("Item 4");
  101. selectMenuPath("Component", "State", "Readonly");
  102. List<WebElement> select = getListSelect()
  103. .findElements(By.tagName("select"));
  104. Assert.assertEquals(1, select.size());
  105. Assert.assertNotNull(select.get(0).getAttribute("disabled"));
  106. removeItemsFromSelection("Item 4");
  107. }
  108. @Test
  109. public void clickToSelect_reenable() {
  110. selectMenuPath("Component", "State", "Enabled");
  111. selectMenuPath("Component", "Listeners", "Selection listener");
  112. selectItem("Item 4");
  113. assertNothingSelected();
  114. selectMenuPath("Component", "State", "Enabled");
  115. selectItem("Item 5");
  116. Assert.assertEquals("3. Selected: [Item 5]", getLogRow(0));
  117. selectItem("Item 1");
  118. Assert.assertEquals("5. Selected: [Item 1]", getLogRow(0));
  119. addItemsToSelection("Item 2");
  120. Assert.assertEquals("6. Selected: [Item 1, Item 2]", getLogRow(0));
  121. removeItemsFromSelection("Item 1");
  122. Assert.assertEquals("7. Selected: [Item 2]", getLogRow(0));
  123. }
  124. @Test
  125. public void clickToSelect_notReadOnly() {
  126. selectMenuPath("Component", "State", "Readonly");
  127. selectMenuPath("Component", "Listeners", "Selection listener");
  128. selectItem("Item 4");
  129. assertNothingSelected();
  130. selectMenuPath("Component", "State", "Readonly");
  131. selectItem("Item 5");
  132. Assert.assertEquals("3. Selected: [Item 5]", getLogRow(0));
  133. selectItem("Item 1");
  134. Assert.assertEquals("5. Selected: [Item 1]", getLogRow(0));
  135. addItemsToSelection("Item 2");
  136. Assert.assertEquals("6. Selected: [Item 1, Item 2]", getLogRow(0));
  137. removeItemsFromSelection("Item 1");
  138. Assert.assertEquals("7. Selected: [Item 2]", getLogRow(0));
  139. }
  140. @Test
  141. public void itemCaptionProvider() {
  142. selectMenuPath("Component", "Item Generator", "Item Caption Generator",
  143. "Custom Caption Generator");
  144. assertItems(20, " Caption");
  145. }
  146. @Test
  147. public void selectProgramatically() {
  148. selectMenuPath("Component", "Listeners", "Selection listener");
  149. selectMenuPath("Component", "Selection", "Toggle Item 5");
  150. Assert.assertEquals("2. Selected: [Item 5]", getLogRow(0));
  151. assertSelected("Item 5");
  152. selectMenuPath("Component", "Selection", "Toggle Item 1");
  153. // Selection order (most recently selected is last)
  154. Assert.assertEquals("4. Selected: [Item 5, Item 1]", getLogRow(0));
  155. // DOM order
  156. assertSelected("Item 1", "Item 5");
  157. selectMenuPath("Component", "Selection", "Toggle Item 5");
  158. Assert.assertEquals("6. Selected: [Item 1]", getLogRow(0));
  159. assertSelected("Item 1");
  160. }
  161. private List<String> getSelectedValues() {
  162. Select select = new Select(
  163. getListSelect().findElement(By.tagName("select")));
  164. return select.getAllSelectedOptions().stream().map(e -> e.getText())
  165. .collect(Collectors.toList());
  166. }
  167. private void assertSelected(String... expectedSelection) {
  168. Assert.assertEquals(Arrays.asList(expectedSelection),
  169. getSelectedValues());
  170. }
  171. @Override
  172. protected Class<?> getUIClass() {
  173. return ListSelectTestUI.class;
  174. }
  175. protected ListSelectElement getListSelect() {
  176. return $(ListSelectElement.class).first();
  177. }
  178. protected void selectItem(String text) {
  179. // phantomjs1 seems to be adding to selection when clicked items, thus
  180. // need to deselect all clicking, which makes this test kind of
  181. // nothing...
  182. Select select = new Select(
  183. getListSelect().findElement(By.tagName("select")));
  184. select.deselectAll();
  185. Optional<WebElement> first = select.getOptions().stream()
  186. .filter(element -> text.equals(element.getText())).findFirst();
  187. if (first.isPresent()) {
  188. first.get().click();
  189. } else {
  190. Assert.fail("No element present with text " + text);
  191. }
  192. }
  193. protected void addItemsToSelection(String... items) {
  194. // acts as multi selection, no need to press modifier key
  195. Stream.of(items).forEach(text -> getListSelect().selectByText(text));
  196. }
  197. protected void removeItemsFromSelection(String... items) {
  198. Stream.of(items).forEach(text -> getListSelect().deselectByText(text));
  199. }
  200. protected void assertItems(int count) {
  201. assertItems(count, "");
  202. }
  203. private void assertNothingSelected() {
  204. Assert.assertEquals(0, getSelectedValues().size());
  205. }
  206. protected void assertItems(int count, String suffix) {
  207. int i = 0;
  208. for (String text : getListSelect().getOptions()) {
  209. assertEquals("Item " + i + suffix, text);
  210. i++;
  211. }
  212. assertEquals("Number of items", count, i);
  213. }
  214. protected void assertItemSuffices(int count) {
  215. int i = 0;
  216. for (String text : getListSelect().getOptions()) {
  217. assertTrue(text.endsWith("Item " + i));
  218. i++;
  219. }
  220. assertEquals("Number of items", count, i);
  221. }
  222. }