browser/base/content/test/general/test_contextmenu_input.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <title>Tests for browser context menu</title>
     5   <script type="text/javascript" src="/MochiKit/packed.js"></script>
     6   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     7   <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
     8   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     9 </head>
    10 <body>
    11 Browser context menu tests for input.
    12 <p id="display"></p>
    14 <div id="content">
    15 </div>
    17 <pre id="test">
    18 <script type="text/javascript" src="contextmenu_common.js"></script>
    19 <script class="testbody" type="text/javascript">
    21 const Ci = SpecialPowers.Ci;
    23 /*
    24  * runTest
    25  *
    26  * Called by a popupshowing event handler. Each test checks for expected menu
    27  * contents, closes the popup, and finally triggers the popup on a new element
    28  * (thus kicking off another cycle).
    29  *
    30  */
    31 function runTest(testNum) {
    32   ok(true, "Starting test #" + testNum);
    34   switch (testNum) {
    35     case 1:
    36         openContextMenuFor(input); // Invoke context menu for next test.
    37         break;
    39     case 2:
    40         // Context menu for text input field.
    41         checkContextMenu(["context-undo",        false,
    42                           "---",                 null,
    43                           "context-cut",         false,
    44                           "context-copy",        false,
    45                           "context-paste",       null, // ignore clipboard state
    46                           "context-delete",      false,
    47                           "---",                 null,
    48                           "context-selectall",   false,
    49                           "---",                 null,
    50                           "spell-check-enabled", true,
    51                           "---",                 null,
    52                           "context-inspect",     true]);
    53         closeContextMenu();
    54         input.setAttribute('spellcheck', 'true');
    55         openContextMenuFor(input); // Invoke context menu for next test.
    56         break;
    58     case 3:
    59         var value = SpecialPowers.Services.appinfo.OS != "Darwin";
    60         // Context menu for spell-check input.
    61         checkContextMenu(["context-undo",        value,
    62                           "---",                 null,
    63                           "context-cut",         value,
    64                           "context-copy",        value,
    65                           "context-paste",       null, // ignore clipboard state
    66                           "context-delete",      value,
    67                           "---",                 null,
    68                           "context-selectall",   value,
    69                           "---",                 null,
    70                           "spell-check-enabled", true,
    71                           "spell-dictionaries",  true,
    72                               [/*"spell-check-dictionary-en-US", true,*/
    73                                "---",                          null,
    74                                "spell-add-dictionaries",       true], null,
    75                           "---",                 null,
    76                           "context-inspect",     true]);
    78         closeContextMenu();
    79         input.removeAttribute('spellcheck');
    80         openContextMenuFor(inputspellwrong); // Invoke context menu for next test.
    81         break;
    83     case 4:
    84         var value = SpecialPowers.Services.appinfo.OS != "Darwin";
    85         // Context menu for spell-check input with a unknwon word.
    86         checkContextMenu([/*"*prodigality",        true,*/ // spelling suggestion
    87                           /*"spell-add-to-dictionary", true,*/
    88                           /*"---",                 null,*/
    89                           "context-undo",        value,
    90                           "---",                 null,
    91                           "context-cut",         value,
    92                           "context-copy",        value,
    93                           "context-paste",       null, // ignore clipboard state
    94                           "context-delete",      value,
    95                           "---",                 null,
    96                           "context-selectall",   true,
    97                           "---",                 null,
    98                           "spell-check-enabled", true,
    99                           "spell-dictionaries",  true,
   100                               [/*"spell-check-dictionary-en-US", true,*/
   101                                "---",                          null,
   102                                "spell-add-dictionaries",       true], null,
   103                           "---",                 null,
   104                           "context-inspect",     true]);
   106         closeContextMenu();
   107         openContextMenuFor(inputspellcorrect); // Invoke context menu for next test.
   108         break;
   110     case 5:
   111         var value = SpecialPowers.Services.appinfo.OS != "Darwin";
   112         // Context menu for spell-check input with a known word.
   113         checkContextMenu(["context-undo",        value,
   114                           "---",                 null,
   115                           "context-cut",         value,
   116                           "context-copy",        value,
   117                           "context-paste",       null, // ignore clipboard state
   118                           "context-delete",      value,
   119                           "---",                 null,
   120                           "context-selectall",   true,
   121                           "---",                 null,
   122                           "spell-check-enabled", true,
   123                           "spell-dictionaries",  true,
   124                               [/*"spell-check-dictionary-en-US", true,*/
   125                                "---",                          null,
   126                                "spell-add-dictionaries",       true], null,
   127                           "---",                 null,
   128                           "context-inspect",     true]);
   130         closeContextMenu();
   131         input.disabled = true;
   132         openContextMenuFor(input); // Invoke context menu for next test.
   133         break;
   135     case 6:
   136         // Context menu for disabled input.
   137         checkContextMenu(["context-undo",        false,
   138                           "---",                 null,
   139                           "context-cut",         false,
   140                           "context-copy",        false,
   141                           "context-paste",       null, // ignore clipboard state
   142                           "context-delete",      false,
   143                           "---",                 null,
   144                           "context-selectall",   true,
   145                           "---",                 null,
   146                           "spell-check-enabled", true,
   147                           "---",                 null,
   148                           "context-inspect",     true]);
   150         closeContextMenu();
   151         input.disabled = false;
   152         input.type = 'password';
   153         openContextMenuFor(input); // Invoke context menu for next test.
   154         break;
   156     case 7: // password
   157     case 8: // email
   158     case 9: // url
   159     case 10: // tel
   160         // Context menu for tel, password, email and url input fields.
   161         checkContextMenu(["context-undo",        false,
   162                           "---",                 null,
   163                           "context-cut",         false,
   164                           "context-copy",        false,
   165                           "context-paste",       null, // ignore clipboard state
   166                           "context-delete",      false,
   167                           "---",                 null,
   168                           "context-selectall",   false,
   169                           "---",                 null,
   170                           "context-inspect",     true]);
   172         closeContextMenu();
   174         if (testNum == 7) {
   175           input.type = 'email';
   176         } else if (testNum == 8) {
   177           input.type = 'url';
   178         } else if (testNum == 9) {
   179           input.type = 'tel';
   180         } else if (testNum == 10) {
   181           input.type = 'date';
   182         }
   184         openContextMenuFor(input); // Invoke context menu for next test.
   185         break;
   187     case 11: // type='date'
   188     case 12: // type='time'
   189     case 13: // type='number'
   190     case 14: // type='color'
   191     case 15: // type='range'
   192         checkContextMenu(["context-back",         false,
   193                           "context-forward",      false,
   194                           "context-reload",       true,
   195                           "---",                  null,
   196                           "context-bookmarkpage", true,
   197                           "context-savepage",     true,
   198                           "---",                  null,
   199                           "context-viewbgimage",  false,
   200                           "context-selectall",    null,
   201                           "---",                  null,
   202                           "context-viewsource",   true,
   203                           "context-viewinfo",     true,
   204                           "---",                 null,
   205                           "context-inspect",     true]);
   206         closeContextMenu();
   208         if (testNum == 11) {
   209           input.type = 'time';
   210         } else if (testNum == 12) {
   211           input.type = 'number';
   212         } else if (testNum == 13) {
   213           input.type = 'color';
   214         } else if (testNum == 14) {
   215           input.type = 'range';
   216         } else {
   217           input.type = 'search';
   218         }
   220         openContextMenuFor(input);
   221         break;
   223     case 16: // type='search'
   224         // Context menu for search input fields.
   225         checkContextMenu(["context-undo",        false,
   226                           "---",                 null,
   227                           "context-cut",         false,
   228                           "context-copy",        false,
   229                           "context-paste",       null, // ignore clipboard state
   230                           "context-delete",      false,
   231                           "---",                 null,
   232                           "context-selectall",   false,
   233                           "---",                 null,
   234                           "spell-check-enabled", true,
   235                           "---",                 null,
   236                           "context-inspect",     true]);
   238         closeContextMenu();
   240         // Add some todos to make sure all input fields got a test.
   241         var todos = [ "datetime", "month", "week", "datetime-local" ];
   242         todos.forEach(function(type) {
   243           input.type = type;
   244           todo_is(input.type, type, "TODO: add test for " + type + " input fields");
   245         });
   247         input.type = 'text';
   248         input.readOnly = true;
   249         openContextMenuFor(input);
   250         break;
   252     case 17:
   253         // Context menu for a read-only input.
   254         checkContextMenu(["context-undo",        false,
   255                           "---",                 null,
   256                           "context-cut",         false,
   257                           "context-copy",        false,
   258                           "context-paste",       null, // ignore clipboard state
   259                           "context-delete",      false,
   260                           "---",                 null,
   261                           "context-selectall",   false,
   262                           "---",                 null,
   263                           "context-inspect",     true]);
   264         closeContextMenu();
   266         // Clean-up.
   267         subwindow.close();
   268         SimpleTest.finish();
   269         return;
   271     default:
   272         ok(false, "Unexpected invocation of test #" + testNum);
   273         subwindow.close();
   274         SimpleTest.finish();
   275         return;
   276   }
   278 }
   281 var gTestNum = 1;
   282 var subwindow, chromeWin, contextMenu;
   283 var input, inputspellwrong, inputspellcorrect;
   285 function startTest() {
   286     chromeWin = SpecialPowers.wrap(subwindow)
   287                     .QueryInterface(Ci.nsIInterfaceRequestor)
   288                     .getInterface(Ci.nsIWebNavigation)
   289                     .QueryInterface(Ci.nsIDocShellTreeItem)
   290                     .rootTreeItem
   291                     .QueryInterface(Ci.nsIInterfaceRequestor)
   292                     .getInterface(Ci.nsIDOMWindow)
   293                     .QueryInterface(Ci.nsIDOMChromeWindow);
   294     contextMenu = chromeWin.document.getElementById("contentAreaContextMenu");
   295     ok(contextMenu, "Got context menu XUL");
   297     if (chromeWin.document.getElementById("Browser:Stop").getAttribute("disabled") != "true") {
   298       SimpleTest.executeSoon(startTest);
   299       return;
   300     }
   302     var inputs = subwindow.document.getElementsByTagName('input');
   303     input = inputs[0];
   304     inputspellwrong = inputs[1];
   305     inputspellcorrect = inputs[2];
   307     contextMenu.addEventListener("popupshown", function() { runTest(++gTestNum); }, false);
   308     runTest(1);
   309 }
   311 // We open this in a separate window, because the Mochitests run inside a frame.
   312 // The frame causes an extra menu item, and prevents running the test
   313 // standalone (ie, clicking the test name in the Mochitest window) to see
   314 // success/failure messages.
   315 var painted = false, loaded = false;
   317 function waitForEvents(event)
   318 {
   319   if (event.type == "MozAfterPaint")
   320     painted = true;
   321   else if (event.type == "load")
   322     loaded = true;
   323   if (painted && loaded) {
   324     subwindow.removeEventListener("MozAfterPaint", waitForEvents, false);
   325     subwindow.onload = null;
   326     startTest();
   327   }
   328 }
   330 var subwindow = window.open("data:text/html,<!DOCTYPE html><input><input spellcheck='true' value='prodkjfgigrty'><input spellcheck='true' value='foo'><input readonly spellcheck='false'>", "contextmenu-subtext", "width=600,height=700");
   331 subwindow.addEventListener("MozAfterPaint", waitForEvents, false);
   332 subwindow.onload = waitForEvents;
   334 SimpleTest.waitForExplicitFinish();
   335 </script>
   336 </pre>
   337 </body>
   338 </html>

mercurial