summaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/tests/validation/ValidationOfRequiredEmptyFieldsTest.java
blob: ab77ba6b26092f09c4a5920c4d31cc4e72032006 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.vaadin.tests.validation;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;

import com.vaadin.testbench.elements.CheckBoxElement;
import com.vaadin.testbench.elements.TextFieldElement;
import com.vaadin.testbench.elements.VerticalLayoutElement;
import com.vaadin.tests.tb3.MultiBrowserTest;

public class ValidationOfRequiredEmptyFieldsTest extends MultiBrowserTest {

    @Override
    protected boolean requireWindowFocusForIE() {
        return true;
    }

    @Test
    public void requiredErrorMessage() throws Exception {
        openTestURL();
        getRequiredCheckbox().click();
        getRequiredMessageField().click();
        getRequiredMessageField().sendKeys("The field is required", Keys.TAB);
        assertTooltipError("The field is required");
    }

    @Test
    public void integerValidatorErrorMessage() {
        openTestURL();
        getRequiredCheckbox().click();
        getIntegerValidatorCheckbox().click();
        getTargetTextField().sendKeys("a", Keys.SHIFT, Keys.TAB);
        assertTooltipError("Must be an integer");
    }

    @Test
    public void requiredWithIntegerAndLengthValidatorErrorMessage() {
        openTestURL();
        getRequiredCheckbox().click();
        getIntegerValidatorCheckbox().click();
        getLengthValidatorCheckbox().click();
        getTargetTextField().sendKeys("a", Keys.SHIFT, Keys.TAB);
        assertTooltipError("Must be an integer\nMust be 5-10 chars");
    }

    @Test
    public void integerAndLengthValidatorErrorMessage() {
        openTestURL();
        getIntegerValidatorCheckbox().click();
        getLengthValidatorCheckbox().click();
        getTargetTextField().sendKeys("a", Keys.SHIFT, Keys.TAB);
        assertTooltipError("Must be an integer\nMust be 5-10 chars");
    }

    private void assertTooltipError(final String message) {
        TextFieldElement e = getTargetTextField();
        testBenchElement(e).showTooltip();
        waitUntil(new ExpectedCondition<Boolean>() {

            @Override
            public Boolean apply(WebDriver input) {
                return message.equals(getTooltipErrorElement().getText());
            }

            @Override
            public String toString() {
                return "tooltip to be '" + message + "' (was: '"
                        + getTooltipErrorElement().getText() + "')";
            }
        });
        hideTooltip();
    }

    private void hideTooltip() {
        $(VerticalLayoutElement.class).first().click();
    }

    private TextFieldElement getRequiredMessageField() {
        return $(TextFieldElement.class).all().get(0);
    }

    private TextFieldElement getTargetTextField() {
        return $(TextFieldElement.class).all().get(1);
    }

    private WebElement getRequiredCheckbox() {
        return $(CheckBoxElement.class).caption("Field required").first()
                .findElement(By.xpath("input"));
    }

    private WebElement getIntegerValidatorCheckbox() {
        return $(CheckBoxElement.class).caption("Integer validator").first()
                .findElement(By.xpath("input"));
    }

    private WebElement getLengthValidatorCheckbox() {
        return $(CheckBoxElement.class).caption("String length validator")
                .first().findElement(By.xpath("input"));
    }

}