Przeglądaj źródła

Fix VComboBox internal state cleanup (#10693)

Fixes vaadin/testbench#1009
tags/8.4.0.alpha1
Anna Koskinen 6 lat temu
rodzic
commit
0f052d4fcb

+ 3
- 2
client/src/main/java/com/vaadin/client/ui/VComboBox.java Wyświetl plik

return $entry(function(e) { return $entry(function(e) {
var deltaX = e.deltaX ? e.deltaX : -0.5*e.wheelDeltaX; var deltaX = e.deltaX ? e.deltaX : -0.5*e.wheelDeltaX;
var deltaY = e.deltaY ? e.deltaY : -0.5*e.wheelDeltaY; var deltaY = e.deltaY ? e.deltaY : -0.5*e.wheelDeltaY;
// IE8 has only delta y // IE8 has only delta y
if (isNaN(deltaY)) { if (isNaN(deltaY)) {
deltaY = -0.5*e.wheelDelta; deltaY = -0.5*e.wheelDelta;
} }
@com.vaadin.client.ui.VComboBox.JsniUtil::moveScrollFromEvent(*)(widget, deltaX, deltaY, e, e.deltaMode); @com.vaadin.client.ui.VComboBox.JsniUtil::moveScrollFromEvent(*)(widget, deltaX, deltaY, e, e.deltaMode);
}); });
}-*/; }-*/;
*/ */
private void cancelPendingPostFiltering() { private void cancelPendingPostFiltering() {
pendingUserInput = null; pendingUserInput = null;
waitingForFilteringResponse = false;
} }


/** /**

+ 5
- 0
client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java Wyświetl plik

getWidget().selectedOptionKey = null; getWidget().selectedOptionKey = null;
getWidget().currentSuggestion = null; getWidget().currentSuggestion = null;
} }
if (isNewItemStillPending()
&& pendingNewItemValue == getState().selectedItemCaption) {
// no automated selection handling required
clearNewItemHandling();
}
getDataReceivedHandler().updateSelectionFromServer( getDataReceivedHandler().updateSelectionFromServer(
getState().selectedItemKey, getState().selectedItemCaption, getState().selectedItemKey, getState().selectedItemCaption,
getState().selectedItemIcon); getState().selectedItemIcon);

+ 42
- 0
uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxTestBenchPerformance.java Wyświetl plik

package com.vaadin.tests.components.combobox;

import java.util.ArrayList;
import java.util.List;

import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.ComboBox;

@Widgetset("com.vaadin.DefaultWidgetSet")
public class ComboBoxTestBenchPerformance extends AbstractTestUI {

@SuppressWarnings("deprecation")
@Override
protected void setup(VaadinRequest request) {
List<String> items = new ArrayList<>();
for (int i = 0; i < 20; i++) {
items.add(i + "");
}
ComboBox<String> combo = new ComboBox<>("ComboBox with NewItemHandler");
combo.setItems(items);
combo.setEmptySelectionAllowed(false);
combo.setNewItemHandler(inputString -> {
items.add(inputString);
combo.setItems(items);
combo.setSelectedItem(inputString);
});
combo.setSelectedItem(items.iterator().next());
addComponent(combo);
}

@Override
protected String getTestDescription() {
return "Selecting values through TestBench shouldn't take minutes.";
}

@Override
protected Integer getTicketNumber() {
return 10284;
}
}

+ 2
- 2
uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxSelectingWithNewItemsAllowedTest.java Wyświetl plik

} }


@Test @Test
public void noSelectionAfterMouseOut() {
public void selectionOnMouseOut() {
typeInputAndHitEnter("a20"); typeInputAndHitEnter("a20");
comboBoxElement.sendKeys(Keys.ARROW_DOWN, Keys.ARROW_DOWN); comboBoxElement.sendKeys(Keys.ARROW_DOWN, Keys.ARROW_DOWN);


findElement(By.className("v-app")).click(); findElement(By.className("v-app")).click();


assertInitialItemCount(); assertInitialItemCount();
assertThatSelectedValueIs("a20");
assertThatSelectedValueIs("", "null");
} }


@Test @Test

+ 55
- 0
uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxTestBenchPerformanceTest.java Wyświetl plik

package com.vaadin.tests.components.combobox;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.number.IsCloseTo.closeTo;

import org.junit.Test;
import org.openqa.selenium.Keys;

import com.vaadin.testbench.elements.ComboBoxElement;
import com.vaadin.tests.tb3.SingleBrowserTest;

public class ComboBoxTestBenchPerformanceTest extends SingleBrowserTest {

/**
* TestBench timeout is 20s, require 15s to make sure cluster load won't
* affect the result badly.
*/
private static final double TIME_LIMIT = 15000d;

@Test
public void testSelectionPerformance() throws Exception {
openTestURL();

long before = System.currentTimeMillis();
setComboBoxValue("abc123"); // new
long after = System.currentTimeMillis();
assertThat((double) after - before, closeTo(0d, TIME_LIMIT));

before = System.currentTimeMillis();
setComboBoxValue("11"); // existing (2nd page)
after = System.currentTimeMillis();
assertThat((double) after - before, closeTo(0d, TIME_LIMIT));

before = System.currentTimeMillis();
setComboBoxValue("abc123"); // previously added (3rd page)
after = System.currentTimeMillis();
assertThat((double) after - before, closeTo(0d, TIME_LIMIT));
}

public void setComboBoxValue(final String value) {
ComboBoxElement combobox = $(ComboBoxElement.class).first();
if (combobox.getPopupSuggestions().contains(value)) {
// Select existing item
combobox.selectByText(value);
} else {
// Enter new item
combobox.clear();
combobox.sendKeys(value);
combobox.sendKeys(Keys.ENTER);
}

// Make sure Vaadin is ready before leaving the method
testBench().waitForVaadin();
}
}

Ładowanie…
Anuluj
Zapisz