Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>
<html>
<head>
<title>Modal Prompts Test</title>
<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>