diff options
Diffstat (limited to 'dom/browser-element/mochitest/browserElement_PromptConfirm.js')
-rw-r--r-- | dom/browser-element/mochitest/browserElement_PromptConfirm.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/dom/browser-element/mochitest/browserElement_PromptConfirm.js b/dom/browser-element/mochitest/browserElement_PromptConfirm.js new file mode 100644 index 000000000..c01836a25 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_PromptConfirm.js @@ -0,0 +1,87 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that prompt and confirm work. In particular, we're concerned that we +// get correct return values out of them. +// +// We use alert() to communicate the return values of prompt/confirm back to +// ourselves. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + var prompts = [ + {msg: '1', type: 'alert', rv: 42, expected: 'undefined'}, + {msg: '2', type: 'confirm', rv: true, expected: 'true'}, + {msg: '3', type: 'confirm', rv: false, expected: 'false'}, + + // rv == 42 should be coerced to 'true' for confirm. + {msg: '4', type: 'confirm', rv: 42, expected: 'true'}, + {msg: '5', type: 'prompt', rv: 'worked', expected: 'worked'}, + {msg: '6', type: 'prompt', rv: null, expected: 'null'}, + {msg: '7', type: 'prompt', rv: '', expected: ''} + ]; + + iframe.addEventListener("mozbrowsershowmodalprompt", function(e) { + var curPrompt = prompts[0]; + if (!curPrompt.waitingForResponse) { + curPrompt.waitingForResponse = true; + + is(e.detail.message, curPrompt.msg, "prompt message"); + is(e.detail.promptType, curPrompt.type, "prompt type"); + + if (e.detail.promptType == 'prompt') { + ok(e.detail.returnValue === null, "prompt's returnValue should be null"); + is(e.detail.initialValue, "initial", "prompt's initial value."); + } + else { + ok(e.detail.returnValue === undefined, + "Other than for prompt, shouldn't have initial value."); + } + + // Block the child until we call e.detail.unblock(). + e.preventDefault(); + + SimpleTest.executeSoon(function() { + e.detail.returnValue = curPrompt.rv; + e.detail.unblock(); + }); + } + else { + prompts.shift(); + + // |e| now corresponds to an alert() containing the return value we just + // sent for this prompt. + + is(e.detail.message, 'RESULT:' + curPrompt.expected, + "expected rv for msg " + curPrompt.msg); + + if (prompts.length == 0) { + SimpleTest.finish(); + } + } + }); + + iframe.src = + 'data:text/html,<html><body><script>\ + function sendVal(val) { \ + alert("RESULT:" + val); \ + } \ + sendVal(alert("1")); \ + sendVal(confirm("2")); \ + sendVal(confirm("3")); \ + sendVal(confirm("4")); \ + sendVal(prompt("5", "initial")); \ + sendVal(prompt("6", "initial")); \ + sendVal(prompt("7", "initial")); \ + </scr' + 'ipt></body></html>'; +} + +addEventListener('testready', runTest); |