jhc.redsniff.wicket.WicketEnabledTester.java Source code

Java tutorial

Introduction

Here is the source code for jhc.redsniff.wicket.WicketEnabledTester.java

Source

/*******************************************************************************
 * Copyright 2014 JHC Systems Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package jhc.redsniff.wicket;

import static java.util.Arrays.asList;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static jhc.redsniff.core.FindingExpectations.expectationWithPurpose;
import static jhc.redsniff.webdriver.ExtraExpectedConditions.done;
import static jhc.redsniff.webdriver.Finders.elementFound;
import static jhc.redsniff.wicket.WicketFeedbackFinders.*;
import static jhc.redsniff.webdriver.Finders.only;
import static jhc.redsniff.wicket.WicketFinders.wicketItemByPath;
import static jhc.redsniff.webdriver.WebDriverMatchers.hasSelectedState;
import static jhc.redsniff.webdriver.Sugar.into;
import static jhc.redsniff.webdriver.pageError.HTTPErrorChecker.http500PageChecker;
import static jhc.redsniff.wicket.WicketAjaxActivity.wicketAjax;
import static jhc.redsniff.wicket.WicketPageExceptionTraceChecker.wicketPageExceptionChecker;
import static jhc.redsniff.wicket.WicketPageExpiredChecker.wicketPageExpiredChecker;
import static jhc.redsniff.wicket.pageError.WicketFeedbackErrorChecker.wicketFeedbackChecker;

import java.util.List;

import jhc.redsniff.core.SFinder;
import jhc.redsniff.internal.core.CollectionOf;
import jhc.redsniff.pageError.PageErrorChecker;
import jhc.redsniff.webdriver.RedsniffWebDriverTester;
import jhc.redsniff.wicket.wickettestcompatibility.WicketPathTester;

import org.openqa.selenium.By;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

@SuppressWarnings("deprecation")
public class WicketEnabledTester extends RedsniffWebDriverTester {

    private final WicketPathTester w;

    public WicketEnabledTester(WebDriver driver) {
        super(driver);
        w = new WicketPathTester(this);
    }

    public WicketEnabledTester(WebDriver driver, SearchContext context) {
        super(driver, context);
        w = new WicketPathTester(this);
    }

    @Override
    protected List<PageErrorChecker<WebElement, CollectionOf<WebElement>, SearchContext>> ultimateCauseChecks() {
        return asList(wicketPageExceptionChecker(), wicketPageExpiredChecker(), http500PageChecker());
    }

    protected List<PageErrorChecker<WebElement, CollectionOf<WebElement>, SearchContext>> preChecks() {
        return asList(wicketPageExceptionChecker(), wicketPageExpiredChecker(), wicketFeedbackChecker());
    }

    public WicketEnabledTester newTesterFrom(SearchContext context) {
        return new WicketEnabledTester(getDriver(), context);
    }

    public void assertNoErrorMessage() {
        assertFeedbackContainerPresent();
        assertAbsenceOf(anyFeedbackError());
    }

    protected void assertFeedbackContainerPresent() throws AssertionError {
        assertThe(expectationWithPurpose(only(feedbackContainer()),
                "No feedback container on the page in order to check for no errors \n"
                        + "override method requiresAdditionalFeedbackPanel() to return true if your component under test does not have its own embedded feedback panel"));

    }

    //FIXME
    public void setFeedBackErrorsOk(boolean expected) {//XXX should just have a new instance not a state-driven thing
        if (expected)
            removePreChecks();
        else
            addPreChecks();
    }

    public void assertErrorMessages(String... expectedErrorMessages) {
        for (String errorMessage : expectedErrorMessages) {
            assertPresenceOf(feedbackError(errorMessage));
        }
    }

    public void assertNoWarningMessage() {
        assertFeedbackContainerPresent();
        assertAbsenceOf(anyFeedbackWarning());
    }

    public void assertWarningMessages(String... expectedWarningMessages) {
        for (String warningMessage : expectedWarningMessages) {
            assertPresenceOf(feedbackError(warningMessage));
        }
    }

    public String getValueByName(String name) {
        return find(only(itemByName(name))).getAttribute("value");
    }

    public void setValueByNameAndWait(String name, String value) {
        type(value, into(itemByName(name)));
        waitFor(done(wicketAjax()));
    }

    public void loseFocusByName(String name) {
        tab(itemByName(name));
        waitFor(done(wicketAjax()));
    }

    private SFinder<WebElement, SearchContext> itemByName(String name) {
        return only(elementFound(By.name(name)));
    }

    public void tickByName(String checkBoxId, boolean value) {
        WebElement checkBox = find(itemByName(checkBoxId));
        if (checkBox.isSelected() != value)
            tick(itemByName(checkBoxId));
        assertThatThe(itemByName(checkBoxId), hasSelectedState(value));
    }

    /**
     * Gets a new {@link WicketEnabledTester} that is rooted on the item rooted
     * on {@code formWicketPath}- typically a form or section
     * 
     * @param formWicketPath
     * @return
     * @deprecated - avoid using wicket paths if possible, or use just what is
     *             needed rather than full absolute path
     */
    public WicketEnabledTester getTesterRootedOnFormByWicketPath(String formWicketPath) {
        WebElement theForm = find(only(wicketItemByPath(formWicketPath)));
        return newTesterFrom(theForm);
    }

    /**
     * 
     * @deprecated - avoid using wicket paths if possible, or use just what is
     *             needed rather than full absolute path
     * @return
     */
    public WicketPathTester getWicketPathTester() {
        return w;
    }

    public void waitUntilWicketAjaxDone() {
        waitFor(done(wicketAjax()), waiting().pollingEvery(100, MILLISECONDS));
    }
}