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.

GridEditorTabSkipsNonEditableCellsTest.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.vaadin.tests.components.grid;
  2. import com.vaadin.testbench.elements.ButtonElement;
  3. import com.vaadin.testbench.elements.GridElement;
  4. import com.vaadin.testbench.elements.TextFieldElement;
  5. import com.vaadin.testbench.parallel.TestCategory;
  6. import com.vaadin.tests.tb3.MultiBrowserTest;
  7. import org.junit.Assert;
  8. import org.junit.Test;
  9. import org.openqa.selenium.Keys;
  10. import org.openqa.selenium.WebElement;
  11. import org.openqa.selenium.interactions.Actions;
  12. import static org.junit.Assert.fail;
  13. /**
  14. * Makes sure that pressing Tab when the Grid is in edit mode will make focus
  15. * skip cells that are not editable.
  16. */
  17. @TestCategory("grid")
  18. public class GridEditorTabSkipsNonEditableCellsTest extends MultiBrowserTest {
  19. /**
  20. * The grid with 5 columns. First, third and fifth columns are not editable.
  21. */
  22. private GridElement grid;
  23. @Override
  24. public void setup() throws Exception {
  25. super.setup();
  26. openTestURL();
  27. grid = $(GridElement.class).first();
  28. }
  29. @Test
  30. public void tabSkipsOverNotEditableFieldBuffered() {
  31. setBuffered(true);
  32. openEditor(0, 1);
  33. pressTab();
  34. Assert.assertEquals("col3_0", getFocusedEditorCellContents());
  35. }
  36. @Test
  37. public void tabDoesNothingIfAlreadyOnLastEditableFieldBuffered() {
  38. setBuffered(true);
  39. openEditor(0, 3);
  40. pressTab();
  41. Assert.assertEquals("col3_0", getFocusedEditorCellContents());
  42. }
  43. @Test
  44. public void tabSkipsOverNotEditableFieldUnbuffered() {
  45. setBuffered(false);
  46. openEditor(0, 1);
  47. pressTab();
  48. Assert.assertEquals("col3_0", getFocusedEditorCellContents());
  49. }
  50. @Test
  51. public void tabMovesToNextRowFirstEditableFieldUnbuffered() {
  52. setBuffered(false);
  53. openEditor(0, 3);
  54. pressTab();
  55. Assert.assertEquals("col1_1", getFocusedEditorCellContents());
  56. }
  57. @Test
  58. public void shiftTabSkipsOverNotEditableFieldBuffered() {
  59. setBuffered(true);
  60. openEditor(0, 3);
  61. pressShiftTab();
  62. Assert.assertEquals("col1_0", getFocusedEditorCellContents());
  63. }
  64. @Test
  65. public void shiftTabDoesNothingIfAlreadyOnLastEditableFieldBuffered() {
  66. setBuffered(true);
  67. openEditor(0, 1);
  68. pressShiftTab();
  69. Assert.assertEquals("col1_0", getFocusedEditorCellContents());
  70. }
  71. @Test
  72. public void shiftTabSkipsOverNotEditableFieldUnbuffered() {
  73. setBuffered(false);
  74. openEditor(0, 3);
  75. pressShiftTab();
  76. Assert.assertEquals("col1_0", getFocusedEditorCellContents());
  77. }
  78. @Test
  79. public void shiftTabMovesToNextRowFirstEditableFieldUnbuffered() {
  80. setBuffered(false);
  81. openEditor(1, 1);
  82. pressShiftTab();
  83. Assert.assertEquals("col3_0", getFocusedEditorCellContents());
  84. }
  85. private void openEditor(int rowIndex, int colIndex) {
  86. grid.getCell(rowIndex, colIndex).doubleClick();
  87. }
  88. private void pressTab() {
  89. new Actions(getDriver()).sendKeys(Keys.TAB).perform();
  90. }
  91. private void pressShiftTab() {
  92. new Actions(getDriver()).keyDown(Keys.SHIFT).sendKeys(Keys.TAB)
  93. .keyUp(Keys.SHIFT).perform();
  94. }
  95. private void setBuffered(boolean buffered) {
  96. $(ButtonElement.class).caption(buffered ? "Set Editor Buffered Mode On"
  97. : "Set Editor Buffered Mode Off").first().click();
  98. }
  99. private String getFocusedEditorCellContents() {
  100. final GridElement.GridEditorElement editor = grid.getEditor();
  101. final WebElement focusedElement = getFocusedElement();
  102. for (int i = 0; i < 5; i++) {
  103. if (editor.isEditable(i)
  104. && editor.getField(i).equals(focusedElement)) {
  105. return (editor.getField(i).wrap(TextFieldElement.class))
  106. .getValue();
  107. }
  108. }
  109. fail("Currently focused element is not a cell editor: "
  110. + focusedElement);
  111. return null;
  112. }
  113. }