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.

GridComponentsVisibilityTest.java 3.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.vaadin.tests.components.grid;
  2. import java.util.concurrent.ThreadLocalRandom;
  3. import java.util.function.Function;
  4. import java.util.logging.Level;
  5. import java.util.stream.IntStream;
  6. import com.vaadin.testbench.By;
  7. import com.vaadin.testbench.elements.GridElement;
  8. import com.vaadin.testbench.elements.TextFieldElement;
  9. import com.vaadin.tests.tb3.MultiBrowserTest;
  10. import org.junit.Test;
  11. import static org.junit.Assert.assertFalse;
  12. import static org.junit.Assert.assertTrue;
  13. public class GridComponentsVisibilityTest extends MultiBrowserTest {
  14. @Test
  15. public void changingVisibilityOfComponentInFirstRowShouldNotThrowClientSideExceptions() {
  16. testHideComponent(grid -> 0);
  17. }
  18. @Test
  19. public void changingVisibilityOfComponentShouldNotThrowClientSideExceptions() {
  20. testHideComponent(grid -> ThreadLocalRandom.current().nextInt(1,
  21. (int) grid.getRowCount() - 1));
  22. }
  23. @Test
  24. public void changingVisibilityOfComponentInLastRowShouldNotThrowClientSideExceptions() {
  25. testHideComponent(grid -> (int) grid.getRowCount() - 1);
  26. }
  27. private void testHideComponent(
  28. Function<GridElement, Integer> rowUnderTestSupplier) {
  29. openTestURL("debug");
  30. GridElement grid = $(GridElement.class).first();
  31. int rowUnderTest = rowUnderTestSupplier.apply(grid);
  32. assertTrue("Text field should be visible", grid.getCell(rowUnderTest, 1)
  33. .isElementPresent(TextFieldElement.class));
  34. assertOtherConnectorsArePresent(grid, rowUnderTest);
  35. clearDebugMessages();
  36. clickVisibilityToggleButton(grid, rowUnderTest);
  37. assertNotClientSideErrors();
  38. assertOnlyTextFieldOnTestedRowIsNotPresent(grid, rowUnderTest);
  39. clearDebugMessages();
  40. clickVisibilityToggleButton(grid, rowUnderTest);
  41. assertNotClientSideErrors();
  42. assertAllTextFieldsArePresent(grid, rowUnderTest);
  43. clearDebugMessages();
  44. clickVisibilityToggleButton(grid, rowUnderTest);
  45. assertNotClientSideErrors();
  46. assertOnlyTextFieldOnTestedRowIsNotPresent(grid, rowUnderTest);
  47. clickVisibilityToggleButton(grid, rowUnderTest);
  48. }
  49. private void assertOnlyTextFieldOnTestedRowIsNotPresent(GridElement grid,
  50. int rowUnderTest) {
  51. assertFalse("Text field should not be visible",
  52. grid.getCell(rowUnderTest, 1)
  53. .isElementPresent(TextFieldElement.class));
  54. assertOtherConnectorsArePresent(grid, rowUnderTest);
  55. }
  56. private void assertAllTextFieldsArePresent(GridElement grid,
  57. int rowUnderTest) {
  58. assertTrue("Text field should be visible", grid.getCell(rowUnderTest, 1)
  59. .isElementPresent(TextFieldElement.class));
  60. assertOtherConnectorsArePresent(grid, rowUnderTest);
  61. }
  62. private void assertNotClientSideErrors() {
  63. assertNoErrorNotifications();
  64. // Should not log "Widget is still attached to the DOM ..." error
  65. // message
  66. assertNoDebugMessage(Level.SEVERE);
  67. }
  68. private void clickVisibilityToggleButton(GridElement grid,
  69. int rowUnderTest) {
  70. grid.getRow(rowUnderTest).getCell(2)
  71. .findElement(By.className("v-button")).click();
  72. }
  73. private void assertOtherConnectorsArePresent(GridElement grid,
  74. int rowUnderTest) {
  75. IntStream.range(1, (int) grid.getRowCount())
  76. .filter(row -> row != rowUnderTest)
  77. .forEach(row -> assertTrue("Text field should be visible",
  78. grid.getCell(row, 1)
  79. .isElementPresent(TextFieldElement.class)));
  80. }
  81. }