dom/base/test/test_sendQueryContentAndSelectionSetEvent.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <title>Test for nsIDOMWindowUtils.sendQueryContentEvent() and .sendSelectionSetEvent()</title>
     5   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
     6   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
     7 </head>
     8 <body>
     9 <p id="display"></p>
    10 <div id="content" style="display: none">
    12 </div>
    13 <div id="editor" contenteditable>abc<br>def</div>
    14 <pre id="test">
    15 <script type="application/javascript">
    17 var editor = document.getElementById("editor");
    19 SimpleTest.waitForExplicitFinish();
    21 const kIsWin = navigator.platform.indexOf("Win") == 0;
    22 const kIsMac = navigator.platform.indexOf("Mac") == 0;
    24 const kLineBreak = kIsWin ? "\r\n" : kIsMac ? "\r" : "\n";
    26 var gUtils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    27                    .getInterface(Components.interfaces.nsIDOMWindowUtils);
    29 function escape(aStr)
    30 {
    31   var result = aStr.replace("\n", "\\n");
    32   return result.replace("\r", "\\r");
    33 }
    35 function runTests()
    36 {
    37   editor.focus();
    39   // NOTE: For compatibility, calling without flags should work as with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK.
    41   // QueryTextContent
    42   var expectedStr = escape(("abc" + kLineBreak + "def").substr(2, 4));
    43   var result = gUtils.sendQueryContentEvent(gUtils.QUERY_TEXT_CONTENT, 2, 4, 0, 0,
    44                                             gUtils.QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK);
    45   ok(result.succeeded,
    46      "sendQueryContentEvent(QUERY_TEXT_CONTENT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
    47   is(escape(result.text), expectedStr,
    48      "sendQueryContentEvent(QUERY_TEXT_CONTENT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) got unexpected string");
    50   result = gUtils.sendQueryContentEvent(gUtils.QUERY_TEXT_CONTENT, 2, 4, 0, 0);
    51   ok(result.succeeded,
    52      "sendQueryContentEvent(QUERY_TEXT_CONTENT) should succeed");
    53   is(escape(result.text), expectedStr,
    54      "sendQueryContentEvent(QUERY_TEXT_CONTENT) should return same string as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
    56   expectedStr = escape(("abc\ndef").substr(2, 4));
    57   result = gUtils.sendQueryContentEvent(gUtils.QUERY_TEXT_CONTENT, 2, 4, 0, 0,
    58                                         gUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK);
    59   ok(result.succeeded,
    60      "sendQueryContentEvent(QUERY_TEXT_CONTENT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) should succeed");
    61   is(escape(result.text), expectedStr,
    62      "sendQueryContentEvent(QUERY_TEXT_CONTENT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) got unexpected string");
    64   // QueryCaretRect
    65   window.getSelection().collapse(editor.firstChild, 0);
    67   var caretNative = gUtils.sendQueryContentEvent(gUtils.QUERY_CARET_RECT, 6, 0, 0, 0,
    68                                                  gUtils.QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK);
    69   ok(caretNative.succeeded,
    70      "sendQueryContentEvent(QUERY_CARET_RECT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
    71   var caretXP = gUtils.sendQueryContentEvent(gUtils.QUERY_CARET_RECT, 6 - kLineBreak.length + 1, 0, 0, 0,
    72                                              gUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK);
    73   ok(caretXP.succeeded,
    74      "sendQueryContentEvent(QUERY_CARET_RECT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) should succeed");
    76   is(caretXP.top, caretNative.top,
    77      "The caret top should be same");
    78   is(caretXP.left, caretNative.left,
    79      "The caret left should be same");
    81   result = gUtils.sendQueryContentEvent(gUtils.QUERY_CARET_RECT, 6, 0, 0, 0);
    82   ok(result.succeeded,
    83      "sendQueryContentEvent(QUERY_CARET_RECT) should succeed");
    84   is(result.top, caretNative.top,
    85      "sendQueryContentEvent(QUERY_CARET_RECT) should return same top as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
    86   is(result.left, caretNative.left,
    87      "sendQueryContentEvent(QUERY_CARET_RECT) should return same left as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
    89   // QueryTextRect
    90   var textRectNative = gUtils.sendQueryContentEvent(gUtils.QUERY_TEXT_RECT, 6, 1, 0, 0,
    91                                                     gUtils.QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK);
    92   ok(textRectNative.succeeded,
    93      "sendQueryContentEvent(QUERY_TEXT_RECT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
    94   var textRectXP = gUtils.sendQueryContentEvent(gUtils.QUERY_TEXT_RECT, 6 - kLineBreak.length + 1, 1, 0, 0,
    95                                                 gUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK);
    96   ok(textRectXP.succeeded,
    97      "sendQueryContentEvent(QUERY_TEXT_RECT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) should succeed");
    99   is(textRectXP.top, textRectNative.top,
   100      "The text top should be same");
   101   is(textRectXP.left, textRectNative.left,
   102      "The text left should be same");
   103   is(textRectXP.height, textRectNative.height,
   104      "The text height should be same");
   105   is(textRectXP.width, textRectNative.width,
   106      "The text width should be same");
   108   result = gUtils.sendQueryContentEvent(gUtils.QUERY_TEXT_RECT, 6, 1, 0, 0);
   109   ok(result.succeeded,
   110      "sendQueryContentEvent(QUERY_TEXT_RECT) should succeed");
   111   is(result.top, textRectNative.top,
   112      "sendQueryContentEvent(QUERY_TEXT_RECT) should return same top as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   113   is(result.left, textRectNative.left,
   114      "sendQueryContentEvent(QUERY_TEXT_RECT) should return same left as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   115   is(result.height, textRectNative.height,
   116      "sendQueryContentEvent(QUERY_TEXT_RECT) should return same height as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   117   is(result.width, textRectNative.width,
   118      "sendQueryContentEvent(QUERY_TEXT_RECT) should return same width as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   120   // QueryCharacterAtOffset
   121   result = gUtils.sendQueryContentEvent(gUtils.QUERY_CHARACTER_AT_POINT, 0, 0, textRectNative.left + 1, textRectNative.top + 1,
   122                                         gUtils.QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK);
   123   ok(result.succeeded,
   124      "sendQueryContentEvent(QUERY_CHARACTER_AT_POINT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
   125   is(result.top, textRectNative.top,
   126      "The character top is wrong");
   127   is(result.left, textRectNative.left,
   128      "The character left is wrong");
   129   is(result.height, textRectNative.height,
   130      "The character height is wrong");
   131   is(result.width, textRectNative.width,
   132      "The character width is wrong");
   133   is(result.offset, 6,
   134      "The character offset is wrong");
   136   result = gUtils.sendQueryContentEvent(gUtils.QUERY_CHARACTER_AT_POINT, 0, 0, textRectNative.left + 1, textRectNative.top + 1);
   137   ok(result.succeeded,
   138      "sendQueryContentEvent(QUERY_CHARACTER_AT_POINT) should succeed");
   139   is(result.top, textRectNative.top,
   140      "The character top should be same as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   141   is(result.left, textRectNative.left,
   142      "The character left should be same as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   143   is(result.height, textRectNative.height,
   144      "The character height should be same as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   145   is(result.width, textRectNative.width,
   146      "The character width should be same as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   147   is(result.offset, 6,
   148      "The character offset should be same as calling with QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK");
   150   result = gUtils.sendQueryContentEvent(gUtils.QUERY_CHARACTER_AT_POINT, 0, 0, textRectXP.left + 1, textRectXP.top + 1,
   151                                         gUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK);
   152   ok(result.succeeded,
   153      "sendQueryContentEvent(QUERY_CHARACTER_AT_POINT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) should succeed");
   154   is(result.top, textRectXP.top,
   155      "The character top is wrong");
   156   is(result.left, textRectXP.left,
   157      "The character left is wrong");
   158   is(result.height, textRectXP.height,
   159      "The character height is wrong");
   160   is(result.width, textRectXP.width,
   161      "The character width is wrong");
   162   is(result.offset, 6 - kLineBreak.length + 1,
   163      "The character offset is wrong");
   165   // SelectionSet and QuerySelectedText
   166   var selectionSet = gUtils.sendSelectionSetEvent(0, 6, gUtils.SELECTION_SET_FLAG_USE_NATIVE_LINE_BREAK);
   167   ok(selectionSet,
   168      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
   169   expectedStr = escape(("abc" + kLineBreak + "def").substr(0, 6));
   171   result = gUtils.sendQueryContentEvent(gUtils.QUERY_SELECTED_TEXT, 0, 0, 0, 0,
   172                                         gUtils.QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK);
   173   ok(result.succeeded,
   174      "sendQueryContentEvent(QUERY_SELECTED_TEXT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
   175   ok(!result.reversed,
   176      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_NATIVE_LINE_BREAK) should set non-reversed selection");
   177   is(escape(result.text), expectedStr,
   178      "sendQueryContentEvent(QUERY_SELECTED_TEXT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) got unexpected string");
   180   selectionSet = gUtils.sendSelectionSetEvent(0, 6, gUtils.SELECTION_SET_FLAG_USE_XP_LINE_BREAK);
   181   ok(selectionSet,
   182      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_XP_LINE_BREAK) should succeed");
   183   expectedStr = escape(("abc\ndef").substr(0, 6));
   185   result = gUtils.sendQueryContentEvent(gUtils.QUERY_SELECTED_TEXT, 0, 0, 0, 0,
   186                                         gUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK);
   187   ok(result.succeeded,
   188      "sendQueryContentEvent(QUERY_SELECTED_TEXT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) should succeed");
   189   ok(!result.reversed,
   190      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_XP_LINE_BREAK) should set non-reversed selection");
   191   is(escape(result.text), expectedStr,
   192      "sendQueryContentEvent(QUERY_SELECTED_TEXT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) got unexpected string");
   194   var selectionSet = gUtils.sendSelectionSetEvent(0, 6, gUtils.SELECTION_SET_FLAG_USE_NATIVE_LINE_BREAK | gUtils.SELECTION_SET_FLAG_REVERSE);
   195   ok(selectionSet,
   196      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
   198   result = gUtils.sendQueryContentEvent(gUtils.QUERY_SELECTED_TEXT, 0, 0, 0, 0,
   199                                         gUtils.QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK);
   200   ok(result.succeeded,
   201      "sendQueryContentEvent(QUERY_SELECTED_TEXT, QUERY_CONTENT_FLAG_USE_NATIVE_LINE_BREAK) should succeed");
   202   ok(result.reversed,
   203      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_NATIVE_LINE_BREAK | SELECTION_SET_FLAG_REVERSE) should set reversed selection");
   205   selectionSet = gUtils.sendSelectionSetEvent(0, 6, gUtils.SELECTION_SET_FLAG_USE_XP_LINE_BREAK | gUtils.SELECTION_SET_FLAG_REVERSE);
   206   ok(selectionSet,
   207      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_XP_LINE_BREAK | SELECTION_SET_FLAG_REVERSE) should succeed");
   209   result = gUtils.sendQueryContentEvent(gUtils.QUERY_SELECTED_TEXT, 0, 0, 0, 0,
   210                                         gUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK);
   211   ok(result.succeeded,
   212      "sendQueryContentEvent(QUERY_SELECTED_TEXT, QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK) should succeed");
   213   ok(result.reversed,
   214      "sendSelectionSetEvent(0, 6, SELECTION_SET_FLAG_USE_XP_LINE_BREAK | SELECTION_SET_FLAG_REVERSE) should set reversed selection");
   216   SimpleTest.finish();
   217 }
   219 SimpleTest.waitForFocus(runTests);
   221 </script>
   222 </pre>
   223 </body>
   224 </html>

mercurial