summaryrefslogtreecommitdiffstats
path: root/toolkit/components/prompts/test/test_modal_select.html
blob: 27688cf329b06d46dac1758c88d2ac80a845b01f (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!DOCTYPE HTML>
<html>
<head>
  <title>Modal Prompts Test</title>
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="prompt_common.js"></script>
</head>
<body>
Prompter tests: modal prompts
<p id="display"></p>

<div id="content" style="display: none">
  <iframe id="iframe"></iframe>
</div>

<pre id="test">
<script class="testbody" type="text/javascript">
function checkPromptState(promptState, expectedState) {
    // XXX check title? OS X has title in content
    // XXX check focused element
    // XXX check button labels?

    is(promptState.msg, expectedState.msg, "Checking expected message");

    // Compare listbox contents
    is(promptState.items.length, expectedState.items.length, "Checking listbox length");

    if (promptState.items.length)
      is(promptState.selectedIndex, 0, "Checking selected index");

    for (let i = 0; i < promptState.items; i++) {
        is(promptState.items[i], expectedState.items[i], "Checking list item #" + i);
    }
}

let selectVal = {};
let isOK;

function handlePrompt(state, action) {
  return new Promise(resolve => {
    gChromeScript.addMessageListener("promptHandled", function handled(msg) {
      gChromeScript.removeMessageListener("promptHandled", handled);
      checkPromptState(msg.promptState, state);
      resolve(true);
    });
    gChromeScript.sendAsyncMessage("handlePrompt", { action, isSelect: true});
  });
}

async function runTests(util) {
    // Select prompt does not support tab or content prompts yet. See Bug 1622817.
    if(util.modalType != Ci.nsIPrompt.MODAL_TYPE_WINDOW) {
        info('Skipping modal type for select prompt...');
        return;
    }

    // Empty list
    info("Starting test: Select (0 items, ok)");
    let state = {
        msg: "This is the select text.",
        title: "TestTitle",
        items: [],
    };
    let action = {
        buttonClick: "ok",
    };
    let promptDone = handlePrompt(state, action);
    let items = [];
    selectVal.value = null; // outparam, just making sure.
    let result =  await util.prompt("select", ["TestTitle", "This is the select text.", items, util.useAsync ? false : selectVal]);
    is(util.useAsync ? result.ok : result, true, "checked expected retval");
    is(util.useAsync ? result.selected : selectVal.value, -1, "checking selected index");
    await promptDone;

    // ok
    info("Starting test: Select (3 items, ok)");
    state = {
        msg: "This is the select text.",
        title: "TestTitle",
        items: ["one", "two", "three"],
    };
    action = {
        buttonClick: "ok",
    };
    promptDone = handlePrompt(state, action);
    items = ["one", "two", "three"];
    selectVal.value = null; // outparam, just making sure.
    result = await util.prompt("select", ["TestTitle", "This is the select text.", items, util.useAsync ? false : selectVal]);
    is(util.useAsync ? result.ok : result, true, "checked expected retval");
    is(util.useAsync ? result.selected : selectVal.value, 0, "checking selected index");
    await promptDone;

    // select item
    info("Starting test: Select (3 items, selection changed, ok)");
    state = {
        msg: "This is the select text.",
        title: "TestTitle",
        items: ["one", "two", "three"],
    };
    action = {
        buttonClick: "ok",
        selectItem: 1,
    };
    promptDone = handlePrompt(state, action);
    items = ["one", "two", "three"];
    selectVal.value = null; // outparam, just making sure.
    result = await util.prompt("select", ["TestTitle", "This is the select text.", items,  util.useAsync ? false : selectVal]);
    is(util.useAsync ? result.ok : result, true, "checked expected retval");
    is(util.useAsync ? result.selected : selectVal.value, 1, "checking selected index");
    await promptDone;

    // cancel prompt
    info("Starting test: Select (3 items, cancel)");
    state = {
        msg: "This is the select text.",
        title: "TestTitle",
        items: ["one", "two", "three"],
    };
    action = {
        buttonClick: "cancel",
    };
    promptDone = handlePrompt(state, action);
    items = ["one", "two", "three"];
    selectVal.value = null; // outparam, just making sure.
    result = await util.prompt("select", ["TestTitle", "This is the select text.", items,  util.useAsync ? false : selectVal]);
    is(util.useAsync ? result.ok : result, false, "checked expected retval");
    ok(util.useAsync && result.selected == -1 || selectVal.value == 0, "checking selected index");
    await promptDone;
}

add_task(async function runPromptTests() {
    await runPromptCombinations(window, runTests);
});

</script>
</pre>
</body>
</html>