/* * JBoss, Home of Professional Open Source * Copyright 2010-2016, Red Hat, Inc. and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.richfaces.tests.metamer.ftest.richAutocomplete; import static org.jboss.arquillian.graphene.Graphene.guardAjax; import static org.jboss.arquillian.graphene.Graphene.guardNoRequest; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.util.List; import javax.faces.event.PhaseId; import org.jboss.arquillian.graphene.Graphene; import org.jboss.arquillian.graphene.page.Page; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Action; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.support.FindBy; import org.richfaces.fragment.autocomplete.Autocomplete; import org.richfaces.fragment.autocomplete.SelectOrConfirm; import org.richfaces.fragment.common.Event; import org.richfaces.fragment.common.Utils; import org.richfaces.fragment.common.picker.ChoicePickerHelper; import org.richfaces.tests.metamer.ftest.BasicAttributes; import org.richfaces.tests.metamer.ftest.annotations.IssueTracking; import org.richfaces.tests.metamer.ftest.extension.attributes.coverage.annotations.CoversAttributes; import org.richfaces.tests.metamer.ftest.extension.configurator.templates.annotation.Templates; import org.richfaces.tests.metamer.ftest.webdriver.MetamerPage.WaitRequestType; import org.testng.Assert; import org.testng.annotations.Test; /** * Many tests set mode attribute to 'client'. This is to stabilize tests since with WebDriver I had some issues concerning * timeouts when selecting n-th item from list which renders based on ajax request. * * @author <a href="mailto:jpapouse@redhat.com">Jan Papousek</a> * @author <a href="https://community.jboss.org/people/ppitonak">Pavol Pitonak</a> * @author <a href="mailto:manovotn@redhat.com">Matej Novotny</a> */ public class TestAutocompleteAttributes extends AbstractAutocompleteTest { private static final String FIRST_LISTENER_MSG_FORMAT = "1 value changed: %s -> %s"; private static final String SECOND_LISTENER_MSG = "2 value changed"; private static final String THIRD_LISTENER_MSG = "action listener invoked"; @FindBy(css = "span[class$=btn-arrow]") private WebElement button; @Page private SimplePage page; @FindBy(css = ".rf-au-lst-dcrtn") private WebElement popup; final Action typeHToAutocompleteInputAction = new Action() { @Override public void perform() { typeHIntoAutocompleteInputGuarded(); } }; @Override public String getComponentTestPagePath() { return "richAutocomplete/autocomplete.xhtml"; } private Autocomplete selectHawaii() { return Graphene.guardAjax(typeHIntoAutocompleteInputGuarded()).select("Hawaii"); } @Test(enabled = false)// tested in TestAutocomplete public void testAutofill() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); autocomplete.type("haw"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).sendKeys(Keys.ARROW_DOWN).build().perform(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "haw"); autocomplete.clear(); autocompleteAttributes.set(AutocompleteAttributes.autofill, Boolean.TRUE); autocomplete.type("haw"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).moveToElement(autocomplete.advanced().getSuggestionsElements().get(0)).build().perform(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "hawaii"); } @Test @IssueTracking("https://issues.jboss.org/browse/RF-14122") @CoversAttributes("autofill") public void testAutofillWorksCaseInsensitively() { autocompleteAttributes.set(AutocompleteAttributes.autofill, true); // set @selectFirst=true so we do not have to focus on suggestions autocompleteAttributes.set(AutocompleteAttributes.selectFirst, true); autocomplete.clear(); // focus mouse out of the autocomplete suggestions blur(WaitRequestType.NONE); SelectOrConfirm typed; typed = Graphene.guardAjax(autocomplete).type("A"); assertEquals(autocomplete.advanced().getInput().getStringValue(), "Alabama"); Graphene.guardAjax(typed).confirm(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "Alabama"); checkOutput("Alabama"); autocomplete.clear(); typed = Graphene.guardAjax(autocomplete).type("Ar"); assertEquals(autocomplete.advanced().getInput().getStringValue(), "Arizona"); Graphene.guardAjax(typed).confirm(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "Arizona"); checkOutput("Arizona"); autocomplete.clear(); typed = Graphene.guardAjax(autocomplete).type("aLAs"); assertEquals(autocomplete.advanced().getInput().getStringValue(), "aLAska"); Graphene.guardAjax(typed).confirm(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "Alaska"); checkOutput("Alaska"); autocomplete.clear(); typed = Graphene.guardAjax(autocomplete).type("MIC"); assertEquals(autocomplete.advanced().getInput().getStringValue(), "MIChigan"); Graphene.guardAjax(typed).confirm(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "Michigan"); checkOutput("Michigan"); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("disabled") public void testDisabled() { // defaultly autocomplete is enabled selectHawaii(); checkOutput("Hawaii"); // disable autocompleteAttributes.set(AutocompleteAttributes.disabled, Boolean.TRUE); try { selectHawaii(); Assert.fail("The autocomplete should be disabled."); } catch (Exception e) { // OK exception should be thrown since typing is disabled } } @Test @CoversAttributes("immediate") public void testImmediate() { autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); autocompleteAttributes.set(AutocompleteAttributes.immediate, Boolean.TRUE); selectHawaii(); checkOutput("Hawaii"); try { page.assertListener(PhaseId.APPLY_REQUEST_VALUES, THIRD_LISTENER_MSG); } catch (RuntimeException e) { page.assertListener(PhaseId.APPLY_REQUEST_VALUES, SECOND_LISTENER_MSG); } blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("inputClass") @Templates(value = "plain") public void testInputClass() { testStyleClass(autocomplete.advanced().getInput().advanced().getInputElement(), BasicAttributes.inputClass); } @Test @CoversAttributes("layout") @IssueTracking("https://issues.jboss.org/browse/RF-12820") public void testLayout() { autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); autocompleteAttributes.set(AutocompleteAttributes.autofill, true); autocompleteAttributes.set(AutocompleteAttributes.selectFirst, true); String[] layouts = new String[] { "div", "list", "table" }; for (String layout : layouts) { autocompleteAttributes.set(AutocompleteAttributes.layout, layout); autocomplete.clear(); // move mouse out of the autocomplete suggestions blur(WaitRequestType.NONE); SelectOrConfirm typed = Graphene.guardAjax(autocomplete).type("m"); List<WebElement> suggestionsElements = autocomplete.advanced().getSuggestionsElements(); assertEquals(suggestionsElements.size(), 8); // check the first value from suggestions is set in input assertEquals(autocomplete.advanced().getInput().getStringValue(), "maine"); // move mouse over different suggestions and check autofilled value new Actions(driver).moveToElement(suggestionsElements.get(7)).perform(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "montana"); new Actions(driver).moveToElement(suggestionsElements.get(3)).perform(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "michigan"); new Actions(driver).moveToElement(suggestionsElements.get(0)).perform(); assertEquals(autocomplete.advanced().getInput().getStringValue(), "maine"); // select last option Graphene.guardAjax(typed).select(7); checkOutput("Montana"); } blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("minChars") public void testMinChars() { attsSetter() .setAttribute(AutocompleteAttributes.mode).toValue("ajax") .setAttribute(AutocompleteAttributes.minChars).toValue(3) .asSingleAction().perform(); // no request is sent until min number of chars is provided guardNoRequest(autocomplete.type("ha")); autocomplete.clear(); guardAjax(autocomplete.type("haw")); autocomplete.advanced().waitForSuggestionsToBeVisible(); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("mode") public void testMode() { // default state, should be ajax autocompleteAttributes.set(AutocompleteAttributes.mode, "null"); guardAjax(autocomplete.type("a")); autocomplete.clear(); // set ajax mode autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); typeHIntoAutocompleteInputGuarded(); autocomplete.clear(); // set cached ajax mode, triggering the same query twice should not trigger ajax request autocompleteAttributes.set(AutocompleteAttributes.mode, "cachedAjax"); guardAjax(autocomplete.type("w")); autocomplete.clear(); guardNoRequest(autocomplete.type("w")); autocomplete.clear(); // set client mode autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); guardNoRequest(autocomplete.type("f")); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onbeforedomupdate") public void testOnbeforedomupdate() { autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onbeforedomupdate, typeHToAutocompleteInputAction); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onbegin") @IssueTracking("https://issues.jboss.org/browse/RF-13537") public void testOnbegin() { autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onbegin, typeHToAutocompleteInputAction); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onblur") public void testOnblur() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onblur, new Action() { @Override public void perform() { autocomplete.advanced().getInput().advanced().focus(); blur(WaitRequestType.NONE); } }); } @Test @CoversAttributes("onchange") public void testOnchange() { autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onchange, new Action() { @Override public void perform() { selectHawaii(); blur(WaitRequestType.XHR); } }); } @Test @CoversAttributes("onclick") @Templates(value = "plain") public void testOnclick() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onclick, new Actions(driver).click(autocomplete.advanced() .getInput().advanced().getInputElement()).build()); } @Test @CoversAttributes("oncomplete") public void testOncomplete() { // requires ajax mode since it reacts on DOM changes autocompleteAttributes.set(AutocompleteAttributes.mode, "ajax"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.oncomplete, typeHToAutocompleteInputAction); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("ondblclick") @Templates(value = "plain") public void testOndblclick() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.ondblclick, new Actions(driver).doubleClick(autocomplete .advanced().getInput().advanced().getInputElement()).build()); } @Test @CoversAttributes("onfocus") public void testOnfocus() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onfocus, new Action() { @Override public void perform() { autocomplete.advanced().getInput().advanced().focus(); } }); } @Test @CoversAttributes("onkeydown") @Templates(value = "plain") public void testOnkeydown() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onkeydown, new Actions(driver).keyDown(autocomplete .advanced().getInput().advanced().getInputElement(), Keys.CONTROL).build()); new Actions(driver).keyUp(Keys.CONTROL).build().perform(); } @Test @CoversAttributes("onkeypress") @Templates(value = "plain") public void testOnkeypress() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onkeypress, typeHToAutocompleteInputAction); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onkeyup") @Templates(value = "plain") public void testOnkeyup() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onkeyup, new Actions(driver).keyDown(autocomplete .advanced().getInput().advanced().getInputElement(), Keys.CONTROL).keyUp(Keys.CONTROL).build()); } @Test @CoversAttributes("onlistclick") @Templates(value = "plain") public void testOnlistclick() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistclick, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).click(autocomplete.advanced().getSuggestionsElements().get(0)).build().perform(); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistdblclick") @Templates(value = "plain") public void testOnlistdblclick() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistdblclick, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); fireEvent(autocomplete.advanced().getSuggestionsElements().get(0), Event.DBLCLICK); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistkeydown") @Templates(value = "plain") public void testOnlistkeydown() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistkeydown, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); fireEvent(autocomplete.advanced().getSuggestionsElements().get(0), Event.KEYDOWN); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistkeypress") @Templates(value = "plain") public void testOnlistkeypress() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistkeypress, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); fireEvent(autocomplete.advanced().getSuggestionsElements().get(0), Event.KEYPRESS); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistkeyup") @Templates(value = "plain") public void testOnlistkeyup() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistkeyup, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); fireEvent(autocomplete.advanced().getSuggestionsElements().get(0), Event.KEYUP); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistmousedown") @Templates(value = "plain") public void testOnlistmousedown() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistmousedown, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).clickAndHold(autocomplete.advanced().getSuggestionsElements().get(0)).build().perform(); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistmousemove") @Templates(value = "plain") public void testOnlistmousemove() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistmousemove, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).moveToElement(autocomplete.advanced().getSuggestionsElements().get(0)) .moveToElement(page.getOutput()).build().perform(); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistmouseout") @Templates(value = "plain") public void testOnlistmouseout() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistmouseout, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).moveToElement(autocomplete.advanced().getSuggestionsElements().get(0)) .moveToElement(page.getOutput()).build().perform(); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistmouseover") @Templates(value = "plain") public void testOnlistmouseover() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistmouseover, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).moveToElement(autocomplete.advanced().getSuggestionsElements().get(0)).build().perform(); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onlistmouseup") @Templates(value = "plain") public void testOnlistmouseup() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onlistmouseup, new Action() { @Override public void perform() { autocomplete.type("h"); autocomplete.advanced().waitForSuggestionsToBeVisible(); new Actions(driver).click(autocomplete.advanced().getSuggestionsElements().get(0)).build().perform(); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("onmousedown") @Templates(value = "plain") public void testOnmousedown() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onmousedown, new Actions(driver).clickAndHold(page .getAutocompleteAsWebElement()).build()); } @Test @CoversAttributes("onmousemove") @Templates(value = "plain") public void testOnmousemove() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onmousemove, new Actions(driver).moveToElement(autocomplete .advanced().getRootElement()).build()); } @Test @CoversAttributes("onmouseout") @Templates(value = "plain") public void testOnmouseout() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onmouseout, new Actions(driver).moveToElement(page .getAutocompleteAsWebElement()).moveToElement(page.getOutput()).build()); } @Test @CoversAttributes("onmouseover") @Templates(value = "plain") public void testOnmouseover() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onmouseover, new Actions(driver).moveToElement(driver .findElement(By.cssSelector("span[id$=autocomplete]"))).build()); } @Test @CoversAttributes("onmouseup") @Templates(value = "plain") public void testOnmouseup() { testFireEvent(autocompleteAttributes, AutocompleteAttributes.onmouseup, new Actions(driver).clickAndHold(page .getAutocompleteAsWebElement()).release().build()); } @Test @CoversAttributes("onselectitem") public void testOnselectitem() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); testFireEvent(autocompleteAttributes, AutocompleteAttributes.onselectitem, new Action() { @Override public void perform() { Graphene.guardAjax(autocomplete.type("h")).select(ChoicePickerHelper.byIndex().first()); } }); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("popupClass") @Templates(value = "plain") public void testPopupClass() { testStyleClass(popup, BasicAttributes.popupClass); } @Test @CoversAttributes("popupClass") @IssueTracking("https://issues.jboss.org/browse/RF-11079") @Templates(value = "plain") public void testPopupClassWidthInfluencesItemsWidth() { final int tolerance = 10; Graphene.guardAjax(autocomplete).type("a"); autocomplete.advanced().waitForSuggestionsToBeVisible().perform(); int width = Integer.parseInt(autocomplete.advanced().getSuggestionsElements().get(0).getCssValue("width").replaceAll("px", "")); assertEquals(width, 200, tolerance, "The default width of a suggestion item should be around 200 px."); autocompleteAttributes.set(AutocompleteAttributes.popupClass, "width500"); Graphene.guardAjax(autocomplete).type("a"); autocomplete.advanced().waitForSuggestionsToBeVisible().perform(); width = Integer.parseInt(autocomplete.advanced().getSuggestionsElements().get(0).getCssValue("width").replaceAll("px", "")); assertEquals(width, 500, tolerance, "The width of a suggestion item should be around 500 px."); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("rendered") @Templates(value = "plain") public void testRendered() { autocompleteAttributes.set(AutocompleteAttributes.rendered, Boolean.FALSE); assertNotVisible(autocomplete, "Autocomplete should not be rendered."); autocompleteAttributes.set(AutocompleteAttributes.rendered, Boolean.TRUE); assertVisible(autocomplete, "Autocomplete should be rendered."); } @Test(enabled = false)// tested in TestAutocomplete public void testSelectFirst() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); autocompleteAttributes.set(AutocompleteAttributes.selectFirst, Boolean.TRUE); autocomplete.type("wa"); autocomplete.advanced().waitForSuggestionsToBeVisible(); // via actions click enter, therefore confirm the selection of the first suggested item new Actions(driver).pause(1000).sendKeys(Keys.RETURN).build().perform(); checkOutput("Washington"); } @Test @CoversAttributes("selectedItemClass") @Templates(value = "plain") public void testSelectedItemClass() { String testedClass = "metamer-ftest-class"; autocompleteAttributes.set(AutocompleteAttributes.selectedItemClass, testedClass); typeHIntoAutocompleteInputGuarded(); autocomplete.advanced().waitForSuggestionsToBeVisible(); List<WebElement> suggestionsElements = autocomplete.advanced().getSuggestionsElements(); Utils.triggerJQ("mouseover", suggestionsElements.get(0)); assertTrue(suggestionsElements.get(0).getAttribute("class").contains(testedClass)); for (int i = 1; i < suggestionsElements.size(); i++) { assertFalse(suggestionsElements.get(i).getAttribute("class").contains(testedClass)); } blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("showButton") @Templates(value = "plain") public void testShowButton() { // defaultly button should not be present assertNotPresent(button, "In default state, button should not be present on page!"); // show button and assert autocompleteAttributes.set(AutocompleteAttributes.showButton, Boolean.TRUE); assertPresent(button, "Button should be present on page!"); // hide again and assert autocompleteAttributes.set(AutocompleteAttributes.showButton, Boolean.FALSE); assertNotPresent(button, "Button should not be present on the page!"); } @Test @CoversAttributes("status") @IssueTracking("https://issues.jboss.org/browse/RF-10966") public void testStatus() { testStatus(typeHToAutocompleteInputAction); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("style") @Templates(value = "plain") public void testStyle() { testStyle(autocomplete.advanced().getRootElement()); } @Test @CoversAttributes("styleClass") @Templates("plain") public void testStyleClass() { testStyleClass(autocomplete.advanced().getRootElement()); } @Test @CoversAttributes("style") @IssueTracking("https://issues.jboss.org/browse/RF-10782") @Templates(value = "plain") public void testStyleWidth() { setAttribute("style", "width: 700px"); assertEquals(autocomplete.advanced().getRootElement().getCssValue("width"), "700px"); } @Test @CoversAttributes("tabindex") @Templates(value = "plain") public void testTabindex() { testHTMLAttribute(autocomplete.advanced().getInput().advanced().getInputElement(), autocompleteAttributes, AutocompleteAttributes.tabindex, "100"); } @Test @CoversAttributes("title") @Templates(value = "plain") public void testTitle() { testTitle(autocomplete.advanced().getInput().advanced().getInputElement()); } @Test @CoversAttributes("tokens") public void testTokens() { autocompleteAttributes.set(AutocompleteAttributes.mode, "client"); // default token is ', ' Graphene.guardAjax(autocomplete.type("Hawaii, w")).select(ChoicePickerHelper.byIndex().first()); checkOutput("Hawaii, Washington"); // clear value autocompleteAttributes.set(AutocompleteAttributes.value, ""); // change token and assert then after writing it, it shows suggestions for new input autocompleteAttributes.set(AutocompleteAttributes.tokens, "- "); Graphene.guardAjax(autocomplete.type("Hawaii- w")).select(ChoicePickerHelper.byIndex().first()); checkOutput("Hawaii- Washington"); blur(WaitRequestType.XHR);// prevent ViewExpiredException } @Test @CoversAttributes("value") @Templates("plain") public void testValue() { autocompleteAttributes.set(AutocompleteAttributes.value, "Johny Derp speaking!"); checkOutput("Johny Derp speaking!"); autocompleteAttributes.set(AutocompleteAttributes.value, "Area 51"); checkOutput("Area 51"); } @Test @CoversAttributes("valueChangeListener") public void testValueChangeListener() { selectHawaii(); checkOutput("Hawaii"); page.assertListener(PhaseId.PROCESS_VALIDATIONS, String.format(FIRST_LISTENER_MSG_FORMAT, "null", "Hawaii")); page.assertListener(PhaseId.INVOKE_APPLICATION, THIRD_LISTENER_MSG); blur(WaitRequestType.XHR); page.assertListener(PhaseId.INVOKE_APPLICATION, SECOND_LISTENER_MSG); autocomplete.clear(); Graphene.guardAjax(Graphene.guardAjax(autocomplete).type("ka")).select("Kansas"); checkOutput("Kansas"); page.assertListener(PhaseId.PROCESS_VALIDATIONS, String.format(FIRST_LISTENER_MSG_FORMAT, "Hawaii", "Kansas")); page.assertListener(PhaseId.INVOKE_APPLICATION, THIRD_LISTENER_MSG); blur(WaitRequestType.XHR); page.assertListener(PhaseId.INVOKE_APPLICATION, SECOND_LISTENER_MSG); autocomplete.clear(); Graphene.guardAjax(autocomplete).type("nonexisting"); blur(WaitRequestType.XHR); checkOutput("nonexisting"); page.assertListener(PhaseId.PROCESS_VALIDATIONS, String.format(FIRST_LISTENER_MSG_FORMAT, "Kansas", "nonexisting")); page.assertListener(PhaseId.INVOKE_APPLICATION, SECOND_LISTENER_MSG); } private SelectOrConfirm typeHIntoAutocompleteInputGuarded() { return Graphene.guardAjax(autocomplete).type("h"); } }