test_virtualcursor_text.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Tests pivot functionality in virtual cursors</title>
  5. <meta charset="utf-8" />
  6. <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
  7. <script type="application/javascript"
  8. src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
  9. </script>
  10. <script type="application/javascript"
  11. src="chrome://mochikit/content/chrome-harness.js">
  12. </script>
  13. <script type="application/javascript" src="../common.js"></script>
  14. <script type="application/javascript" src="../text.js"></script>
  15. <script type="application/javascript" src="../browser.js"></script>
  16. <script type="application/javascript" src="../events.js"></script>
  17. <script type="application/javascript" src="../role.js"></script>
  18. <script type="application/javascript" src="../states.js"></script>
  19. <script type="application/javascript" src="../pivot.js"></script>
  20. <script type="application/javascript" src="../layout.js"></script>
  21. <script type="application/javascript">
  22. var gBrowserWnd = null;
  23. var gQueue = null;
  24. function doTest()
  25. {
  26. var doc = currentTabDocument();
  27. var docAcc = getAccessible(doc, [nsIAccessibleDocument]);
  28. gQueue = new eventQueue();
  29. gQueue.onFinish = function onFinish()
  30. {
  31. closeBrowserWindow();
  32. }
  33. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  34. getAccessible(doc.getElementById('paragraph-1'))));
  35. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,4],
  36. getAccessible(doc.getElementById('paragraph-1'), nsIAccessibleText)));
  37. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', CHAR_BOUNDARY, [4,5],
  38. getAccessible(doc.getElementById('paragraph-1'), nsIAccessibleText)));
  39. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', CHAR_BOUNDARY, [3,4],
  40. getAccessible(doc.getElementById('paragraph-1'), nsIAccessibleText)));
  41. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [5,7],
  42. getAccessible(doc.getElementById('paragraph-1'), nsIAccessibleText)));
  43. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,3],
  44. getAccessible(doc.getElementById('p1-link-1'), nsIAccessibleText)));
  45. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [10,14],
  46. getAccessible(doc.getElementById('paragraph-1'), nsIAccessibleText)));
  47. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,3],
  48. getAccessible(doc.getElementById('p1-link-1'), nsIAccessibleText)));
  49. // set user input to false, and see if it works
  50. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [5,7],
  51. getAccessible(doc.getElementById('paragraph-1'), nsIAccessibleText)),
  52. false);
  53. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  54. getAccessible(doc.getElementById('section-1'))));
  55. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,1],
  56. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  57. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,9],
  58. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  59. // set user input to false, and see if it works
  60. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [10,14],
  61. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText),
  62. false));
  63. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [4,6],
  64. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  65. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [7,12],
  66. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  67. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,2],
  68. getAccessible(doc.getElementById('s1-link-2'), nsIAccessibleText)));
  69. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [15,19],
  70. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  71. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [20,28],
  72. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  73. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,5],
  74. getAccessible(doc.getElementById('section-2'), nsIAccessibleText)));
  75. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [6,10],
  76. getAccessible(doc.getElementById('section-2'), nsIAccessibleText)));
  77. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,5],
  78. getAccessible(doc.getElementById('section-2'), nsIAccessibleText)));
  79. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [20,28],
  80. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  81. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [15,19],
  82. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  83. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,2],
  84. getAccessible(doc.getElementById('s1-link-2'), nsIAccessibleText)));
  85. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [7,12],
  86. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  87. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [4,6],
  88. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  89. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [10,14],
  90. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  91. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,9],
  92. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  93. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,1],
  94. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  95. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  96. getAccessible(doc.getElementById('s1-link-1'))));
  97. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', CHAR_BOUNDARY, [1,2],
  98. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  99. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', CHAR_BOUNDARY, [0,1],
  100. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  101. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', CHAR_BOUNDARY, [1,2],
  102. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  103. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', CHAR_BOUNDARY, [0,1],
  104. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  105. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', CHAR_BOUNDARY, [1,2],
  106. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  107. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [2,9],
  108. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  109. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [10,14],
  110. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  111. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', CHAR_BOUNDARY, [3,4],
  112. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  113. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', CHAR_BOUNDARY, [13,14],
  114. getAccessible(doc.getElementById('s1-link-1'), nsIAccessibleText)));
  115. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  116. getAccessible(doc.getElementById('section-2'))));
  117. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', CHAR_BOUNDARY, [27,28],
  118. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  119. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', CHAR_BOUNDARY, [0,1],
  120. getAccessible(doc.getElementById('section-2'), nsIAccessibleText)));
  121. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  122. getAccessible(doc.getElementById('paragraph-2'))));
  123. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,12],
  124. getAccessible(doc.getElementById('paragraph-2'), nsIAccessibleText)));
  125. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,7],
  126. getAccessible(doc.getElementById('cell-1'), nsIAccessibleText)));
  127. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,8],
  128. getAccessible(doc.getElementById('cell-2'), nsIAccessibleText)));
  129. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,3],
  130. getAccessible(doc.getElementById('cell-3'), nsIAccessibleText)));
  131. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [4,11],
  132. getAccessible(doc.getElementById('cell-3'), nsIAccessibleText)));
  133. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,6],
  134. getAccessible(doc.getElementById('cell-4'), nsIAccessibleText)));
  135. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [7,13],
  136. getAccessible(doc.getElementById('cell-4'), nsIAccessibleText)));
  137. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,7],
  138. getAccessible(doc.getElementById('section-3'), nsIAccessibleText)));
  139. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  140. getAccessible(doc.getElementById('section-3'))));
  141. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,7],
  142. getAccessible(doc.getElementById('section-3'), nsIAccessibleText)));
  143. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [7,13],
  144. getAccessible(doc.getElementById('cell-4'), nsIAccessibleText)));
  145. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,6],
  146. getAccessible(doc.getElementById('cell-4'), nsIAccessibleText)));
  147. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [4,11],
  148. getAccessible(doc.getElementById('cell-3'), nsIAccessibleText)));
  149. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,3],
  150. getAccessible(doc.getElementById('cell-3'), nsIAccessibleText)));
  151. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,8],
  152. getAccessible(doc.getElementById('cell-2'), nsIAccessibleText)));
  153. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,7],
  154. getAccessible(doc.getElementById('cell-1'), nsIAccessibleText)));
  155. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,12],
  156. getAccessible(doc.getElementById('paragraph-2'), nsIAccessibleText)));
  157. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  158. getAccessible(doc.getElementById('paragraph-3'))));
  159. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,7],
  160. getAccessible(doc.getElementById('paragraph-3'), nsIAccessibleText)));
  161. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,8],
  162. getAccessible(doc.getElementById('p3-link-1'), nsIAccessibleText)));
  163. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [8,10],
  164. getAccessible(doc.getElementById('paragraph-3'), nsIAccessibleText)));
  165. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,4],
  166. getAccessible(doc.getElementById('p3-link-2'), nsIAccessibleText)));
  167. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,5],
  168. getAccessible(doc.getElementById('p3-link-3'), nsIAccessibleText)));
  169. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [14,20],
  170. getAccessible(doc.getElementById('paragraph-3'), nsIAccessibleText)));
  171. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,5],
  172. getAccessible(doc.getElementById('p3-link-3'), nsIAccessibleText)));
  173. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,4],
  174. getAccessible(doc.getElementById('p3-link-2'), nsIAccessibleText)));
  175. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [8,10],
  176. getAccessible(doc.getElementById('paragraph-3'), nsIAccessibleText)));
  177. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,8],
  178. getAccessible(doc.getElementById('p3-link-1'), nsIAccessibleText)));
  179. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,7],
  180. getAccessible(doc.getElementById('paragraph-3'), nsIAccessibleText)));
  181. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  182. getAccessible(doc.getElementById('s1-link-2'))));
  183. // Start with the pivot in the middle of the paragraph
  184. gQueue.push(new setVCPosInvoker(docAcc, "moveNext", ObjectTraversalRule, " will traverse"));
  185. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [15,19],
  186. getAccessible(doc.getElementById('section-1'), nsIAccessibleText)));
  187. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, [0,2],
  188. getAccessible(doc.getElementById('s1-link-2'), nsIAccessibleText)));
  189. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  190. getAccessible(doc.getElementById('end-block'))));
  191. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,4],
  192. getAccessible(doc.getElementById('end-block'), nsIAccessibleText)));
  193. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, null, false));
  194. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  195. getAccessible(doc.getElementById('start-block'))));
  196. gQueue.push(new setVCTextInvoker(docAcc, 'moveNextByText', WORD_BOUNDARY, [0,4],
  197. getAccessible(doc.getElementById('start-block'), nsIAccessibleText)));
  198. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, null, false));
  199. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, null, false));
  200. gQueue.push(new setVCPosInvoker(docAcc, null, null,
  201. getAccessible(doc.getElementById('start-block'))));
  202. gQueue.push(new setVCTextInvoker(docAcc, 'movePreviousByText', WORD_BOUNDARY, null, false));
  203. gQueue.invoke();
  204. }
  205. SimpleTest.waitForExplicitFinish();
  206. addLoadEvent(function () {
  207. /* We open a new browser because we need to test with a top-level content
  208. document. */
  209. openBrowserWindow(
  210. doTest,
  211. getRootDirectory(window.location.href) + "doc_virtualcursor_text.html");
  212. });
  213. </script>
  214. </head>
  215. <body id="body">
  216. <a target="_blank"
  217. title="Support Movement By Granularity"
  218. href="https://bugzilla.mozilla.org/show_bug.cgi?id=886076">Mozilla Bug 886076</a>
  219. <p id="display"></p>
  220. <div id="content" style="display: none"></div>
  221. <pre id="test">
  222. </pre>
  223. </body>
  224. </html>