forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			138 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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>
 | 
