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.

AbstractSingleSelectionTest.java 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.vaadin.tests.components.abstractsingleselect;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertNull;
  4. import static org.junit.Assert.assertTrue;
  5. import static org.junit.Assert.fail;
  6. import java.util.Collection;
  7. import java.util.LinkedHashMap;
  8. import java.util.Map;
  9. import org.junit.Before;
  10. import org.junit.Test;
  11. import org.junit.runner.RunWith;
  12. import org.junit.runners.Parameterized.Parameters;
  13. import org.openqa.selenium.NoSuchElementException;
  14. import com.vaadin.testbench.elements.AbstractSingleSelectElement;
  15. import com.vaadin.testbench.elements.ButtonElement;
  16. import com.vaadin.testbench.elements.ComboBoxElement;
  17. import com.vaadin.testbench.elements.NativeSelectElement;
  18. import com.vaadin.testbench.elements.RadioButtonGroupElement;
  19. import com.vaadin.tests.tb3.ParameterizedTB3Runner;
  20. import com.vaadin.tests.tb3.SingleBrowserTest;
  21. @RunWith(ParameterizedTB3Runner.class)
  22. public class AbstractSingleSelectionTest extends SingleBrowserTest {
  23. private static final Map<String, Class<? extends AbstractSingleSelectElement>> elementClasses = new LinkedHashMap<>();
  24. @Parameters
  25. public static Collection<String> getElementClassNames() {
  26. if (elementClasses.isEmpty()) {
  27. elementClasses.put("RadioButtonGroup",
  28. RadioButtonGroupElement.class);
  29. elementClasses.put("NativeSelect", NativeSelectElement.class);
  30. elementClasses.put("ComboBox", ComboBoxElement.class);
  31. }
  32. return elementClasses.keySet();
  33. }
  34. private String elementClassName;
  35. public void setElementClassName(String elementClassName) {
  36. this.elementClassName = elementClassName;
  37. }
  38. @Before
  39. public void before() {
  40. openTestURL();
  41. }
  42. @Test
  43. public void testSelectNull() {
  44. $(NativeSelectElement.class).first().selectByText(elementClassName);
  45. assertInitial();
  46. $(ButtonElement.class).caption("Deselect").first().click();
  47. AbstractSingleSelectElement selectElement = getSelectElement();
  48. // TODO: TB API behavior should be unified.
  49. if (selectElement instanceof RadioButtonGroupElement) {
  50. assertNull("No value should be selected", selectElement.getValue());
  51. } else if (selectElement instanceof ComboBoxElement) {
  52. assertTrue("No value should be selected",
  53. selectElement.getValue().isEmpty());
  54. } else {
  55. // NativeSelectElement throws if no value is selected.
  56. try {
  57. selectElement.getValue();
  58. fail("No value should be selected");
  59. } catch (NoSuchElementException e) {
  60. // All is fine.
  61. }
  62. }
  63. }
  64. @Test
  65. public void testSelectOnClientAndRefresh() {
  66. $(NativeSelectElement.class).first().selectByText(elementClassName);
  67. assertInitial();
  68. AbstractSingleSelectElement select = getSelectElement();
  69. select.selectByText("Baz");
  70. assertEquals("Value should change", "Baz", select.getValue());
  71. $(ButtonElement.class).caption("Refresh").first().click();
  72. assertEquals("Value should stay the same through refreshAll", "Baz",
  73. select.getValue());
  74. }
  75. @Test
  76. public void testSelectOnClientAndResetValueOnServer() {
  77. $(NativeSelectElement.class).first().selectByText(elementClassName);
  78. assertInitial();
  79. AbstractSingleSelectElement select = getSelectElement();
  80. select.selectByText("Baz");
  81. assertEquals("Value should change", "Baz", select.getValue());
  82. $(ButtonElement.class).caption("Select Bar").first().click();
  83. assertEquals("Original value should be selected again", "Bar",
  84. select.getValue());
  85. }
  86. @Test
  87. public void testSelectOnClientAndResetValueOnServerInListener() {
  88. $(NativeSelectElement.class).first().selectByText(elementClassName);
  89. assertInitial();
  90. AbstractSingleSelectElement rbg = getSelectElement();
  91. rbg.selectByText("Reset");
  92. // Selecting "Reset" selects "Bar" on server. Value was initially "Bar"
  93. assertEquals("Original value should be selected again", "Bar",
  94. rbg.getValue());
  95. }
  96. private void assertInitial() {
  97. assertEquals("Initial state unexpected", "Bar",
  98. getSelectElement().getValue());
  99. }
  100. private AbstractSingleSelectElement getSelectElement() {
  101. return $(elementClasses.get(elementClassName)).id("testComponent");
  102. }
  103. }