aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/test/java/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponentTest.java
blob: 4597015a72eae71de3dbd8a0240727c174fd78f2 (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
package com.vaadin.tests.components.javascriptcomponent;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

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

import com.vaadin.testbench.elements.AbstractComponentElement;
import com.vaadin.testbench.elements.AbstractJavaScriptComponentElement;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.tests.tb3.MultiBrowserTest;

public class BasicJavaScriptComponentTest extends MultiBrowserTest {
    @Test
    public void javascriptCommunication() throws Exception {
        openTestURL();
        int idx = 0;
        assertEquals("12. Got callback message: Callback message processed",
                getLogRow(idx++));
        assertEquals("11. Got RPC message: RPC message processed",
                getLogRow(idx++));
        assertEquals("10. Parent ids checked", getLogRow(idx++));

        // Data types in JS functions
        String expected = "1970-01-01T00:00:00.111Z";
        assertEquals(
                "9. Argument[4][aDate] type: elemental.json.impl.JreJsonString, value: "
                        + expected,
                getLogRow(idx++));
        assertEquals(
                "8. Argument[4][aBoolean] type: elemental.json.impl.JreJsonBoolean, value: false",
                getLogRow(idx++));
        assertEquals(
                "7. Argument[4][anInt] type: elemental.json.impl.JreJsonNumber, value: 556",
                getLogRow(idx++));
        assertEquals(
                "6. Argument[4][aString] type: elemental.json.impl.JreJsonString, value: value1",
                getLogRow(idx++));
        assertEquals("5. Argument[4] type: elemental.json.impl.JreJsonObject",
                getLogRow(idx++));
        assertEquals(
                "4. Argument[3] type: elemental.json.impl.JreJsonBoolean, value: true",
                getLogRow(idx++));
        assertEquals(
                "3. Argument[2] type: elemental.json.impl.JreJsonNumber, value: 556",
                getLogRow(idx++));
        assertEquals(
                "2. Argument[1] type: elemental.json.impl.JreJsonString, value: a string",
                getLogRow(idx++));

        expected = "1970-01-01T00:00:00.123Z";

        assertEquals(
                "1. Argument[0] type: elemental.json.impl.JreJsonString, value: "
                        + expected,
                getLogRow(idx++));

        // Component attributes
        AbstractJavaScriptComponentElement jsComponent = $(
                AbstractJavaScriptComponentElement.class).first();
        assertEquals("Component caption", getCaption(jsComponent));

        // app://APP/connector/[uiid]/[cid]/[key]/[filename]
        assertTrue(getChildText(jsComponent, 0)
                .matches("4. Url: .*/run/APP/connector/0/\\d+/test"));
        assertEquals("3. State message: Second state message",
                getChildText(jsComponent, 1));
        assertEquals("2. State message: First state message",
                getChildText(jsComponent, 2));

        // Can't/shouldn't check parent class name as we used to because it
        // relies on parent state change events being fired before child state
        // change events and this is not guaranteed

        // Modifications
        ButtonElement button = $(ButtonElement.class).first();
        button.click();
        assertEquals("Remove component\nDon't mess with me", button.getText());
    }

    private String getCaption(AbstractComponentElement c) {
        return c.findElement(By.xpath("../div[@class='v-caption']")).getText();
    }

    private String getChildText(AbstractComponentElement e, int index) {
        return e.findElement(By.xpath("(./div)[" + (index + 1) + "]"))
                .getText();
    }

}