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>
|