1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/imptests/editing/tests.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,5722 @@ 1.4 +// For the original (development) tests, we want to make a bunch of changes to 1.5 +// the page as it loads. We don't want this for the conformance tests, so let 1.6 +// them opt out. 1.7 +if (typeof testsJsLibraryOnly == "undefined" || !testsJsLibraryOnly) { 1.8 + // Alert the reader of egregious Opera bug that will make the specced 1.9 + // implementation horribly buggy 1.10 + //@{ 1.11 + (function() { 1.12 + var div = document.createElement("div"); 1.13 + div.appendChild(document.createElement("br")); 1.14 + document.body.insertBefore(div, document.body.firstChild); 1.15 + var range = document.createRange(); 1.16 + range.setStart(div, 1); 1.17 + div.insertBefore(document.createElement("p"), div.firstChild); 1.18 + if (range.startOffset > range.startContainer.childNodes.length) { 1.19 + var warningDiv = document.createElement("p"); 1.20 + document.body.insertBefore(warningDiv, document.body.firstChild); 1.21 + warningDiv.style.fontWeight = "bold"; 1.22 + warningDiv.style.fontSize = "2em"; 1.23 + warningDiv.style.color = "red"; 1.24 + warningDiv.innerHTML = 'Your browser suffers from an <a href="http://software.hixie.ch/utilities/js/live-dom-viewer/saved/1028">egregious bug</a> in range mutation that will give incorrect results for the spec columns in many cases. To ensure that the spec column contains the output actually required by the spec, use a different browser.'; 1.25 + } 1.26 + div.parentNode.removeChild(div); 1.27 + })(); 1.28 + //@} 1.29 + 1.30 + // Insert the toolbar thingie as soon as the script file is loaded 1.31 + //@{ 1.32 + (function() { 1.33 + var toolbarDiv = document.createElement("div"); 1.34 + toolbarDiv.id = "toolbar"; 1.35 + // Note: this is completely not a hack at all. 1.36 + toolbarDiv.innerHTML = "<style id=alerts>body > div > table > tbody > tr:not(.alert):not(:first-child):not(.active) { display: none }</style>" 1.37 + + "<label><input id=alert-checkbox type=checkbox accesskey=a checked onclick='updateAlertRowStyle()'> Display rows without spec <u>a</u>lerts</label>" 1.38 + + "<label><input id=browser-checkbox type=checkbox accesskey=b checked onclick='localStorage[\"display-browser-tests\"] = event.target.checked'> Run <u>b</u>rowser tests as well as spec tests</label>"; 1.39 + 1.40 + document.body.appendChild(toolbarDiv); 1.41 + })(); 1.42 + //@} 1.43 + 1.44 + // Confusingly, we're storing a string here, not a boolean. 1.45 + document.querySelector("#alert-checkbox").checked = localStorage["display-alerts"] != "false"; 1.46 + document.querySelector("#browser-checkbox").checked = localStorage["display-browser-tests"] != "false"; 1.47 + 1.48 + function updateAlertRowStyle() { 1.49 + //@{ 1.50 + var checked = document.querySelector("#alert-checkbox").checked; 1.51 + document.querySelector("#alerts").disabled = checked; 1.52 + localStorage["display-alerts"] = checked; 1.53 + } 1.54 + //@} 1.55 + updateAlertRowStyle(); 1.56 + 1.57 + // Feature-test whether the browser wraps at <wbr> or not, and set word-wrap: 1.58 + // break-word where necessary if not. (IE and Opera don't wrap, Gecko and 1.59 + // WebKit do.) word-wrap: break-word will break anywhere at all, so it looks 1.60 + // significantly uglier. 1.61 + //@{ 1.62 + (function() { 1.63 + var wordWrapTestDiv = document.createElement("div"); 1.64 + wordWrapTestDiv.style.width = "5em"; 1.65 + document.body.appendChild(wordWrapTestDiv); 1.66 + wordWrapTestDiv.innerHTML = "abc"; 1.67 + var height1 = getComputedStyle(wordWrapTestDiv).height; 1.68 + wordWrapTestDiv.innerHTML = "abc<wbr>abc<wbr>abc<wbr>abc<wbr>abc<wbr>abc"; 1.69 + var height2 = getComputedStyle(wordWrapTestDiv).height; 1.70 + document.body.removeChild(wordWrapTestDiv); 1.71 + if (height1 == height2) { 1.72 + document.body.className = (document.body.className + " wbr-workaround").trim(); 1.73 + } 1.74 + })(); 1.75 + //@} 1.76 +} 1.77 + 1.78 +// Now for the meat of the file. 1.79 +var tests = { 1.80 + backcolor: [ 1.81 + //@{ Same as hilitecolor (set below) 1.82 + ], 1.83 + //@} 1.84 + bold: [ 1.85 + //@{ 1.86 + 'foo[]bar', 1.87 + '<p>[foo</p> <p>bar]</p>', 1.88 + '<span>[foo</span> <span>bar]</span>', 1.89 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.90 + '<p>[foo<p><br><p>bar]', 1.91 + '<b>foo[]bar</b>', 1.92 + '<i>foo[]bar</i>', 1.93 + '<span>foo</span>{}<span>bar</span>', 1.94 + '<span>foo[</span><span>]bar</span>', 1.95 + 'foo[bar]baz', 1.96 + 'foo[bar<b>baz]qoz</b>quz', 1.97 + 'foo[bar<i>baz]qoz</i>quz', 1.98 + '{<p><p> <p>foo</p>}', 1.99 + 1.100 + 'foo<span contenteditable=false>[bar]</span>baz', 1.101 + 'fo[o<span contenteditable=false>bar</span>b]az', 1.102 + 'foo<span contenteditable=false>ba[r</span>b]az', 1.103 + 'fo[o<span contenteditable=false>b]ar</span>baz', 1.104 + 'fo[<b>o</b><span contenteditable=false>bar</span><b>b</b>]az', 1.105 + '<span contenteditable=false>foo<span contenteditable=true>[bar]</span>baz</span>', 1.106 + '<span contenteditable=false>fo[o<span contenteditable=true>bar</span>b]az</span>', 1.107 + '<span contenteditable=false>foo<span contenteditable=true>ba[r</span>b]az</span>', 1.108 + '<span contenteditable=false>fo[o<span contenteditable=true>b]ar</span>baz</span>', 1.109 + '<span contenteditable=false>fo[<b>o<span contenteditable=true>bar</span>b</b>]az</span>', 1.110 + 1.111 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.112 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.113 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.114 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.115 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.116 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.117 + 1.118 + 'foo<span style="font-weight: bold">[bar]</span>baz', 1.119 + 'foo<b>[bar]</b>baz', 1.120 + 'foo<b>bar</b>[baz]', 1.121 + '[foo]<b>bar</b>baz', 1.122 + '<b>foo</b>[bar]<b>baz</b>', 1.123 + 'foo<strong>bar</strong>[baz]', 1.124 + '[foo]<strong>bar</strong>baz', 1.125 + '<strong>foo</strong>[bar]<strong>baz</strong>', 1.126 + '<b>foo</b>[bar]<strong>baz</strong>', 1.127 + '<strong>foo</strong>[bar]<b>baz</b>', 1.128 + 'foo[<b>bar</b>]baz', 1.129 + 'foo[<b>bar]</b>baz', 1.130 + 'foo<b>[bar</b>]baz', 1.131 + 1.132 + 'foo{<b></b>}baz', 1.133 + 'foo{<i></i>}baz', 1.134 + 'foo{<b><i></i></b>}baz', 1.135 + 'foo{<i><b></b></i>}baz', 1.136 + 1.137 + 'foo<strong>[bar]</strong>baz', 1.138 + 'foo[<strong>bar</strong>]baz', 1.139 + 'foo[<strong>bar]</strong>baz', 1.140 + 'foo<strong>[bar</strong>]baz', 1.141 + 'foo<span style="font-weight: bold">[bar]</span>baz', 1.142 + 'foo[<span style="font-weight: bold">bar</span>]baz', 1.143 + 'foo[<span style="font-weight: bold">bar]</span>baz', 1.144 + 'foo<span style="font-weight: bold">[bar</span>]baz', 1.145 + 1.146 + '<b>{<p>foo</p><p>bar</p>}<p>baz</p></b>', 1.147 + '<b><p>foo[<i>bar</i>}</p><p>baz</p></b>', 1.148 + 1.149 + 'foo [bar <b>baz] qoz</b> quz sic', 1.150 + 'foo bar <b>baz [qoz</b> quz] sic', 1.151 + 1.152 + '<b id=purple>bar [baz] qoz</b>', 1.153 + 1.154 + 'foo<span style="font-weight: 100">[bar]</span>baz', 1.155 + 'foo<span style="font-weight: 200">[bar]</span>baz', 1.156 + 'foo<span style="font-weight: 300">[bar]</span>baz', 1.157 + 'foo<span style="font-weight: 400">[bar]</span>baz', 1.158 + 'foo<span style="font-weight: 500">[bar]</span>baz', 1.159 + 'foo<span style="font-weight: 600">[bar]</span>baz', 1.160 + 'foo<span style="font-weight: 700">[bar]</span>baz', 1.161 + 'foo<span style="font-weight: 800">[bar]</span>baz', 1.162 + 'foo<span style="font-weight: 900">[bar]</span>baz', 1.163 + 'foo<span style="font-weight: 400">[bar</span>]baz', 1.164 + 'foo<span style="font-weight: 700">[bar</span>]baz', 1.165 + 'foo[<span style="font-weight: 400">bar]</span>baz', 1.166 + 'foo[<span style="font-weight: 700">bar]</span>baz', 1.167 + 'foo[<span style="font-weight: 400">bar</span>]baz', 1.168 + 'foo[<span style="font-weight: 700">bar</span>]baz', 1.169 + '<span style="font-weight: 100">foo[bar]baz</span>', 1.170 + '<span style="font-weight: 400">foo[bar]baz</span>', 1.171 + '<span style="font-weight: 700">foo[bar]baz</span>', 1.172 + '<span style="font-weight: 900">foo[bar]baz</span>', 1.173 + '{<span style="font-weight: 100">foobar]baz</span>', 1.174 + '{<span style="font-weight: 400">foobar]baz</span>', 1.175 + '{<span style="font-weight: 700">foobar]baz</span>', 1.176 + '{<span style="font-weight: 900">foobar]baz</span>', 1.177 + '<span style="font-weight: 100">foo[barbaz</span>}', 1.178 + '<span style="font-weight: 400">foo[barbaz</span>}', 1.179 + '<span style="font-weight: 700">foo[barbaz</span>}', 1.180 + '<span style="font-weight: 900">foo[barbaz</span>}', 1.181 + 1.182 + '<h3>foo[bar]baz</h3>', 1.183 + '{<h3>foobar]baz</h3>', 1.184 + '<h3>foo[barbaz</h3>}', 1.185 + '<h3>[foobarbaz]</h3>', 1.186 + '{<h3>foobarbaz]</h3>', 1.187 + '<h3>[foobarbaz</h3>}', 1.188 + '{<h3>foobarbaz</h3>}', 1.189 + 1.190 + '<b>foo<span style="font-weight: normal">bar<b>[baz]</b>quz</span>qoz</b>', 1.191 + '<b>foo<span style="font-weight: normal">[bar]</span>baz</b>', 1.192 + 1.193 + '{<b>foo</b> <b>bar</b>}', 1.194 + '{<h3>foo</h3><b>bar</b>}', 1.195 + 1.196 + '<i><b>foo</b></i>[bar]<i><b>baz</b></i>', 1.197 + '<i><b>foo</b></i>[bar]<b>baz</b>', 1.198 + '<b>foo</b>[bar]<i><b>baz</b></i>', 1.199 + '<font color=blue face=monospace><b>foo</b></font>[bar]', 1.200 + 1.201 + 'foo<span style="font-weight: normal"><b>{bar}</b></span>baz', 1.202 + '[foo<span class=notbold>bar</span>baz]', 1.203 + '<b><span class=notbold>[foo]</span></b>', 1.204 + '<b><span class=notbold>foo[bar]baz</span></b>', 1.205 + 1.206 + '<p style="font-weight: bold">foo[bar]baz</p>', 1.207 + 1.208 + // Tests for queryCommandIndeterm() and queryCommandState() 1.209 + 'fo[o<b>b]ar</b>baz', 1.210 + 'foo<b>ba[r</b>b]az', 1.211 + 'fo[o<b>bar</b>b]az', 1.212 + 'foo[<b>b]ar</b>baz', 1.213 + 'foo<b>ba[r</b>]baz', 1.214 + 'foo[<b>bar</b>]baz', 1.215 + 'foo<b>[bar]</b>baz', 1.216 + 'foo{<b>bar</b>}baz', 1.217 + 'fo[o<span style=font-weight:bold>b]ar</span>baz', 1.218 + '<span style=font-weight:800>fo[o</span><span style=font-weight:900>b]ar</span>', 1.219 + '<span style=font-weight:700>fo[o</span><span style=font-weight:800>b]ar</span>', 1.220 + '<span style=font-weight:600>fo[o</span><span style=font-weight:700>b]ar</span>', 1.221 + '<span style=font-weight:500>fo[o</span><span style=font-weight:600>b]ar</span>', 1.222 + '<span style=font-weight:400>fo[o</span><span style=font-weight:500>b]ar</span>', 1.223 + '<span style=font-weight:300>fo[o</span><span style=font-weight:400>b]ar</span>', 1.224 + '<span style=font-weight:200>fo[o</span><span style=font-weight:300>b]ar</span>', 1.225 + '<span style=font-weight:100>fo[o</span><span style=font-weight:200>b]ar</span>', 1.226 + ], 1.227 + //@} 1.228 + createlink: [ 1.229 + //@{ 1.230 + 'foo[]bar', 1.231 + '<p>[foo</p> <p>bar]</p>', 1.232 + '<span>[foo</span> <span>bar]</span>', 1.233 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.234 + '<p>[foo<p><br><p>bar]', 1.235 + '<b>foo[]bar</b>', 1.236 + '<i>foo[]bar</i>', 1.237 + '<span>foo</span>{}<span>bar</span>', 1.238 + '<span>foo[</span><span>]bar</span>', 1.239 + 'foo[bar]baz', 1.240 + 'foo[bar<b>baz]qoz</b>quz', 1.241 + 'foo[bar<i>baz]qoz</i>quz', 1.242 + '{<p><p> <p>foo</p>}', 1.243 + 1.244 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.245 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.246 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.247 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.248 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.249 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.250 + 1.251 + '<a href=http://www.google.com/>foo[bar]baz</a>', 1.252 + '<a href=http://www.google.com/>foo[barbaz</a>}', 1.253 + '{<a href=http://www.google.com/>foobar]baz</a>', 1.254 + '{<a href=http://www.google.com/>foobarbaz</a>}', 1.255 + '<a href=http://www.google.com/>[foobarbaz]</a>', 1.256 + 1.257 + 'foo<a href=http://www.google.com/>[bar]</a>baz', 1.258 + '[foo]<a href=http://www.google.com/>bar</a>baz', 1.259 + 'foo<a href=http://www.google.com/>bar</a>[baz]', 1.260 + 'foo[<a href=http://www.google.com/>bar</a>]baz', 1.261 + 'foo<a href=http://www.google.com/>[bar</a>baz]', 1.262 + '[foo<a href=http://www.google.com/>bar]</a>baz', 1.263 + '[foo<a href=http://www.google.com/>bar</a>baz]', 1.264 + 1.265 + '<a href=otherurl>foo[bar]baz</a>', 1.266 + '<a href=otherurl>foo[barbaz</a>}', 1.267 + '{<a href=otherurl>foobar]baz</a>', 1.268 + '{<a href=otherurl>foobarbaz</a>}', 1.269 + '<a href=otherurl>[foobarbaz]</a>', 1.270 + 1.271 + 'foo<a href=otherurl>[bar]</a>baz', 1.272 + 'foo[<a href=otherurl>bar</a>]baz', 1.273 + 'foo<a href=otherurl>[bar</a>baz]', 1.274 + '[foo<a href=otherurl>bar]</a>baz', 1.275 + '[foo<a href=otherurl>bar</a>baz]', 1.276 + 1.277 + '<a href=otherurl><b>foo[bar]baz</b></a>', 1.278 + '<a href=otherurl><b>foo[barbaz</b></a>}', 1.279 + '{<a href=otherurl><b>foobar]baz</b></a>', 1.280 + '<a href=otherurl><b>[foobarbaz]</b></a>', 1.281 + 1.282 + '<a name=abc>foo[bar]baz</a>', 1.283 + '<a name=abc><b>foo[bar]baz</b></a>', 1.284 + 1.285 + ['', 'foo[bar]baz'], 1.286 + ], 1.287 + //@} 1.288 + // Opera requires this to be quoted, contrary to ES5 11.1.5 which allows 1.289 + // PropertyName to be any IdentifierName, and see 7.6 which defines 1.290 + // IdentifierName to include ReservedWord; Identifier excludes it. 1.291 + "delete": [ 1.292 + //@{ 1.293 + // Collapsed selection 1.294 + // 1.295 + // These three commented-out test call Firefox 5.0a2 to blow up, not 1.296 + // just throwing exceptions on the tests themselves but on many 1.297 + // subsequent tests too. 1.298 + //'[]foo', 1.299 + //'<span>[]foo</span>', 1.300 + //'<p>[]foo</p>', 1.301 + 'foo[]bar', 1.302 + '<span>foo</span>{}<span>bar</span>', 1.303 + '<span>foo[</span><span>]bar</span>', 1.304 + 'foo<span style=display:none>bar</span>[]baz', 1.305 + 'foo<script>bar</script>[]baz', 1.306 + 1.307 + 'foö[]bar', 1.308 + 'foö[]bar', 1.309 + 'foö̧[]bar', 1.310 + 'ö[]bar', 1.311 + 'ö[]bar', 1.312 + 'ö̧[]bar', 1.313 + 1.314 + 'שָׁ[]לוֹם', 1.315 + 'שָׁלוֹ[]ם', 1.316 + 1.317 + '<p>foo</p><p>[]bar</p>', 1.318 + '<p>foo</p>[]bar', 1.319 + 'foo<p>[]bar</p>', 1.320 + '<p>foo<br></p><p>[]bar</p>', 1.321 + '<p>foo<br></p>[]bar', 1.322 + 'foo<br><p>[]bar</p>', 1.323 + '<p>foo<br><br></p><p>[]bar</p>', 1.324 + '<p>foo<br><br></p>[]bar', 1.325 + 'foo<br><br><p>[]bar</p>', 1.326 + 1.327 + '<div><p>foo</p></div><p>[]bar</p>', 1.328 + '<p>foo</p><div><p>[]bar</p></div>', 1.329 + '<div><p>foo</p></div><div><p>[]bar</p></div>', 1.330 + '<div><p>foo</p></div>[]bar', 1.331 + 'foo<div><p>[]bar</p></div>', 1.332 + 1.333 + '<div>foo</div><div>[]bar</div>', 1.334 + '<pre>foo</pre>[]bar', 1.335 + 1.336 + 'foo<br>[]bar', 1.337 + 'foo<br><b>[]bar</b>', 1.338 + 'foo<hr>[]bar', 1.339 + '<p>foo<hr><p>[]bar', 1.340 + '<p>foo</p><br><p>[]bar</p>', 1.341 + '<p>foo</p><br><br><p>[]bar</p>', 1.342 + '<p>foo</p><img src=/img/lion.svg><p>[]bar', 1.343 + 'foo<img src=/img/lion.svg>[]bar', 1.344 + 1.345 + '<a>foo</a>[]bar', 1.346 + '<a href=/>foo</a>[]bar', 1.347 + '<a name=abc>foo</a>[]bar', 1.348 + '<a href=/ name=abc>foo</a>[]bar', 1.349 + '<span><a>foo</a></span>[]bar', 1.350 + '<span><a href=/>foo</a></span>[]bar', 1.351 + '<span><a name=abc>foo</a></span>[]bar', 1.352 + '<span><a href=/ name=abc>foo</a></span>[]bar', 1.353 + 'foo<a>[]bar</a>', 1.354 + 'foo<a href=/>[]bar</a>', 1.355 + 'foo<a name=abc>[]bar</a>', 1.356 + 'foo<a href=/ name=abc>[]bar</a>', 1.357 + 1.358 + 'foo []', 1.359 + ' [] foo', 1.360 + 'foo []bar', 1.361 + 'foo []bar', 1.362 + 'foo []bar', 1.363 + 'foo []bar', 1.364 + 'foo [] bar', 1.365 + 'foo [] bar', 1.366 + 'foo []bar', 1.367 + 'foo []<span> </span> bar', 1.368 + 'foo <span> </span>[] bar', 1.369 + 'foo <span> </span> []bar', 1.370 + '<b>foo </b> []bar', 1.371 + '<b>foo </b> []bar', 1.372 + '<b>foo </b> []bar', 1.373 + '<b>foo </b> []bar', 1.374 + '<p>foo </p><p>[] bar</p>', 1.375 + 1.376 + '<pre>foo []</pre>', 1.377 + '<pre> [] foo</pre>', 1.378 + '<pre>foo []bar</pre>', 1.379 + '<pre>foo []bar</pre>', 1.380 + '<pre>foo []bar</pre>', 1.381 + 1.382 + '<div style=white-space:pre>foo []</div>', 1.383 + '<div style=white-space:pre> [] foo</div>', 1.384 + '<div style=white-space:pre>foo []bar</div>', 1.385 + '<div style=white-space:pre>foo []bar</div>', 1.386 + '<div style=white-space:pre>foo []bar</div>', 1.387 + 1.388 + '<div style=white-space:pre-wrap>foo []</div>', 1.389 + '<div style=white-space:pre-wrap> [] foo</div>', 1.390 + '<div style=white-space:pre-wrap>foo []bar</div>', 1.391 + '<div style=white-space:pre-wrap>foo []bar</div>', 1.392 + '<div style=white-space:pre-wrap>foo []bar</div>', 1.393 + 1.394 + '<div style=white-space:pre-line>foo []</div>', 1.395 + '<div style=white-space:pre-line> [] foo</div>', 1.396 + '<div style=white-space:pre-line>foo []bar</div>', 1.397 + '<div style=white-space:pre-line>foo []bar</div>', 1.398 + '<div style=white-space:pre-line>foo []bar</div>', 1.399 + 1.400 + '<div style=white-space:nowrap>foo []</div>', 1.401 + '<div style=white-space:nowrap> [] foo</div>', 1.402 + '<div style=white-space:nowrap>foo []bar</div>', 1.403 + '<div style=white-space:nowrap>foo []bar</div>', 1.404 + '<div style=white-space:nowrap>foo []bar</div>', 1.405 + 1.406 + // Tables with collapsed selection 1.407 + 'foo<table><tr><td>[]bar</table>baz', 1.408 + 'foo<table><tr><td>bar</table>[]baz', 1.409 + '<p>foo<table><tr><td>[]bar</table><p>baz', 1.410 + '<p>foo<table><tr><td>bar</table><p>[]baz', 1.411 + '<table><tr><td>foo<td>[]bar</table>', 1.412 + '<table><tr><td>foo<tr><td>[]bar</table>', 1.413 + 1.414 + 'foo<br><table><tr><td>[]bar</table>baz', 1.415 + 'foo<table><tr><td>bar<br></table>[]baz', 1.416 + '<p>foo<br><table><tr><td>[]bar</table><p>baz', 1.417 + '<p>foo<table><tr><td>bar<br></table><p>[]baz', 1.418 + '<table><tr><td>foo<br><td>[]bar</table>', 1.419 + '<table><tr><td>foo<br><tr><td>[]bar</table>', 1.420 + 1.421 + 'foo<br><br><table><tr><td>[]bar</table>baz', 1.422 + 'foo<table><tr><td>bar<br><br></table>[]baz', 1.423 + '<p>foo<br><br><table><tr><td>[]bar</table><p>baz', 1.424 + '<p>foo<table><tr><td>bar<br><br></table><p>[]baz', 1.425 + '<table><tr><td>foo<br><br><td>[]bar</table>', 1.426 + '<table><tr><td>foo<br><br><tr><td>[]bar</table>', 1.427 + 1.428 + 'foo<hr><table><tr><td>[]bar</table>baz', 1.429 + 'foo<table><tr><td>bar<hr></table>[]baz', 1.430 + '<table><tr><td>foo<hr><td>[]bar</table>', 1.431 + '<table><tr><td>foo<hr><tr><td>[]bar</table>', 1.432 + 1.433 + // Lists with collapsed selection 1.434 + 'foo<ol><li>[]bar<li>baz</ol>', 1.435 + 'foo<br><ol><li>[]bar<li>baz</ol>', 1.436 + 'foo<br><br><ol><li>[]bar<li>baz</ol>', 1.437 + '<ol><li>foo<li>[]bar</ol>', 1.438 + '<ol><li>foo<br><li>[]bar</ol>', 1.439 + '<ol><li>foo<br><br><li>[]bar</ol>', 1.440 + '<ol><li>foo<li>[]bar<br>baz</ol>', 1.441 + '<ol><li>foo<br>bar<li>[]baz</ol>', 1.442 + 1.443 + '<ol><li><p>foo</p>{}bar</ol>', 1.444 + 1.445 + '<ol><li><p>foo<li>[]bar</ol>', 1.446 + '<ol><li>foo<li><p>[]bar</ol>', 1.447 + '<ol><li><p>foo<li><p>[]bar</ol>', 1.448 + 1.449 + '<ol><li>foo<ul><li>[]bar</ul></ol>', 1.450 + 'foo<ol><ol><li>[]bar</ol></ol>', 1.451 + 'foo<div><ol><li>[]bar</ol></div>', 1.452 + 1.453 + 'foo<dl><dt>[]bar<dd>baz</dl>', 1.454 + 'foo<dl><dd>[]bar</dl>', 1.455 + '<dl><dt>foo<dd>[]bar</dl>', 1.456 + '<dl><dt>foo<dt>[]bar<dd>baz</dl>', 1.457 + '<dl><dt>foo<dd>bar<dd>[]baz</dl>', 1.458 + 1.459 + '<ol><li>foo</ol>[]bar', 1.460 + '<ol><li>foo<br></ol>[]bar', 1.461 + '<ol><li>foo<br><br></ol>[]bar', 1.462 + '<ol><li><br></ol>[]bar', 1.463 + '<ol><li>foo<li><br></ol>[]bar', 1.464 + 1.465 + '<ol><li>foo</ol><p>[]bar', 1.466 + '<ol><li>foo<br></ol><p>[]bar', 1.467 + '<ol><li>foo<br><br></ol><p>[]bar', 1.468 + '<ol><li><br></ol><p>[]bar', 1.469 + '<ol><li>foo<li><br></ol><p>[]bar', 1.470 + 1.471 + '<ol><li>foo</ol>{}<br>', 1.472 + '<ol><li>foo<br></ol>{}<br>', 1.473 + '<ol><li>foo<br><br></ol>{}<br>', 1.474 + '<ol><li><br></ol>{}<br>', 1.475 + '<ol><li>foo<li><br></ol>{}<br>', 1.476 + 1.477 + '<ol><li>foo</ol><p>{}<br>', 1.478 + '<ol><li>foo<br></ol><p>{}<br>', 1.479 + '<ol><li>foo<br><br></ol><p>{}<br>', 1.480 + '<ol><li><br></ol><p>{}<br>', 1.481 + '<ol><li>foo<li><br></ol><p>{}<br>', 1.482 + 1.483 + // Indented stuff with collapsed selection 1.484 + 'foo<blockquote>[]bar</blockquote>', 1.485 + 'foo<blockquote><blockquote>[]bar</blockquote></blockquote>', 1.486 + 'foo<blockquote><div>[]bar</div></blockquote>', 1.487 + 'foo<blockquote style="color: blue">[]bar</blockquote>', 1.488 + 1.489 + 'foo<blockquote><blockquote><p>[]bar<p>baz</blockquote></blockquote>', 1.490 + 'foo<blockquote><div><p>[]bar<p>baz</div></blockquote>', 1.491 + 'foo<blockquote style="color: blue"><p>[]bar<p>baz</blockquote>', 1.492 + 1.493 + 'foo<blockquote><p><b>[]bar</b><p>baz</blockquote>', 1.494 + 'foo<blockquote><p><strong>[]bar</strong><p>baz</blockquote>', 1.495 + 'foo<blockquote><p><span>[]bar</span><p>baz</blockquote>', 1.496 + 1.497 + 'foo<blockquote><ol><li>[]bar</ol></blockquote><p>extra', 1.498 + 'foo<blockquote>bar<ol><li>[]baz</ol>quz</blockquote><p>extra', 1.499 + 'foo<blockquote><ol><li>bar</li><ol><li>[]baz</ol><li>quz</ol></blockquote><p>extra', 1.500 + 1.501 + // Invisible stuff with collapsed selection 1.502 + 'foo<span></span>[]bar', 1.503 + 'foo<span><span></span></span>[]bar', 1.504 + 'foo<quasit></quasit>[]bar', 1.505 + 'foo<br><span></span>[]bar', 1.506 + '<span>foo<span></span></span>[]bar', 1.507 + 'foo<span></span><span>[]bar</span>', 1.508 + 'foo<div><div><p>[]bar</div></div>', 1.509 + 'foo<div><div><p><!--abc-->[]bar</div></div>', 1.510 + 'foo<div><div><!--abc--><p>[]bar</div></div>', 1.511 + 'foo<div><!--abc--><div><p>[]bar</div></div>', 1.512 + 'foo<!--abc--><div><div><p>[]bar</div></div>', 1.513 + '<div><div><p>foo</div></div>[]bar', 1.514 + '<div><div><p>foo</div></div><!--abc-->[]bar', 1.515 + '<div><div><p>foo</div><!--abc--></div>[]bar', 1.516 + '<div><div><p>foo</p><!--abc--></div></div>[]bar', 1.517 + '<div><div><p>foo<!--abc--></div></div>[]bar', 1.518 + '<div><div><p>foo</p></div></div><div><div><div>[]bar</div></div></div>', 1.519 + '<div><div><p>foo<!--abc--></p></div></div><div><div><div>[]bar</div></div></div>', 1.520 + '<div><div><p>foo</p><!--abc--></div></div><div><div><div>[]bar</div></div></div>', 1.521 + '<div><div><p>foo</p></div><!--abc--></div><div><div><div>[]bar</div></div></div>', 1.522 + '<div><div><p>foo</p></div></div><!--abc--><div><div><div>[]bar</div></div></div>', 1.523 + '<div><div><p>foo</p></div></div><div><!--abc--><div><div>[]bar</div></div></div>', 1.524 + '<div><div><p>foo</p></div></div><div><div><!--abc--><div>[]bar</div></div></div>', 1.525 + '<div><div><p>foo</p></div></div><div><div><div><!--abc-->[]bar</div></div></div>', 1.526 + 1.527 + // Styled stuff with collapsed selection 1.528 + '<p style=color:blue>foo<p>[]bar', 1.529 + '<p style=color:blue>foo<p style=color:brown>[]bar', 1.530 + '<p style=color:blue>foo<p style=color:rgba(0,0,255,1)>[]bar', 1.531 + '<p style=color:transparent>foo<p style=color:rgba(0,0,0,0)>[]bar', 1.532 + '<p>foo<p style=color:brown>[]bar', 1.533 + '<p><font color=blue>foo</font><p>[]bar', 1.534 + '<p><font color=blue>foo</font><p><font color=brown>[]bar</font>', 1.535 + '<p>foo<p><font color=brown>[]bar</font>', 1.536 + '<p><span style=color:blue>foo</font><p>[]bar', 1.537 + '<p><span style=color:blue>foo</font><p><span style=color:brown>[]bar</font>', 1.538 + '<p>foo<p><span style=color:brown>[]bar</font>', 1.539 + 1.540 + '<p style=background-color:aqua>foo<p>[]bar', 1.541 + '<p style=background-color:aqua>foo<p style=background-color:tan>[]bar', 1.542 + '<p>foo<p style=background-color:tan>[]bar', 1.543 + '<p><span style=background-color:aqua>foo</font><p>[]bar', 1.544 + '<p><span style=background-color:aqua>foo</font><p><span style=background-color:tan>[]bar</font>', 1.545 + '<p>foo<p><span style=background-color:tan>[]bar</font>', 1.546 + 1.547 + '<p style=text-decoration:underline>foo<p>[]bar', 1.548 + '<p style=text-decoration:underline>foo<p style=text-decoration:line-through>[]bar', 1.549 + '<p>foo<p style=text-decoration:line-through>[]bar', 1.550 + '<p><u>foo</u><p>[]bar', 1.551 + '<p><u>foo</u><p><s>[]bar</s>', 1.552 + '<p>foo<p><s>[]bar</s>', 1.553 + 1.554 + '<p style=color:blue>foo</p>[]bar', 1.555 + 'foo<p style=color:brown>[]bar', 1.556 + '<div style=color:blue><p style=color:green>foo</div>[]bar', 1.557 + '<div style=color:blue><p style=color:green>foo</div><p style=color:brown>[]bar', 1.558 + '<p style=color:blue>foo<div style=color:brown><p style=color:green>[]bar', 1.559 + 1.560 + // Uncollapsed selection 1.561 + 'foo[bar]baz', 1.562 + '<p>foo<span style=color:#aBcDeF>[bar]</span>baz', 1.563 + '<p>foo<span style=color:#aBcDeF>{bar}</span>baz', 1.564 + '<p>foo{<span style=color:#aBcDeF>bar</span>}baz', 1.565 + '<p>[foo<span style=color:#aBcDeF>bar]</span>baz', 1.566 + '<p>{foo<span style=color:#aBcDeF>bar}</span>baz', 1.567 + '<p>foo<span style=color:#aBcDeF>[bar</span>baz]', 1.568 + '<p>foo<span style=color:#aBcDeF>{bar</span>baz}', 1.569 + '<p>foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz', 1.570 + 1.571 + 'foo<b>[bar]</b>baz', 1.572 + 'foo<b>{bar}</b>baz', 1.573 + 'foo{<b>bar</b>}baz', 1.574 + 'foo<span>[bar]</span>baz', 1.575 + 'foo<span>{bar}</span>baz', 1.576 + 'foo{<span>bar</span>}baz', 1.577 + '<b>foo[bar</b><i>baz]quz</i>', 1.578 + '<p>foo</p><p>[bar]</p><p>baz</p>', 1.579 + '<p>foo</p><p>{bar}</p><p>baz</p>', 1.580 + '<p>foo</p><p>{bar</p>}<p>baz</p>', 1.581 + '<p>foo</p>{<p>bar}</p><p>baz</p>', 1.582 + '<p>foo</p>{<p>bar</p>}<p>baz</p>', 1.583 + 1.584 + '<p>foo[bar<p>baz]quz', 1.585 + '<p>foo[bar<div>baz]quz</div>', 1.586 + '<p>foo[bar<h1>baz]quz</h1>', 1.587 + '<div>foo[bar</div><p>baz]quz', 1.588 + '<blockquote>foo[bar</blockquote><pre>baz]quz</pre>', 1.589 + 1.590 + '<p><b>foo[bar</b><p>baz]quz', 1.591 + '<div><p>foo[bar</div><p>baz]quz', 1.592 + '<p>foo[bar<blockquote><p>baz]quz<p>qoz</blockquote', 1.593 + '<p>foo[bar<p style=color:blue>baz]quz', 1.594 + '<p>foo[bar<p><b>baz]quz</b>', 1.595 + 1.596 + '<div><p>foo<p>[bar<p>baz]</div>', 1.597 + 1.598 + 'foo[<br>]bar', 1.599 + '<p>foo[</p><p>]bar</p>', 1.600 + '<p>foo[</p><p>]bar<br>baz</p>', 1.601 + 'foo[<p>]bar</p>', 1.602 + 'foo{<p>}bar</p>', 1.603 + 'foo[<p>]bar<br>baz</p>', 1.604 + 'foo[<p>]bar</p>baz', 1.605 + 'foo{<p>bar</p>}baz', 1.606 + 'foo<p>{bar</p>}baz', 1.607 + 'foo{<p>bar}</p>baz', 1.608 + '<p>foo[</p>]bar', 1.609 + '<p>foo{</p>}bar', 1.610 + '<p>foo[</p>]bar<br>baz', 1.611 + '<p>foo[</p>]bar<p>baz</p>', 1.612 + 'foo[<div><p>]bar</div>', 1.613 + '<div><p>foo[</p></div>]bar', 1.614 + 'foo[<div><p>]bar</p>baz</div>', 1.615 + 'foo[<div>]bar<p>baz</p></div>', 1.616 + '<div><p>foo</p>bar[</div>]baz', 1.617 + '<div>foo<p>bar[</p></div>]baz', 1.618 + 1.619 + '<p>foo<br>{</p>]bar', 1.620 + '<p>foo<br><br>{</p>]bar', 1.621 + 'foo<br>{<p>]bar</p>', 1.622 + 'foo<br><br>{<p>]bar</p>', 1.623 + '<p>foo<br>{</p><p>}bar</p>', 1.624 + '<p>foo<br><br>{</p><p>}bar</p>', 1.625 + 1.626 + '<table><tbody><tr><th>foo<th>[bar]<th>baz<tr><td>quz<td>qoz<td>qiz</table>', 1.627 + '<table><tbody><tr><th>foo<th>ba[r<th>b]az<tr><td>quz<td>qoz<td>qiz</table>', 1.628 + '<table><tbody><tr><th>fo[o<th>bar<th>b]az<tr><td>quz<td>qoz<td>qiz</table>', 1.629 + '<table><tbody><tr><th>foo<th>bar<th>ba[z<tr><td>q]uz<td>qoz<td>qiz</table>', 1.630 + '<table><tbody><tr><th>[foo<th>bar<th>baz]<tr><td>quz<td>qoz<td>qiz</table>', 1.631 + '<table><tbody><tr><th>[foo<th>bar<th>baz<tr><td>quz<td>qoz<td>qiz]</table>', 1.632 + '{<table><tbody><tr><th>foo<th>bar<th>baz<tr><td>quz<td>qoz<td>qiz</table>}', 1.633 + '<table><tbody><tr><td>foo<td>ba[r<tr><td>baz<td>quz<tr><td>q]oz<td>qiz</table>', 1.634 + '<p>fo[o<table><tr><td>b]ar</table><p>baz', 1.635 + '<p>foo<table><tr><td>ba[r</table><p>b]az', 1.636 + '<p>fo[o<table><tr><td>bar</table><p>b]az', 1.637 + 1.638 + '<p>foo<ol><li>ba[r<li>b]az</ol><p>quz', 1.639 + '<p>foo<ol><li>bar<li>[baz]</ol><p>quz', 1.640 + '<p>fo[o<ol><li>b]ar<li>baz</ol><p>quz', 1.641 + '<p>foo<ol><li>bar<li>ba[z</ol><p>q]uz', 1.642 + '<p>fo[o<ol><li>bar<li>b]az</ol><p>quz', 1.643 + '<p>fo[o<ol><li>bar<li>baz</ol><p>q]uz', 1.644 + 1.645 + '<ol><li>fo[o</ol><ol><li>b]ar</ol>', 1.646 + '<ol><li>fo[o</ol><ul><li>b]ar</ul>', 1.647 + 1.648 + 'foo[<ol><li>]bar</ol>', 1.649 + '<ol><li>foo[<li>]bar</ol>', 1.650 + 'foo[<dl><dt>]bar<dd>baz</dl>', 1.651 + 'foo[<dl><dd>]bar</dl>', 1.652 + '<dl><dt>foo[<dd>]bar</dl>', 1.653 + '<dl><dt>foo[<dt>]bar<dd>baz</dl>', 1.654 + '<dl><dt>foo<dd>bar[<dd>]baz</dl>', 1.655 + 1.656 + '<b>foo [ </b>bar]', 1.657 + 'foo<b> [ bar]</b>', 1.658 + '<b>[foo ] </b>bar', 1.659 + '[foo<b> ] bar</b>', 1.660 + 1.661 + // Do we merge based on element names or the display property? 1.662 + '<p style=display:inline>fo[o<p style=display:inline>b]ar', 1.663 + '<span style=display:block>fo[o</span><span style=display:block>b]ar</span>', 1.664 + '<span style=display:inline-block>fo[o</span><span style=display:inline-block>b]ar</span>', 1.665 + '<span style=display:inline-table>fo[o</span><span style=display:inline-table>b]ar</span>', 1.666 + '<span style=display:none>fo[o</span><span style=display:none>b]ar</span>', 1.667 + '<quasit style=display:block>fo[o</quasit><quasit style=display:block>b]ar</quasit>', 1.668 + 1.669 + // https://bugs.webkit.org/show_bug.cgi?id=35281 1.670 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13976 1.671 + '<ol><li>foo</ol>{}<br><ol><li>bar</ol>', 1.672 + '<ol><li>foo</ol><p>{}<br></p><ol><li>bar</ol>', 1.673 + '<ol><li><p>foo</ol><p>{}<br></p><ol><li>bar</ol>', 1.674 + '<ol id=a><li>foo</ol>{}<br><ol><li>bar</ol>', 1.675 + '<ol><li>foo</ol>{}<br><ol id=b><li>bar</ol>', 1.676 + '<ol id=a><li>foo</ol>{}<br><ol id=b><li>bar</ol>', 1.677 + '<ol class=a><li>foo</ol>{}<br><ol class=b><li>bar</ol>', 1.678 + // Broken test: http://www.w3.org/Bugs/Public/show_bug.cgi?id=14727 1.679 + '!<ol><ol><li>foo</ol><li>{}<br><ol><li>bar</ol></ol>', 1.680 + '<ol><ol><li>foo</ol><li>{}<br></li><ol><li>bar</ol></ol>', 1.681 + '<ol><li>foo[</ol>bar]<ol><li>baz</ol>', 1.682 + '<ol><li>foo[</ol><p>bar]<ol><li>baz</ol>', 1.683 + '<ol><li><p>foo[</ol><p>bar]<ol><li>baz</ol>', 1.684 + '<ol><li>foo[]</ol><ol><li>bar</ol>', 1.685 + '<ol><li>foo</ol>[bar<ol><li>]baz</ol>', 1.686 + '<ol><li>foo</ol><p>[bar<ol><li>]baz</ol>', 1.687 + '<ol><li>foo</ol><p>[bar<ol><li><p>]baz</ol>', 1.688 + '<ol><li>foo</ol><ol><li>b[]ar</ol>', 1.689 + '<ol><ol><li>foo[</ol><li>bar</ol>baz]<ol><li>quz</ol>', 1.690 + '<ul><li>foo</ul>{}<br><ul><li>bar</ul>', 1.691 + '<ul><li>foo</ul><p>{}<br></p><ul><li>bar</ul>', 1.692 + '<ol><li>foo[<li>bar]</ol><ol><li>baz</ol><ol><li>quz</ol>', 1.693 + '<ol><li>foo</ol>{}<br><ul><li>bar</ul>', 1.694 + '<ol><li>foo</ol><p>{}<br></p><ul><li>bar</ul>', 1.695 + '<ul><li>foo</ul>{}<br><ol><li>bar</ol>', 1.696 + '<ul><li>foo</ul><p>{}<br></p><ol><li>bar</ol>', 1.697 + 1.698 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13831 1.699 + '<p><b>[foo]</b>', 1.700 + '<p><quasit>[foo]</quasit>', 1.701 + '<p><b><i>[foo]</i></b>', 1.702 + '<p><b>{foo}</b>', 1.703 + '<p>{<b>foo</b>}', 1.704 + '<p><b>f[]</b>', 1.705 + '<b>[foo]</b>', 1.706 + '<div><b>[foo]</b></div>', 1.707 + ], 1.708 + //@} 1.709 + fontname: [ 1.710 + //@{ 1.711 + 'foo[]bar', 1.712 + '<p>[foo</p> <p>bar]</p>', 1.713 + '<span>[foo</span> <span>bar]</span>', 1.714 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.715 + '<p>[foo<p><br><p>bar]', 1.716 + '<b>foo[]bar</b>', 1.717 + '<i>foo[]bar</i>', 1.718 + '<span>foo</span>{}<span>bar</span>', 1.719 + '<span>foo[</span><span>]bar</span>', 1.720 + 'foo[bar]baz', 1.721 + 'foo[bar<b>baz]qoz</b>quz', 1.722 + 'foo[bar<i>baz]qoz</i>quz', 1.723 + '{<p><p> <p>foo</p>}', 1.724 + 1.725 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.726 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.727 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.728 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.729 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.730 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.731 + 1.732 + 'foo<code>[bar]</code>baz', 1.733 + 'foo<kbd>[bar]</kbd>baz', 1.734 + 'foo<listing>[bar]</listing>baz', 1.735 + 'foo<pre>[bar]</pre>baz', 1.736 + 'foo<samp>[bar]</samp>baz', 1.737 + 'foo<tt>[bar]</tt>baz', 1.738 + 1.739 + 'foo<code>b[a]r</code>baz', 1.740 + 'foo<kbd>b[a]r</kbd>baz', 1.741 + 'foo<listing>b[a]r</listing>baz', 1.742 + 'foo<pre>b[a]r</pre>baz', 1.743 + 'foo<samp>b[a]r</samp>baz', 1.744 + 'foo<tt>b[a]r</tt>baz', 1.745 + 1.746 + '[foo<code>bar</code>baz]', 1.747 + '[foo<kbd>bar</kbd>baz]', 1.748 + '[foo<listing>bar</listing>baz]', 1.749 + '[foo<pre>bar</pre>baz]', 1.750 + '[foo<samp>bar</samp>baz]', 1.751 + '[foo<tt>bar</tt>baz]', 1.752 + 1.753 + '[foo<code>ba]r</code>baz', 1.754 + '[foo<kbd>ba]r</kbd>baz', 1.755 + '[foo<listing>ba]r</listing>baz', 1.756 + '[foo<pre>ba]r</pre>baz', 1.757 + '[foo<samp>ba]r</samp>baz', 1.758 + '[foo<tt>ba]r</tt>baz', 1.759 + 1.760 + 'foo<code>b[ar</code>baz]', 1.761 + 'foo<kbd>b[ar</kbd>baz]', 1.762 + 'foo<listing>b[ar</listing>baz]', 1.763 + 'foo<pre>b[ar</pre>baz]', 1.764 + 'foo<samp>b[ar</samp>baz]', 1.765 + 'foo<tt>b[ar</tt>baz]', 1.766 + 1.767 + 'foo<span style="font-family: sans-serif">[bar]</span>baz', 1.768 + 'foo<span style="font-family: sans-serif">b[a]r</span>baz', 1.769 + 'foo<span style="font-family: monospace">[bar]</span>baz', 1.770 + 'foo<span style="font-family: monospace">b[a]r</span>baz', 1.771 + 1.772 + 'foo<tt contenteditable=false>ba[r</tt>b]az', 1.773 + 'fo[o<tt contenteditable=false>b]ar</tt>baz', 1.774 + 'foo<tt>{}<br></tt>bar', 1.775 + 'foo<tt>{<br></tt>}bar', 1.776 + 'foo<tt>{<br></tt>b]ar', 1.777 + 1.778 + // Tests for queryCommandIndeterm() and queryCommandState() 1.779 + 'fo[o<span style=font-family:monospace>b]ar</span>baz', 1.780 + 'foo<span style=font-family:monospace>ba[r</span>b]az', 1.781 + 'fo[o<span style=font-family:monospace>bar</span>b]az', 1.782 + 'foo[<span style=font-family:monospace>b]ar</span>baz', 1.783 + 'foo<span style=font-family:monospace>ba[r</span>]baz', 1.784 + 'foo[<span style=font-family:monospace>bar</span>]baz', 1.785 + 'foo<span style=font-family:monospace>[bar]</span>baz', 1.786 + 'foo{<span style=font-family:monospace>bar</span>}baz', 1.787 + 'fo[o<code>b]ar</code>', 1.788 + 'fo[o<kbd>b]ar</kbd>', 1.789 + 'fo[o<listing>b]ar</listing>', 1.790 + 'fo[o<pre>b]ar</pre>', 1.791 + 'fo[o<samp>b]ar</samp>', 1.792 + 'fo[o<tt>b]ar</tt>', 1.793 + '<tt>fo[o</tt><code>b]ar</code>', 1.794 + '<pre>fo[o</pre><samp>b]ar</samp>', 1.795 + '<span style=font-family:monospace>fo[o</span><kbd>b]ar</kbd>', 1.796 + ], 1.797 + //@} 1.798 + fontsize: [ 1.799 + //@{ 1.800 + 'foo[]bar', 1.801 + '<p>[foo</p> <p>bar]</p>', 1.802 + '<span>[foo</span> <span>bar]</span>', 1.803 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.804 + '<p>[foo<p><br><p>bar]', 1.805 + '<b>foo[]bar</b>', 1.806 + '<i>foo[]bar</i>', 1.807 + '<span>foo</span>{}<span>bar</span>', 1.808 + '<span>foo[</span><span>]bar</span>', 1.809 + 'foo[bar]baz', 1.810 + 'foo[bar<b>baz]qoz</b>quz', 1.811 + 'foo[bar<i>baz]qoz</i>quz', 1.812 + '{<p><p> <p>foo</p>}', 1.813 + 1.814 + ["1", 'foo[bar]baz'], 1.815 + ["0", 'foo[bar]baz'], 1.816 + ["-5", 'foo[bar]baz'], 1.817 + ["6", 'foo[bar]baz'], 1.818 + ["7", 'foo[bar]baz'], 1.819 + ["8", 'foo[bar]baz'], 1.820 + ["100", 'foo[bar]baz'], 1.821 + ["2em", 'foo[bar]baz'], 1.822 + ["20pt", 'foo[bar]baz'], 1.823 + ["xx-large", 'foo[bar]baz'], 1.824 + [" 1 ", 'foo[bar]baz'], 1.825 + ["1.", 'foo[bar]baz'], 1.826 + ["1.0", 'foo[bar]baz'], 1.827 + ["1.0e2", 'foo[bar]baz'], 1.828 + ["1.1", 'foo[bar]baz'], 1.829 + ["1.9", 'foo[bar]baz'], 1.830 + ["+0", 'foo[bar]baz'], 1.831 + ["+1", 'foo[bar]baz'], 1.832 + ["+9", 'foo[bar]baz'], 1.833 + ["-0", 'foo[bar]baz'], 1.834 + ["-1", 'foo[bar]baz'], 1.835 + ["-9", 'foo[bar]baz'], 1.836 + ["", 'foo[bar]baz'], 1.837 + 1.838 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.839 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.840 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.841 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.842 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.843 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.844 + 1.845 + 'foo<font size=1>[bar]</font>baz', 1.846 + '<font size=1>foo[bar]baz</font>', 1.847 + 'foo<font size=3>[bar]</font>baz', 1.848 + '<font size=3>foo[bar]baz</font>', 1.849 + 'foo<font size=4>[bar]</font>baz', 1.850 + '<font size=4>foo[bar]baz</font>', 1.851 + 'foo<font size=+1>[bar]</font>baz', 1.852 + '<font size=+1>foo[bar]baz</font>', 1.853 + '<font size=4>foo<font size=1>b[a]r</font>baz</font>', 1.854 + 1.855 + 'foo<span style="font-size: xx-small">[bar]</span>baz', 1.856 + '<span style="font-size: xx-small">foo[bar]baz</span>', 1.857 + 'foo<span style="font-size: medium">[bar]</span>baz', 1.858 + '<span style="font-size: medium">foo[bar]baz</span>', 1.859 + 'foo<span style="font-size: large">[bar]</span>baz', 1.860 + '<span style="font-size: large">foo[bar]baz</span>', 1.861 + '<span style="font-size: large">foo<span style="font-size: xx-small">b[a]r</span>baz</span>', 1.862 + 1.863 + 'foo<span style="font-size: 2em">[bar]</span>baz', 1.864 + '<span style="font-size: 2em">foo[bar]baz</span>', 1.865 + 1.866 + '<p style="font-size: xx-small">foo[bar]baz</p>', 1.867 + '<p style="font-size: medium">foo[bar]baz</p>', 1.868 + '<p style="font-size: large">foo[bar]baz</p>', 1.869 + '<p style="font-size: 2em">foo[bar]baz</p>', 1.870 + 1.871 + ["3", '<p style="font-size: xx-small">foo[bar]baz</p>'], 1.872 + ["3", '<p style="font-size: medium">foo[bar]baz</p>'], 1.873 + ["3", '<p style="font-size: large">foo[bar]baz</p>'], 1.874 + ["3", '<p style="font-size: 2em">foo[bar]baz</p>'], 1.875 + 1.876 + // Minor algorithm bug: this changes the size of the "b" and "r" in 1.877 + // "bar" when we pull down styles 1.878 + ["3", '<font size=6>foo <span style="font-size: 2em">b[a]r</span> baz</font>'], 1.879 + 1.880 + ["3", 'foo<big>[bar]</big>baz'], 1.881 + ["3", 'foo<big>b[a]r</big>baz'], 1.882 + ["3", 'foo<small>[bar]</small>baz'], 1.883 + ["3", 'foo<small>b[a]r</small>baz'], 1.884 + 1.885 + // Tests for queryCommandIndeterm() and queryCommandState() 1.886 + 'fo[o<font size=2>b]ar</font>baz', 1.887 + 'foo<font size=2>ba[r</font>b]az', 1.888 + 'fo[o<font size=2>bar</font>b]az', 1.889 + 'foo[<font size=2>b]ar</font>baz', 1.890 + 'foo<font size=2>ba[r</font>]baz', 1.891 + 'foo[<font size=2>bar</font>]baz', 1.892 + 'foo<font size=2>[bar]</font>baz', 1.893 + 'foo{<font size=2>bar</font>}baz', 1.894 + '<font size=1>fo[o</font><span style=font-size:xx-small>b]ar</span>', 1.895 + '<font size=2>fo[o</font><span style=font-size:small>b]ar</span>', 1.896 + '<font size=3>fo[o</font><span style=font-size:medium>b]ar</span>', 1.897 + '<font size=4>fo[o</font><span style=font-size:large>b]ar</span>', 1.898 + '<font size=5>fo[o</font><span style=font-size:x-large>b]ar</span>', 1.899 + '<font size=6>fo[o</font><span style=font-size:xx-large>b]ar</span>', 1.900 + 1.901 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13829 1.902 + ["!6", '<span style=background-color:aqua>[foo]</span>'], 1.903 + ["!6", '<span style=background-color:aqua>foo[bar]baz</span>'], 1.904 + ["!6", '[foo<span style=background-color:aqua>bar</span>baz]'], 1.905 + ], 1.906 + //@} 1.907 + forecolor: [ 1.908 + //@{ 1.909 + 'foo[]bar', 1.910 + '<p>[foo</p> <p>bar]</p>', 1.911 + '<span>[foo</span> <span>bar]</span>', 1.912 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.913 + '<p>[foo<p><br><p>bar]', 1.914 + '<b>foo[]bar</b>', 1.915 + '<i>foo[]bar</i>', 1.916 + '<span>foo</span>{}<span>bar</span>', 1.917 + '<span>foo[</span><span>]bar</span>', 1.918 + 'foo[bar]baz', 1.919 + 'foo[bar<b>baz]qoz</b>quz', 1.920 + 'foo[bar<i>baz]qoz</i>quz', 1.921 + '{<p><p> <p>foo</p>}', 1.922 + 1.923 + ['blue', 'foo[bar]baz'], 1.924 + ['f', 'foo[bar]baz'], 1.925 + ['#f', 'foo[bar]baz'], 1.926 + ['00f', 'foo[bar]baz'], 1.927 + ['#00f', 'foo[bar]baz'], 1.928 + ['0000ff', 'foo[bar]baz'], 1.929 + ['#0000ff', 'foo[bar]baz'], 1.930 + ['000000fff', 'foo[bar]baz'], 1.931 + ['#000000fff', 'foo[bar]baz'], 1.932 + ['rgb(0, 0, 255)', 'foo[bar]baz'], 1.933 + ['rgb(0%, 0%, 100%)', 'foo[bar]baz'], 1.934 + ['rgb( 0 ,0 ,255)', 'foo[bar]baz'], 1.935 + ['rgba(0, 0, 255, 0.0)', 'foo[bar]baz'], 1.936 + ['rgb(15, -10, 375)', 'foo[bar]baz'], 1.937 + ['rgba(0, 0, 0, 1)', 'foo[bar]baz'], 1.938 + ['rgba(255, 255, 255, 1)', 'foo[bar]baz'], 1.939 + ['rgba(0, 0, 255, 0.5)', 'foo[bar]baz'], 1.940 + ['hsl(240, 100%, 50%)', 'foo[bar]baz'], 1.941 + ['cornsilk', 'foo[bar]baz'], 1.942 + ['potato quiche', 'foo[bar]baz'], 1.943 + ['transparent', 'foo[bar]baz'], 1.944 + ['currentColor', 'foo[bar]baz'], 1.945 + 1.946 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.947 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.948 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.949 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.950 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.951 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.952 + 1.953 + 'foo<font color=blue>[bar]</font>baz', 1.954 + 'foo{<font color=blue>bar</font>}baz', 1.955 + '<span style="color: blue">foo<span style="color: brown">[bar]</span>baz</span>', 1.956 + '<span style="color: #00f">foo<span style="color: brown">[bar]</span>baz</span>', 1.957 + '<span style="color: #0000ff">foo<span style="color: brown">[bar]</span>baz</span>', 1.958 + '<span style="color: rgb(0, 0, 255)">foo<span style="color: brown">[bar]</span>baz</span>', 1.959 + '<font color=blue>foo<font color=brown>[bar]</font>baz</font>', 1.960 + '<span style="color: rgb(0, 0, 255)">foo<span style="color: brown">b[ar]</span>baz</span>', 1.961 + 'foo<span id=purple>ba[r</span>ba]z', 1.962 + '<span style="color: rgb(0, 0, 255)">foo<span id=purple>b[a]r</span>baz</span>', 1.963 + 1.964 + ['blue', '<a href=http://www.google.com>foo[bar]baz</a>'], 1.965 + ['#0000ff', '<a href=http://www.google.com>foo[bar]baz</a>'], 1.966 + ['rgb(0,0,255)', '<a href=http://www.google.com>foo[bar]baz</a>'], 1.967 + 1.968 + // Tests for queryCommandValue() 1.969 + '<font color="blue">[foo]</font>', 1.970 + '<font color="0000ff">[foo]</font>', 1.971 + '<font color="#0000ff">[foo]</font>', 1.972 + '<span style="color: blue">[foo]</span>', 1.973 + '<span style="color: #0000ff">[foo]</span>', 1.974 + '<span style="color: rgb(0, 0, 255)">[foo]</span>', 1.975 + '<span style="color: rgb(0%, 0%, 100%)">[foo]</span>', 1.976 + '<span style="color: rgb( 0 ,0 ,255)">[foo]</span>', 1.977 + '<span style="color: rgba(0, 0, 255, 0.0)">[foo]</span>', 1.978 + '<span style="color: rgb(15, -10, 375)">[foo]</span>', 1.979 + '<span style="color: rgba(0, 0, 0, 1)">[foo]</span>', 1.980 + '<span style="color: rgba(255, 255, 255, 1)">[foo]</span>', 1.981 + '<span style="color: rgba(0, 0, 255, 0.5)">[foo]</span>', 1.982 + '<span style="color: hsl(240, 100%, 50%)">[foo]</span>', 1.983 + '<span style="color: cornsilk">[foo]</span>', 1.984 + '<span style="color: transparent">[foo]</span>', 1.985 + '<span style="color: currentColor">[foo]</span>', 1.986 + 1.987 + // Tests for queryCommandIndeterm() and queryCommandState() 1.988 + 'fo[o<font color=brown>b]ar</font>baz', 1.989 + 'foo<font color=brown>ba[r</font>b]az', 1.990 + 'fo[o<font color=brown>bar</font>b]az', 1.991 + 'foo[<font color=brown>b]ar</font>baz', 1.992 + 'foo<font color=brown>ba[r</font>]baz', 1.993 + 'foo[<font color=brown>bar</font>]baz', 1.994 + 'foo<font color=brown>[bar]</font>baz', 1.995 + 'foo{<font color=brown>bar</font>}baz', 1.996 + '<font color=brown>fo[o</font><span style=color:brown>b]ar</span>', 1.997 + '<span style=color:brown>fo[o</span><span style=color:#0000ff>b]ar</span>', 1.998 + ], 1.999 + //@} 1.1000 + formatblock: [ 1.1001 + //@{ 1.1002 + 'foo[]bar<p>extra', 1.1003 + '<span>foo</span>{}<span>bar</span><p>extra', 1.1004 + '<span>foo[</span><span>]bar</span><p>extra', 1.1005 + 'foo[bar]baz<p>extra', 1.1006 + 'foo]bar[baz<p>extra', 1.1007 + '{<p><p> <p>foo</p>}', 1.1008 + 'foo[bar<i>baz]qoz</i>quz<p>extra', 1.1009 + 1.1010 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.1011 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.1012 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.1013 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.1014 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.1015 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.1016 + 1.1017 + '<div>[foobar]</div>', 1.1018 + '<p>[foobar]</p>', 1.1019 + '<blockquote>[foobar]</blockquote>', 1.1020 + '<h1>[foobar]</h1>', 1.1021 + '<h2>[foobar]</h2>', 1.1022 + '<h3>[foobar]</h3>', 1.1023 + '<h4>[foobar]</h4>', 1.1024 + '<h5>[foobar]</h5>', 1.1025 + '<h6>[foobar]</h6>', 1.1026 + '<dl><dt>[foo]<dd>bar</dl>', 1.1027 + '<dl><dt>foo<dd>[bar]</dl>', 1.1028 + '<dl><dt>[foo<dd>bar]</dl>', 1.1029 + '<ol><li>[foobar]</ol>', 1.1030 + '<ul><li>[foobar]</ul>', 1.1031 + '<address>[foobar]</address>', 1.1032 + '<pre>[foobar]</pre>', 1.1033 + '<article>[foobar]</article>', 1.1034 + '<ins>[foobar]</ins>', 1.1035 + '<del>[foobar]</del>', 1.1036 + '<quasit>[foobar]</quasit>', 1.1037 + '<quasit style="display: block">[foobar]</quasit>', 1.1038 + 1.1039 + ['<p>', 'foo[]bar<p>extra'], 1.1040 + ['<p>', '<span>foo</span>{}<span>bar</span><p>extra'], 1.1041 + ['<p>', '<span>foo[</span><span>]bar</span><p>extra'], 1.1042 + ['<p>', 'foo[bar]baz<p>extra'], 1.1043 + ['<p>', 'foo]bar[baz<p>extra'], 1.1044 + ['<p>', '{<p><p> <p>foo</p>}'], 1.1045 + ['<p>', 'foo[bar<i>baz]qoz</i>quz<p>extra'], 1.1046 + 1.1047 + ['<p>', '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>'], 1.1048 + ['<p>', '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>'], 1.1049 + ['<p>', '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>'], 1.1050 + ['<p>', '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>'], 1.1051 + ['<p>', '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>'], 1.1052 + ['<p>', '{<table><tr><td>foo<td>bar<td>baz</table>}'], 1.1053 + 1.1054 + ['<p>', '<div>[foobar]</div>'], 1.1055 + ['<p>', '<p>[foobar]</p>'], 1.1056 + ['<p>', '<blockquote>[foobar]</blockquote>'], 1.1057 + ['<p>', '<h1>[foobar]</h1>'], 1.1058 + ['<p>', '<h2>[foobar]</h2>'], 1.1059 + ['<p>', '<h3>[foobar]</h3>'], 1.1060 + ['<p>', '<h4>[foobar]</h4>'], 1.1061 + ['<p>', '<h5>[foobar]</h5>'], 1.1062 + ['<p>', '<h6>[foobar]</h6>'], 1.1063 + ['<p>', '<dl><dt>[foo]<dd>bar</dl>'], 1.1064 + ['<p>', '<dl><dt>foo<dd>[bar]</dl>'], 1.1065 + ['<p>', '<dl><dt>[foo<dd>bar]</dl>'], 1.1066 + ['<p>', '<ol><li>[foobar]</ol>'], 1.1067 + ['<p>', '<ul><li>[foobar]</ul>'], 1.1068 + ['<p>', '<address>[foobar]</address>'], 1.1069 + ['<p>', '<pre>[foobar]</pre>'], 1.1070 + ['<p>', '<listing>[foobar]</listing>'], 1.1071 + ['<p>', '<xmp>[foobar]</xmp>'], 1.1072 + ['<p>', '<article>[foobar]</article>'], 1.1073 + ['<p>', '<ins>[foobar]</ins>'], 1.1074 + ['<p>', '<del>[foobar]</del>'], 1.1075 + ['<p>', '<quasit>[foobar]</quasit>'], 1.1076 + ['<p>', '<quasit style="display: block">[foobar]</quasit>'], 1.1077 + 1.1078 + ['<blockquote>', '<blockquote>[foo]</blockquote><p>extra'], 1.1079 + ['<blockquote>', '<blockquote><p>[foo]<p>bar</blockquote><p>extra'], 1.1080 + ['<blockquote>', '[foo]<blockquote>bar</blockquote><p>extra'], 1.1081 + ['<blockquote>', '<p>[foo<p>bar]<p>baz'], 1.1082 + ['<blockquote>', '<section>[foo]</section>'], 1.1083 + ['<blockquote>', '<section><p>[foo]</section>'], 1.1084 + ['<blockquote>', '<section><hgroup><h1>[foo]</h1><h2>bar</h2></hgroup><p>baz</section>'], 1.1085 + ['<article>', '<section>[foo]</section>'], 1.1086 + 1.1087 + ['<address>', '<div>[foobar]</div>'], 1.1088 + ['<article>', '<div>[foobar]</div>'], 1.1089 + ['<blockquote>', '<div>[foobar]</div>'], 1.1090 + ['<dd>', '<div>[foobar]</div>'], 1.1091 + ['<del>', '<div>[foobar]</div>'], 1.1092 + ['<dl>', '<div>[foobar]</div>'], 1.1093 + ['<dt>', '<div>[foobar]</div>'], 1.1094 + ['<h1>', '<div>[foobar]</div>'], 1.1095 + ['<h2>', '<div>[foobar]</div>'], 1.1096 + ['<h3>', '<div>[foobar]</div>'], 1.1097 + ['<h4>', '<div>[foobar]</div>'], 1.1098 + ['<h5>', '<div>[foobar]</div>'], 1.1099 + ['<h6>', '<div>[foobar]</div>'], 1.1100 + ['<ins>', '<div>[foobar]</div>'], 1.1101 + ['<li>', '<div>[foobar]</div>'], 1.1102 + ['<ol>', '<div>[foobar]</div>'], 1.1103 + ['<p>', '<div>[foobar]</div>'], 1.1104 + ['<pre>', '<div>[foobar]</div>'], 1.1105 + ['<ul>', '<div>[foobar]</div>'], 1.1106 + ['<quasit>', '<div>[foobar]</div>'], 1.1107 + 1.1108 + ['<address>', '<p>[foobar]</p>'], 1.1109 + ['<article>', '<p>[foobar]</p>'], 1.1110 + ['<aside>', '<p>[foobar]</p>'], 1.1111 + ['<blockquote>', '<p>[foobar]</p>'], 1.1112 + ['<body>', '<p>[foobar]</p>'], 1.1113 + ['<dd>', '<p>[foobar]</p>'], 1.1114 + ['<del>', '<p>[foobar]</p>'], 1.1115 + ['<details>', '<p>[foobar]</p>'], 1.1116 + ['<dir>', '<p>[foobar]</p>'], 1.1117 + ['<div>', '<p>[foobar]</p>'], 1.1118 + ['<dl>', '<p>[foobar]</p>'], 1.1119 + ['<dt>', '<p>[foobar]</p>'], 1.1120 + ['<fieldset>', '<p>[foobar]</p>'], 1.1121 + ['<figcaption>', '<p>[foobar]</p>'], 1.1122 + ['<figure>', '<p>[foobar]</p>'], 1.1123 + ['<footer>', '<p>[foobar]</p>'], 1.1124 + ['<form>', '<p>[foobar]</p>'], 1.1125 + ['<h1>', '<p>[foobar]</p>'], 1.1126 + ['<h2>', '<p>[foobar]</p>'], 1.1127 + ['<h3>', '<p>[foobar]</p>'], 1.1128 + ['<h4>', '<p>[foobar]</p>'], 1.1129 + ['<h5>', '<p>[foobar]</p>'], 1.1130 + ['<h6>', '<p>[foobar]</p>'], 1.1131 + ['<header>', '<p>[foobar]</p>'], 1.1132 + ['<head>', '<p>[foobar]</p>'], 1.1133 + ['<hgroup>', '<p>[foobar]</p>'], 1.1134 + ['<hr>', '<p>[foobar]</p>'], 1.1135 + ['<html>', '<p>[foobar]</p>'], 1.1136 + ['<ins>', '<p>[foobar]</p>'], 1.1137 + ['<li>', '<p>[foobar]</p>'], 1.1138 + ['<listing>', '<p>[foobar]</p>'], 1.1139 + ['<menu>', '<p>[foobar]</p>'], 1.1140 + ['<nav>', '<p>[foobar]</p>'], 1.1141 + ['<ol>', '<p>[foobar]</p>'], 1.1142 + ['<p>', '<p>[foobar]</p>'], 1.1143 + ['<plaintext>', '<p>[foobar]</p>'], 1.1144 + ['<pre>', '<p>[foobar]</p>'], 1.1145 + ['<section>', '<p>[foobar]</p>'], 1.1146 + ['<ul>', '<p>[foobar]</p>'], 1.1147 + ['<xmp>', '<p>[foobar]</p>'], 1.1148 + ['<quasit>', '<p>[foobar]</p>'], 1.1149 + 1.1150 + ['<address>', '<p>[foo<p>bar]'], 1.1151 + ['<article>', '<p>[foo<p>bar]'], 1.1152 + ['<aside>', '<p>[foo<p>bar]'], 1.1153 + ['<blockquote>', '<p>[foo<p>bar]'], 1.1154 + ['<body>', '<p>[foo<p>bar]'], 1.1155 + ['<dd>', '<p>[foo<p>bar]'], 1.1156 + ['<del>', '<p>[foo<p>bar]'], 1.1157 + ['<details>', '<p>[foo<p>bar]'], 1.1158 + ['<dir>', '<p>[foo<p>bar]'], 1.1159 + ['<div>', '<p>[foo<p>bar]'], 1.1160 + ['<dl>', '<p>[foo<p>bar]'], 1.1161 + ['<dt>', '<p>[foo<p>bar]'], 1.1162 + ['<fieldset>', '<p>[foo<p>bar]'], 1.1163 + ['<figcaption>', '<p>[foo<p>bar]'], 1.1164 + ['<figure>', '<p>[foo<p>bar]'], 1.1165 + ['<footer>', '<p>[foo<p>bar]'], 1.1166 + ['<form>', '<p>[foo<p>bar]'], 1.1167 + ['<h1>', '<p>[foo<p>bar]'], 1.1168 + ['<h2>', '<p>[foo<p>bar]'], 1.1169 + ['<h3>', '<p>[foo<p>bar]'], 1.1170 + ['<h4>', '<p>[foo<p>bar]'], 1.1171 + ['<h5>', '<p>[foo<p>bar]'], 1.1172 + ['<h6>', '<p>[foo<p>bar]'], 1.1173 + ['<header>', '<p>[foo<p>bar]'], 1.1174 + ['<head>', '<p>[foo<p>bar]'], 1.1175 + ['<hgroup>', '<p>[foo<p>bar]'], 1.1176 + ['<hr>', '<p>[foo<p>bar]'], 1.1177 + ['<html>', '<p>[foo<p>bar]'], 1.1178 + ['<ins>', '<p>[foo<p>bar]'], 1.1179 + ['<li>', '<p>[foo<p>bar]'], 1.1180 + ['<listing>', '<p>[foo<p>bar]'], 1.1181 + ['<menu>', '<p>[foo<p>bar]'], 1.1182 + ['<nav>', '<p>[foo<p>bar]'], 1.1183 + ['<ol>', '<p>[foo<p>bar]'], 1.1184 + ['<p>', '<p>[foo<p>bar]'], 1.1185 + ['<plaintext>', '<p>[foo<p>bar]'], 1.1186 + ['<pre>', '<p>[foo<p>bar]'], 1.1187 + ['<section>', '<p>[foo<p>bar]'], 1.1188 + ['<ul>', '<p>[foo<p>bar]'], 1.1189 + ['<xmp>', '<p>[foo<p>bar]'], 1.1190 + ['<quasit>', '<p>[foo<p>bar]'], 1.1191 + 1.1192 + ['p', '<div>[foobar]</div>'], 1.1193 + 1.1194 + '<ol><li>[foo]<li>bar</ol>', 1.1195 + 1.1196 + ['<p>', '<h1>[foo]<br>bar</h1>'], 1.1197 + ['<p>', '<h1>foo<br>[bar]</h1>'], 1.1198 + ['<p>', '<h1>[foo<br>bar]</h1>'], 1.1199 + ['<address>', '<h1>[foo]<br>bar</h1>'], 1.1200 + ['<address>', '<h1>foo<br>[bar]</h1>'], 1.1201 + ['<address>', '<h1>[foo<br>bar]</h1>'], 1.1202 + ['<pre>', '<h1>[foo]<br>bar</h1>'], 1.1203 + ['<pre>', '<h1>foo<br>[bar]</h1>'], 1.1204 + ['<pre>', '<h1>[foo<br>bar]</h1>'], 1.1205 + ['<h2>', '<h1>[foo]<br>bar</h1>'], 1.1206 + ['<h2>', '<h1>foo<br>[bar]</h1>'], 1.1207 + ['<h2>', '<h1>[foo<br>bar]</h1>'], 1.1208 + 1.1209 + ['<h1>', '<p>[foo]<br>bar</p>'], 1.1210 + ['<h1>', '<p>foo<br>[bar]</p>'], 1.1211 + ['<h1>', '<p>[foo<br>bar]</p>'], 1.1212 + ['<address>', '<p>[foo]<br>bar</p>'], 1.1213 + ['<address>', '<p>foo<br>[bar]</p>'], 1.1214 + ['<address>', '<p>[foo<br>bar]</p>'], 1.1215 + ['<pre>', '<p>[foo]<br>bar</p>'], 1.1216 + ['<pre>', '<p>foo<br>[bar]</p>'], 1.1217 + ['<pre>', '<p>[foo<br>bar]</p>'], 1.1218 + 1.1219 + ['<p>', '<address>[foo]<br>bar</address>'], 1.1220 + ['<p>', '<address>foo<br>[bar]</address>'], 1.1221 + ['<p>', '<address>[foo<br>bar]</address>'], 1.1222 + ['<pre>', '<address>[foo]<br>bar</address>'], 1.1223 + ['<pre>', '<address>foo<br>[bar]</address>'], 1.1224 + ['<pre>', '<address>[foo<br>bar]</address>'], 1.1225 + ['<h1>', '<address>[foo]<br>bar</address>'], 1.1226 + ['<h1>', '<address>foo<br>[bar]</address>'], 1.1227 + ['<h1>', '<address>[foo<br>bar]</address>'], 1.1228 + 1.1229 + ['<p>', '<pre>[foo]<br>bar</pre>'], 1.1230 + ['<p>', '<pre>foo<br>[bar]</pre>'], 1.1231 + ['<p>', '<pre>[foo<br>bar]</pre>'], 1.1232 + ['<address>', '<pre>[foo]<br>bar</pre>'], 1.1233 + ['<address>', '<pre>foo<br>[bar]</pre>'], 1.1234 + ['<address>', '<pre>[foo<br>bar]</pre>'], 1.1235 + ['<h1>', '<pre>[foo]<br>bar</pre>'], 1.1236 + ['<h1>', '<pre>foo<br>[bar]</pre>'], 1.1237 + ['<h1>', '<pre>[foo<br>bar]</pre>'], 1.1238 + 1.1239 + ['<h1>', '<p>[foo</p>bar]'], 1.1240 + ['<h1>', '[foo<p>bar]</p>'], 1.1241 + ['<p>', '<div>[foo<p>bar]</p></div>'], 1.1242 + ['<p>', '<xmp>[foo]</xmp>'], 1.1243 + ['<div>', '<xmp>[foo]</xmp>'], 1.1244 + 1.1245 + '<div><ol><li>[foo]</ol></div>', 1.1246 + '<div><table><tr><td>[foo]</table></div>', 1.1247 + '<p>[foo<h1>bar]</h1>', 1.1248 + '<h1>[foo</h1><h2>bar]</h2>', 1.1249 + '<div>[foo</div>bar]', 1.1250 + 1.1251 + // https://bugs.webkit.org/show_bug.cgi?id=47054 1.1252 + ['<p>', '<div style=color:blue>[foo]</div>'], 1.1253 + // https://bugs.webkit.org/show_bug.cgi?id=47574 1.1254 + ['<h1>', '{<p>foo</p>ba]r'], 1.1255 + ['<pre>', ' [foo<p>bar]</p>'], 1.1256 + // From https://bugs.webkit.org/show_bug.cgi?id=47300 1.1257 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14009 1.1258 + ['!<p>', '{<pre> foo bar </pre>}'], 1.1259 + ], 1.1260 + //@} 1.1261 + forwarddelete: [ 1.1262 + //@{ 1.1263 + // Collapsed selection 1.1264 + 'foo[]', 1.1265 + '<span>foo[]</span>', 1.1266 + '<p>foo[]</p>', 1.1267 + 'foo[]bar', 1.1268 + '<span>foo</span>{}<span>bar</span>', 1.1269 + '<span>foo[</span><span>]bar</span>', 1.1270 + 'foo[]<span style=display:none>bar</span>baz', 1.1271 + 'foo[]<script>bar</script>baz', 1.1272 + 'fo[]öbar', 1.1273 + 'fo[]öbar', 1.1274 + 'fo[]ö̧bar', 1.1275 + '[]öbar', 1.1276 + '[]öbar', 1.1277 + '[]ö̧bar', 1.1278 + 1.1279 + '[]שָׁלוֹם', 1.1280 + 'שָׁל[]וֹם', 1.1281 + 1.1282 + '<p>foo[]</p><p>bar</p>', 1.1283 + '<p>foo[]</p>bar', 1.1284 + 'foo[]<p>bar</p>', 1.1285 + '<p>foo[]<br></p><p>bar</p>', 1.1286 + '<p>foo[]<br></p>bar', 1.1287 + 'foo[]<br><p>bar</p>', 1.1288 + 1.1289 + '<p>{}<br></p>foo', 1.1290 + '<p>{}<span><br></span></p>foo', 1.1291 + 'foo{}<p><br>', 1.1292 + 'foo{}<p><span><br></span>', 1.1293 + 'foo{}<br><p><br>', 1.1294 + 'foo{}<span><br></span><p><br>', 1.1295 + 'foo{}<br><p><span><br></span>', 1.1296 + 'foo{}<span><br></span><p><span><br></span>', 1.1297 + 'foo{}<p>', 1.1298 + '<table><tr><td>{}</table>foo', 1.1299 + '<table><tr><td>{}<br></table>foo', 1.1300 + '<table><tr><td>{}<span><br></span></table>foo', 1.1301 + 1.1302 + '<div><p>foo[]</p></div><p>bar</p>', 1.1303 + '<p>foo[]</p><div><p>bar</p></div>', 1.1304 + '<div><p>foo[]</p></div><div><p>bar</p></div>', 1.1305 + '<div><p>foo[]</p></div>bar', 1.1306 + 'foo[]<div><p>bar</p></div>', 1.1307 + 1.1308 + '<div>foo[]</div><div>bar</div>', 1.1309 + '<pre>foo[]</pre>bar', 1.1310 + 1.1311 + 'foo[]<br>bar', 1.1312 + '<b>foo[]</b><br>bar', 1.1313 + 'foo[]<hr>bar', 1.1314 + '<p>foo[]<hr><p>bar', 1.1315 + '<p>foo[]</p><br><p>bar</p>', 1.1316 + '<p>foo[]</p><br><br><p>bar</p>', 1.1317 + '<p>foo[]</p><img src=/img/lion.svg><p>bar', 1.1318 + 'foo[]<img src=/img/lion.svg>bar', 1.1319 + 1.1320 + 'foo[]<a>bar</a>', 1.1321 + 'foo[]<a href=/>bar</a>', 1.1322 + 'foo[]<a name=abc>bar</a>', 1.1323 + 'foo[]<a href=/ name=abc>bar</a>', 1.1324 + 'foo[]<span><a>bar</a></span>', 1.1325 + 'foo[]<span><a href=/>bar</a></span>', 1.1326 + 'foo[]<span><a name=abc>bar</a></span>', 1.1327 + 'foo[]<span><a href=/ name=abc>bar</a></span>', 1.1328 + '<a>foo[]</a>bar', 1.1329 + '<a href=/>foo[]</a>bar', 1.1330 + '<a name=abc>foo[]</a>bar', 1.1331 + '<a href=/ name=abc>foo[]</a>bar', 1.1332 + 1.1333 + 'foo [] ', 1.1334 + '[] foo', 1.1335 + 'foo[] bar', 1.1336 + 'foo[] bar', 1.1337 + 'foo[] bar', 1.1338 + 'foo[] bar', 1.1339 + 'foo[] bar', 1.1340 + 'foo [] bar', 1.1341 + 'foo [] bar', 1.1342 + 'foo[] <span> </span> bar', 1.1343 + 'foo []<span> </span> bar', 1.1344 + 'foo <span> </span>[] bar', 1.1345 + '<b>foo[] </b> bar', 1.1346 + '<b>foo[] </b> bar', 1.1347 + '<b>foo[] </b> bar', 1.1348 + '<b>foo[] </b> bar', 1.1349 + 1.1350 + '<pre>foo [] </pre>', 1.1351 + '<pre>[] foo</pre>', 1.1352 + '<pre>foo[] bar</pre>', 1.1353 + '<pre>foo[] bar</pre>', 1.1354 + '<pre>foo[] bar</pre>', 1.1355 + 1.1356 + '<div style=white-space:pre>foo [] </div>', 1.1357 + '<div style=white-space:pre>[] foo</div>', 1.1358 + '<div style=white-space:pre>foo[] bar</div>', 1.1359 + '<div style=white-space:pre>foo[] bar</div>', 1.1360 + '<div style=white-space:pre>foo[] bar</div>', 1.1361 + 1.1362 + '<div style=white-space:pre-wrap>foo [] </div>', 1.1363 + '<div style=white-space:pre-wrap>[] foo</div>', 1.1364 + '<div style=white-space:pre-wrap>foo[] bar</div>', 1.1365 + '<div style=white-space:pre-wrap>foo[] bar</div>', 1.1366 + '<div style=white-space:pre-wrap>foo[] bar</div>', 1.1367 + 1.1368 + '<div style=white-space:pre-line>foo [] </div>', 1.1369 + '<div style=white-space:pre-line>[] foo</div>', 1.1370 + '<div style=white-space:pre-line>foo[] bar</div>', 1.1371 + '<div style=white-space:pre-line>foo[] bar</div>', 1.1372 + '<div style=white-space:pre-line>foo[] bar</div>', 1.1373 + 1.1374 + '<div style=white-space:nowrap>foo [] </div>', 1.1375 + '<div style=white-space:nowrap>[] foo</div>', 1.1376 + '<div style=white-space:nowrap>foo[] bar</div>', 1.1377 + '<div style=white-space:nowrap>foo[] bar</div>', 1.1378 + '<div style=white-space:nowrap>foo[] bar</div>', 1.1379 + 1.1380 + // Tables with collapsed selection 1.1381 + 'foo[]<table><tr><td>bar</table>baz', 1.1382 + 'foo<table><tr><td>bar[]</table>baz', 1.1383 + '<p>foo[]<table><tr><td>bar</table><p>baz', 1.1384 + '<table><tr><td>foo[]<td>bar</table>', 1.1385 + '<table><tr><td>foo[]<tr><td>bar</table>', 1.1386 + 1.1387 + 'foo[]<br><table><tr><td>bar</table>baz', 1.1388 + 'foo<table><tr><td>bar[]<br></table>baz', 1.1389 + '<p>foo[]<br><table><tr><td>bar</table><p>baz', 1.1390 + '<p>foo<table><tr><td>bar[]<br></table><p>baz', 1.1391 + '<table><tr><td>foo[]<br><td>bar</table>', 1.1392 + '<table><tr><td>foo[]<br><tr><td>bar</table>', 1.1393 + 1.1394 + 'foo<table><tr><td>bar[]</table><br>baz', 1.1395 + 'foo[]<table><tr><td><hr>bar</table>baz', 1.1396 + '<table><tr><td>foo[]<td><hr>bar</table>', 1.1397 + '<table><tr><td>foo[]<tr><td><hr>bar</table>', 1.1398 + 1.1399 + // Lists with collapsed selection 1.1400 + 'foo[]<ol><li>bar<li>baz</ol>', 1.1401 + 'foo[]<br><ol><li>bar<li>baz</ol>', 1.1402 + '<ol><li>foo[]<li>bar</ol>', 1.1403 + '<ol><li>foo[]<br><li>bar</ol>', 1.1404 + '<ol><li>foo[]<li>bar<br>baz</ol>', 1.1405 + 1.1406 + '<ol><li><p>foo[]<li>bar</ol>', 1.1407 + '<ol><li>foo[]<li><p>bar</ol>', 1.1408 + '<ol><li><p>foo[]<li><p>bar</ol>', 1.1409 + 1.1410 + '<ol><li>foo[]<ul><li>bar</ul></ol>', 1.1411 + 'foo[]<ol><ol><li>bar</ol></ol>', 1.1412 + 'foo[]<div><ol><li>bar</ol></div>', 1.1413 + 1.1414 + 'foo[]<dl><dt>bar<dd>baz</dl>', 1.1415 + 'foo[]<dl><dd>bar</dl>', 1.1416 + '<dl><dt>foo[]<dd>bar</dl>', 1.1417 + '<dl><dt>foo[]<dt>bar<dd>baz</dl>', 1.1418 + '<dl><dt>foo<dd>bar[]<dd>baz</dl>', 1.1419 + 1.1420 + '<ol><li>foo[]</ol>bar', 1.1421 + '<ol><li>foo[]<br></ol>bar', 1.1422 + '<ol><li>{}<br></ol>bar', 1.1423 + '<ol><li>foo<li>{}<br></ol>bar', 1.1424 + 1.1425 + '<ol><li>foo[]</ol><p>bar', 1.1426 + '<ol><li>foo[]<br></ol><p>bar', 1.1427 + '<ol><li>{}<br></ol><p>bar', 1.1428 + '<ol><li>foo<li>{}<br></ol><p>bar', 1.1429 + 1.1430 + '<ol><li>foo[]</ol><br>', 1.1431 + '<ol><li>foo[]<br></ol><br>', 1.1432 + '<ol><li>{}<br></ol><br>', 1.1433 + '<ol><li>foo<li>{}<br></ol><br>', 1.1434 + 1.1435 + '<ol><li>foo[]</ol><p><br>', 1.1436 + '<ol><li>foo[]<br></ol><p><br>', 1.1437 + '<ol><li>{}<br></ol><p><br>', 1.1438 + '<ol><li>foo<li>{}<br></ol><p><br>', 1.1439 + 1.1440 + // Indented stuff with collapsed selection 1.1441 + 'foo[]<blockquote>bar</blockquote>', 1.1442 + 'foo[]<blockquote><blockquote>bar</blockquote></blockquote>', 1.1443 + 'foo[]<blockquote><div>bar</div></blockquote>', 1.1444 + 'foo[]<blockquote style="color: blue">bar</blockquote>', 1.1445 + 1.1446 + 'foo[]<blockquote><blockquote><p>bar<p>baz</blockquote></blockquote>', 1.1447 + 'foo[]<blockquote><div><p>bar<p>baz</div></blockquote>', 1.1448 + 'foo[]<blockquote style="color: blue"><p>bar<p>baz</blockquote>', 1.1449 + 1.1450 + 'foo[]<blockquote><p><b>bar</b><p>baz</blockquote>', 1.1451 + 'foo[]<blockquote><p><strong>bar</strong><p>baz</blockquote>', 1.1452 + 'foo[]<blockquote><p><span>bar</span><p>baz</blockquote>', 1.1453 + 1.1454 + 'foo[]<blockquote><ol><li>bar</ol></blockquote><p>extra', 1.1455 + 'foo[]<blockquote>bar<ol><li>baz</ol>quz</blockquote><p>extra', 1.1456 + 'foo<blockquote><ol><li>bar[]</li><ol><li>baz</ol><li>quz</ol></blockquote><p>extra', 1.1457 + 1.1458 + // Invisible stuff with collapsed selection 1.1459 + 'foo[]<span></span>bar', 1.1460 + 'foo[]<span><span></span></span>bar', 1.1461 + 'foo[]<quasit></quasit>bar', 1.1462 + 'foo[]<span></span><br>bar', 1.1463 + '<span>foo[]<span></span></span>bar', 1.1464 + 'foo[]<span></span><span>bar</span>', 1.1465 + 'foo[]<div><div><p>bar</div></div>', 1.1466 + 'foo[]<div><div><p><!--abc-->bar</div></div>', 1.1467 + 'foo[]<div><div><!--abc--><p>bar</div></div>', 1.1468 + 'foo[]<div><!--abc--><div><p>bar</div></div>', 1.1469 + 'foo[]<!--abc--><div><div><p>bar</div></div>', 1.1470 + '<div><div><p>foo[]</div></div>bar', 1.1471 + '<div><div><p>foo[]</div></div><!--abc-->bar', 1.1472 + '<div><div><p>foo[]</div><!--abc--></div>bar', 1.1473 + '<div><div><p>foo[]</p><!--abc--></div></div>bar', 1.1474 + '<div><div><p>foo[]<!--abc--></div></div>bar', 1.1475 + '<div><div><p>foo[]</p></div></div><div><div><div>bar</div></div></div>', 1.1476 + '<div><div><p>foo[]<!--abc--></p></div></div><div><div><div>bar</div></div></div>', 1.1477 + '<div><div><p>foo[]</p><!--abc--></div></div><div><div><div>bar</div></div></div>', 1.1478 + '<div><div><p>foo[]</p></div><!--abc--></div><div><div><div>bar</div></div></div>', 1.1479 + '<div><div><p>foo[]</p></div></div><!--abc--><div><div><div>bar</div></div></div>', 1.1480 + '<div><div><p>foo[]</p></div></div><div><!--abc--><div><div>bar</div></div></div>', 1.1481 + '<div><div><p>foo[]</p></div></div><div><div><!--abc--><div>bar</div></div></div>', 1.1482 + '<div><div><p>foo[]</p></div></div><div><div><div><!--abc-->bar</div></div></div>', 1.1483 + 1.1484 + // Styled stuff with collapsed selection 1.1485 + '<p style=color:blue>foo[]<p>bar', 1.1486 + '<p style=color:blue>foo[]<p style=color:brown>bar', 1.1487 + '<p>foo[]<p style=color:brown>bar', 1.1488 + '<p><font color=blue>foo[]</font><p>bar', 1.1489 + '<p><font color=blue>foo[]</font><p><font color=brown>bar</font>', 1.1490 + '<p>foo[]<p><font color=brown>bar</font>', 1.1491 + '<p><span style=color:blue>foo[]</font><p>bar', 1.1492 + '<p><span style=color:blue>foo[]</font><p><span style=color:brown>bar</font>', 1.1493 + '<p>foo[]<p><span style=color:brown>bar</font>', 1.1494 + 1.1495 + '<p style=background-color:aqua>foo[]<p>bar', 1.1496 + '<p style=background-color:aqua>foo[]<p style=background-color:tan>bar', 1.1497 + '<p>foo[]<p style=background-color:tan>bar', 1.1498 + '<p><span style=background-color:aqua>foo[]</font><p>bar', 1.1499 + '<p><span style=background-color:aqua>foo[]</font><p><span style=background-color:tan>bar</font>', 1.1500 + '<p>foo[]<p><span style=background-color:tan>bar</font>', 1.1501 + 1.1502 + '<p style=text-decoration:underline>foo[]<p>bar', 1.1503 + '<p style=text-decoration:underline>foo[]<p style=text-decoration:line-through>bar', 1.1504 + '<p>foo[]<p style=text-decoration:line-through>bar', 1.1505 + '<p><u>foo[]</u><p>bar', 1.1506 + '<p><u>foo[]</u><p><s>bar</s>', 1.1507 + '<p>foo[]<p><s>bar</s>', 1.1508 + 1.1509 + '<p style=color:blue>foo[]</p>bar', 1.1510 + 'foo[]<p style=color:brown>bar', 1.1511 + '<div style=color:blue><p style=color:green>foo[]</div>bar', 1.1512 + '<div style=color:blue><p style=color:green>foo[]</div><p style=color:brown>bar', 1.1513 + '<p style=color:blue>foo[]<div style=color:brown><p style=color:green>bar', 1.1514 + 1.1515 + // Uncollapsed selection (should be same as delete command) 1.1516 + 'foo[bar]baz', 1.1517 + '<p>foo<span style=color:#aBcDeF>[bar]</span>baz', 1.1518 + '<p>foo<span style=color:#aBcDeF>{bar}</span>baz', 1.1519 + '<p>foo{<span style=color:#aBcDeF>bar</span>}baz', 1.1520 + '<p>[foo<span style=color:#aBcDeF>bar]</span>baz', 1.1521 + '<p>{foo<span style=color:#aBcDeF>bar}</span>baz', 1.1522 + '<p>foo<span style=color:#aBcDeF>[bar</span>baz]', 1.1523 + '<p>foo<span style=color:#aBcDeF>{bar</span>baz}', 1.1524 + '<p>foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz', 1.1525 + 1.1526 + 'foo<b>[bar]</b>baz', 1.1527 + 'foo<b>{bar}</b>baz', 1.1528 + 'foo{<b>bar</b>}baz', 1.1529 + 'foo<span>[bar]</span>baz', 1.1530 + 'foo<span>{bar}</span>baz', 1.1531 + 'foo{<span>bar</span>}baz', 1.1532 + '<b>foo[bar</b><i>baz]quz</i>', 1.1533 + '<p>foo</p><p>[bar]</p><p>baz</p>', 1.1534 + '<p>foo</p><p>{bar}</p><p>baz</p>', 1.1535 + '<p>foo</p><p>{bar</p>}<p>baz</p>', 1.1536 + '<p>foo</p>{<p>bar}</p><p>baz</p>', 1.1537 + '<p>foo</p>{<p>bar</p>}<p>baz</p>', 1.1538 + 1.1539 + '<p>foo[bar<p>baz]quz', 1.1540 + '<p>foo[bar<div>baz]quz</div>', 1.1541 + '<p>foo[bar<h1>baz]quz</h1>', 1.1542 + '<div>foo[bar</div><p>baz]quz', 1.1543 + '<blockquote>foo[bar</blockquote><pre>baz]quz</pre>', 1.1544 + 1.1545 + '<p><b>foo[bar</b><p>baz]quz', 1.1546 + '<div><p>foo[bar</div><p>baz]quz', 1.1547 + '<p>foo[bar<blockquote><p>baz]quz<p>qoz</blockquote', 1.1548 + '<p>foo[bar<p style=color:blue>baz]quz', 1.1549 + '<p>foo[bar<p><b>baz]quz</b>', 1.1550 + 1.1551 + '<div><p>foo<p>[bar<p>baz]</div>', 1.1552 + 1.1553 + 'foo[<br>]bar', 1.1554 + '<p>foo[</p><p>]bar</p>', 1.1555 + '<p>foo[</p><p>]bar<br>baz</p>', 1.1556 + 'foo[<p>]bar</p>', 1.1557 + 'foo{<p>}bar</p>', 1.1558 + 'foo[<p>]bar<br>baz</p>', 1.1559 + 'foo[<p>]bar</p>baz', 1.1560 + 'foo{<p>bar</p>}baz', 1.1561 + 'foo<p>{bar</p>}baz', 1.1562 + 'foo{<p>bar}</p>baz', 1.1563 + '<p>foo[</p>]bar', 1.1564 + '<p>foo{</p>}bar', 1.1565 + '<p>foo[</p>]bar<br>baz', 1.1566 + '<p>foo[</p>]bar<p>baz</p>', 1.1567 + 'foo[<div><p>]bar</div>', 1.1568 + '<div><p>foo[</p></div>]bar', 1.1569 + 'foo[<div><p>]bar</p>baz</div>', 1.1570 + 'foo[<div>]bar<p>baz</p></div>', 1.1571 + '<div><p>foo</p>bar[</div>]baz', 1.1572 + '<div>foo<p>bar[</p></div>]baz', 1.1573 + 1.1574 + '<p>foo<br>{</p>]bar', 1.1575 + '<p>foo<br><br>{</p>]bar', 1.1576 + 'foo<br>{<p>]bar</p>', 1.1577 + 'foo<br><br>{<p>]bar</p>', 1.1578 + '<p>foo<br>{</p><p>}bar</p>', 1.1579 + '<p>foo<br><br>{</p><p>}bar</p>', 1.1580 + 1.1581 + '<table><tbody><tr><th>foo<th>[bar]<th>baz<tr><td>quz<td>qoz<td>qiz</table>', 1.1582 + '<table><tbody><tr><th>foo<th>ba[r<th>b]az<tr><td>quz<td>qoz<td>qiz</table>', 1.1583 + '<table><tbody><tr><th>fo[o<th>bar<th>b]az<tr><td>quz<td>qoz<td>qiz</table>', 1.1584 + '<table><tbody><tr><th>foo<th>bar<th>ba[z<tr><td>q]uz<td>qoz<td>qiz</table>', 1.1585 + '<table><tbody><tr><th>[foo<th>bar<th>baz]<tr><td>quz<td>qoz<td>qiz</table>', 1.1586 + '<table><tbody><tr><th>[foo<th>bar<th>baz<tr><td>quz<td>qoz<td>qiz]</table>', 1.1587 + '{<table><tbody><tr><th>foo<th>bar<th>baz<tr><td>quz<td>qoz<td>qiz</table>}', 1.1588 + '<table><tbody><tr><td>foo<td>ba[r<tr><td>baz<td>quz<tr><td>q]oz<td>qiz</table>', 1.1589 + '<p>fo[o<table><tr><td>b]ar</table><p>baz', 1.1590 + '<p>foo<table><tr><td>ba[r</table><p>b]az', 1.1591 + '<p>fo[o<table><tr><td>bar</table><p>b]az', 1.1592 + 1.1593 + '<p>foo<ol><li>ba[r<li>b]az</ol><p>quz', 1.1594 + '<p>foo<ol><li>bar<li>[baz]</ol><p>quz', 1.1595 + '<p>fo[o<ol><li>b]ar<li>baz</ol><p>quz', 1.1596 + '<p>foo<ol><li>bar<li>ba[z</ol><p>q]uz', 1.1597 + '<p>fo[o<ol><li>bar<li>b]az</ol><p>quz', 1.1598 + '<p>fo[o<ol><li>bar<li>baz</ol><p>q]uz', 1.1599 + 1.1600 + '<ol><li>fo[o</ol><ol><li>b]ar</ol>', 1.1601 + '<ol><li>fo[o</ol><ul><li>b]ar</ul>', 1.1602 + 1.1603 + 'foo[<ol><li>]bar</ol>', 1.1604 + '<ol><li>foo[<li>]bar</ol>', 1.1605 + 'foo[<dl><dt>]bar<dd>baz</dl>', 1.1606 + 'foo[<dl><dd>]bar</dl>', 1.1607 + '<dl><dt>foo[<dd>]bar</dl>', 1.1608 + '<dl><dt>foo[<dt>]bar<dd>baz</dl>', 1.1609 + '<dl><dt>foo<dd>bar[<dd>]baz</dl>', 1.1610 + 1.1611 + // https://bugs.webkit.org/show_bug.cgi?id=35281 1.1612 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13976 1.1613 + '<ol><li>foo</ol>{}<br><ol><li>bar</ol>', 1.1614 + '<ol><li>foo</ol><p>{}<br></p><ol><li>bar</ol>', 1.1615 + '<ol><li><p>foo</ol><p>{}<br></p><ol><li>bar</ol>', 1.1616 + '<ol id=a><li>foo</ol>{}<br><ol><li>bar</ol>', 1.1617 + '<ol><li>foo</ol>{}<br><ol id=b><li>bar</ol>', 1.1618 + '<ol id=a><li>foo</ol>{}<br><ol id=b><li>bar</ol>', 1.1619 + '<ol class=a><li>foo</ol>{}<br><ol class=b><li>bar</ol>', 1.1620 + '<ol><ol><li>foo</ol><li>{}<br><ol><li>bar</ol></ol>', 1.1621 + '<ol><ol><li>foo</ol><li>{}<br></li><ol><li>bar</ol></ol>', 1.1622 + '<ol><li>foo[</ol>bar]<ol><li>baz</ol>', 1.1623 + '<ol><li>foo[</ol><p>bar]<ol><li>baz</ol>', 1.1624 + '<ol><li><p>foo[</ol><p>bar]<ol><li>baz</ol>', 1.1625 + '<ol><li>fo[]o</ol><ol><li>bar</ol>', 1.1626 + '<ol><li>foo</ol>[bar<ol><li>]baz</ol>', 1.1627 + '<ol><li>foo</ol><p>[bar<ol><li>]baz</ol>', 1.1628 + '<ol><li>foo</ol><p>[bar<ol><li><p>]baz</ol>', 1.1629 + '<ol><li>foo</ol><ol><li>[]bar</ol>', 1.1630 + '<ol><ol><li>foo[</ol><li>bar</ol>baz]<ol><li>quz</ol>', 1.1631 + '<ul><li>foo</ul>{}<br><ul><li>bar</ul>', 1.1632 + '<ul><li>foo</ul><p>{}<br></p><ul><li>bar</ul>', 1.1633 + '<ol><li>foo[<li>bar]</ol><ol><li>baz</ol><ol><li>quz</ol>', 1.1634 + '<ol><li>foo</ol>{}<br><ul><li>bar</ul>', 1.1635 + '<ol><li>foo</ol><p>{}<br></p><ul><li>bar</ul>', 1.1636 + '<ul><li>foo</ul>{}<br><ol><li>bar</ol>', 1.1637 + '<ul><li>foo</ul><p>{}<br></p><ol><li>bar</ol>', 1.1638 + 1.1639 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13831 1.1640 + '<p><b>[foo]</b>', 1.1641 + '<p><quasit>[foo]</quasit>', 1.1642 + '<p><b><i>[foo]</i></b>', 1.1643 + '<p><b>{foo}</b>', 1.1644 + '<p>{<b>foo</b>}', 1.1645 + '<p><b>[]f</b>', 1.1646 + '<b>[foo]</b>', 1.1647 + '<div><b>[foo]</b></div>', 1.1648 + ], 1.1649 + //@} 1.1650 + hilitecolor: [ 1.1651 + //@{ 1.1652 + 'foo[]bar', 1.1653 + '<p>[foo</p> <p>bar]</p>', 1.1654 + '<span>[foo</span> <span>bar]</span>', 1.1655 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.1656 + '<p>[foo<p><br><p>bar]', 1.1657 + '<b>foo[]bar</b>', 1.1658 + '<i>foo[]bar</i>', 1.1659 + '<span>foo</span>{}<span>bar</span>', 1.1660 + '<span>foo[</span><span>]bar</span>', 1.1661 + 'foo[bar]baz', 1.1662 + 'foo[bar<b>baz]qoz</b>quz', 1.1663 + 'foo[bar<i>baz]qoz</i>quz', 1.1664 + '{<p><p> <p>foo</p>}', 1.1665 + 1.1666 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.1667 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.1668 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.1669 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.1670 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.1671 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.1672 + 1.1673 + '<p style="background-color: rgb(0, 255, 255)">foo[bar]baz</p>', 1.1674 + '<p style="background-color: #00ffff">foo[bar]baz</p>', 1.1675 + '<p style="background-color: aqua">foo[bar]baz</p>', 1.1676 + '{<p style="background-color: aqua">foo</p><p>bar</p>}', 1.1677 + '<span style="background-color: aqua">foo<span style="background-color: tan">[bar]</span>baz</span>', 1.1678 + '<span style="background-color: #00ffff">foo<span style="background-color: tan">[bar]</span>baz</span>', 1.1679 + '<span style="background-color: #0ff">foo<span style="background-color: tan">[bar]</span>baz</span>', 1.1680 + '<span style="background-color: rgb(0, 255, 255)">foo<span style="background-color: tan">[bar]</span>baz</span>', 1.1681 + '<span style="background-color: aqua">foo<span style="background-color: tan">b[ar]</span>baz</span>', 1.1682 + '<p style="background-color: aqua">foo<span style="background-color: tan">b[ar]</span>baz</p>', 1.1683 + '<div style="background-color: aqua"><p style="background-color: tan">b[ar]</p></div>', 1.1684 + '<span style="display: block; background-color: aqua"><span style="display: block; background-color: tan">b[ar]</span></span>', 1.1685 + 1.1686 + // Tests for queryCommandIndeterm() and queryCommandState() 1.1687 + 'fo[o<span style=background-color:tan>b]ar</span>baz', 1.1688 + 'foo<span style=background-color:tan>ba[r</span>b]az', 1.1689 + 'fo[o<span style=background-color:tan>bar</span>b]az', 1.1690 + 'foo[<span style=background-color:tan>b]ar</span>baz', 1.1691 + 'foo<span style=background-color:tan>ba[r</span>]baz', 1.1692 + 'foo[<span style=background-color:tan>bar</span>]baz', 1.1693 + 'foo<span style=background-color:tan>[bar]</span>baz', 1.1694 + 'foo{<span style=background-color:tan>bar</span>}baz', 1.1695 + '<span style=background-color:tan>fo[o</span><span style=background-color:yellow>b]ar</span>', 1.1696 + '<span style=background-color:tan>fo[o</span><span style=background-color:tan>b]ar</span>', 1.1697 + '<span style=background-color:tan>fo[o<span style=background-color:transparent>b]ar</span></span>', 1.1698 + 1.1699 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13829 1.1700 + '!<font size=6>[foo]</font>', 1.1701 + '!<span style=font-size:xx-large>[foo]</span>', 1.1702 + '!<font size=6>foo[bar]baz</font>', 1.1703 + '!<span style=font-size:xx-large>foo[bar]baz</span>', 1.1704 + '![foo<font size=6>bar</font>baz]', 1.1705 + '![foo<span style=font-size:xx-large>bar</span>baz]', 1.1706 + ], 1.1707 + //@} 1.1708 + indent: [ 1.1709 + //@{ 1.1710 + // All these have a trailing unselected paragraph, because otherwise 1.1711 + // Gecko is unhappy: it throws exceptions in non-CSS mode, and in CSS 1.1712 + // mode it adds the indentation invisibly to the wrapper div in many 1.1713 + // cases. 1.1714 + 'foo[]bar<p>extra', 1.1715 + '<span>foo</span>{}<span>bar</span><p>extra', 1.1716 + '<span>foo[</span><span>]bar</span><p>extra', 1.1717 + 'foo[bar]baz<p>extra', 1.1718 + '<p dir=rtl>פו[בר]בז<p dir=rtl>נוםף', 1.1719 + '<p dir=rtl>פו[ברבז<p>Foobar]baz<p>Extra', 1.1720 + '<p>Foo[barbaz<p dir=rtl>פובר]בז<p>Extra', 1.1721 + '<div><p>Foo[barbaz<p dir=rtl>פובר]בז</div><p>Extra', 1.1722 + 'foo]bar[baz<p>extra', 1.1723 + '{<p><p> <p>foo</p>}<p>extra', 1.1724 + 'foo[bar<i>baz]qoz</i>quz<p>extra', 1.1725 + '[]foo<p>extra', 1.1726 + 'foo[]<p>extra', 1.1727 + '<p>[]foo<p>extra', 1.1728 + '<p>foo[]<p>extra', 1.1729 + '<p>{}<br>foo</p><p>extra', 1.1730 + '<p>foo<br>{}</p><p>extra', 1.1731 + '<span>{}<br>foo</span>bar<p>extra', 1.1732 + '<span>foo<br>{}</span>bar<p>extra', 1.1733 + '<p>foo</p>{}<p>bar</p>', 1.1734 + 1.1735 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.1736 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.1737 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.1738 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.1739 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.1740 + '{<table><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.1741 + 1.1742 + '<p>foo[bar]</p><p>baz</p><p>extra', 1.1743 + '<p>[foobar</p><p>ba]z</p><p>extra', 1.1744 + 'foo[bar]<br>baz<p>extra', 1.1745 + 'foo[bar]<br><br><br><br>baz<p>extra', 1.1746 + 'foobar<br>[ba]z<p>extra', 1.1747 + 'foobar<br><br><br><br>[ba]z<p>extra', 1.1748 + 'foo[bar<br>ba]z<p>extra', 1.1749 + '<div>foo<p>[bar]</p>baz</div><p>extra', 1.1750 + 1.1751 + // These mimic existing indentation in various browsers, to see how 1.1752 + // they cope with indenting twice. This is spec, Gecko non-CSS, and 1.1753 + // Opera: 1.1754 + '<blockquote><p>foo[bar]</p><p>baz</p></blockquote><p>extra', 1.1755 + '<blockquote><p>foo[bar</p><p>b]az</p></blockquote><p>extra', 1.1756 + '<blockquote><p>foo[bar]</p></blockquote><p>baz</p><p>extra', 1.1757 + '<blockquote><p>foo[bar</p></blockquote><p>b]az</p><p>extra', 1.1758 + '<p>[foo]<blockquote><p>bar</blockquote><p>extra', 1.1759 + '<p>[foo<blockquote><p>b]ar</blockquote><p>extra', 1.1760 + '<p>foo<blockquote><p>bar</blockquote><p>[baz]<p>extra', 1.1761 + '<p>foo<blockquote><p>[bar</blockquote><p>baz]<p>extra', 1.1762 + '<p>[foo<blockquote><p>bar</blockquote><p>baz]<p>extra', 1.1763 + '<blockquote><p>foo</blockquote><p>[bar]<blockquote><p>baz</blockquote><p>extra', 1.1764 + 1.1765 + '<blockquote>foo[bar]<br>baz</blockquote><p>extra', 1.1766 + '<blockquote>foo[bar<br>b]az</blockquote><p>extra', 1.1767 + '<blockquote>foo[bar]</blockquote>baz<p>extra', 1.1768 + '<blockquote>foo[bar</blockquote>b]az<p>extra', 1.1769 + '[foo]<blockquote>bar</blockquote><p>extra', 1.1770 + '[foo<blockquote>b]ar</blockquote><p>extra', 1.1771 + 'foo<blockquote>bar</blockquote>[baz]<p>extra', 1.1772 + '[foo<blockquote>bar</blockquote>baz]<p>extra', 1.1773 + '<blockquote>foo</blockquote>[bar]<blockquote>baz</blockquote><p>extra', 1.1774 + 1.1775 + // IE: 1.1776 + '<blockquote style="margin-right: 0" dir="ltr"><p>foo[bar]</p><p>baz</p></blockquote><p>extra', 1.1777 + '<blockquote style="margin-right: 0" dir="ltr"><p>foo[bar</p><p>b]az</p></blockquote><p>extra', 1.1778 + '<blockquote style="margin-right: 0" dir="ltr"><p>foo[bar]</p></blockquote><p>baz</p><p>extra', 1.1779 + '<blockquote style="margin-right: 0" dir="ltr"><p>foo[bar</p></blockquote><p>b]az</p><p>extra', 1.1780 + '<p>[foo]<blockquote style="margin-right: 0" dir="ltr"><p>bar</blockquote><p>extra', 1.1781 + '<p>[foo<blockquote style="margin-right: 0" dir="ltr"><p>b]ar</blockquote><p>extra', 1.1782 + '<p>foo<blockquote style="margin-right: 0" dir="ltr"><p>bar</blockquote><p>[baz]<p>extra', 1.1783 + '<p>foo<blockquote style="margin-right: 0" dir="ltr"><p>[bar</blockquote><p>baz]<p>extra', 1.1784 + '<p>[foo<blockquote style="margin-right: 0" dir="ltr"><p>bar</blockquote><p>baz]<p>extra', 1.1785 + '<blockquote style="margin-right: 0" dir="ltr"><p>foo</blockquote><p>[bar]<blockquote style="margin-right: 0" dir="ltr"><p>baz</blockquote><p>extra', 1.1786 + 1.1787 + // Firefox CSS mode: 1.1788 + '<p style="margin-left: 40px">foo[bar]</p><p style="margin-left: 40px">baz</p><p>extra', 1.1789 + '<p style="margin-left: 40px">foo[bar</p><p style="margin-left: 40px">b]az</p><p>extra', 1.1790 + '<p style="margin-left: 40px">foo[bar]</p><p>baz</p><p>extra', 1.1791 + '<p style="margin-left: 40px">foo[bar</p><p>b]az</p><p>extra', 1.1792 + '<p>[foo]<p style="margin-left: 40px">bar<p>extra', 1.1793 + '<p>[foo<p style="margin-left: 40px">b]ar<p>extra', 1.1794 + '<p>foo<p style="margin-left: 40px">bar<p>[baz]<p>extra', 1.1795 + '<p>foo<p style="margin-left: 40px">[bar<p>baz]<p>extra', 1.1796 + '<p>[foo<p style="margin-left: 40px">bar<p>baz]<p>extra', 1.1797 + '<p style="margin-left: 40px">foo<p>[bar]<p style="margin-left: 40px">baz<p>extra', 1.1798 + 1.1799 + // WebKit: 1.1800 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>foo[bar]</p><p>baz</p></blockquote><p>extra', 1.1801 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>foo[bar</p><p>b]az</p></blockquote><p>extra', 1.1802 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>foo[bar]</p></blockquote><p>baz</p><p>extra', 1.1803 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>foo[bar</p></blockquote><p>b]az</p><p>extra', 1.1804 + '<p>[foo]<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>bar</blockquote><p>extra', 1.1805 + '<p>[foo<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>b]ar</blockquote><p>extra', 1.1806 + '<p>foo<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>bar</blockquote><p>[baz]<p>extra', 1.1807 + '<p>foo<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>[bar</blockquote><p>baz]<p>extra', 1.1808 + '<p>[foo<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>bar</blockquote><p>baz]<p>extra', 1.1809 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>foo</blockquote><p>[bar]<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px"><p>baz</blockquote><p>extra', 1.1810 + 1.1811 + // MDC says "In Firefox, if the selection spans multiple lines at 1.1812 + // different levels of indentation, only the least indented lines in 1.1813 + // the selection will be indented." Let's test that. 1.1814 + '<blockquote>f[oo<blockquote>b]ar</blockquote></blockquote><p>extra', 1.1815 + 1.1816 + // Lists! 1.1817 + '<ol><li>foo<li>[bar]<li>baz</ol>', 1.1818 + '<ol data-start=1 data-end=2><li>foo<li>bar<li>baz</ol>', 1.1819 + '<ol><li>foo</ol>[bar]', 1.1820 + '<ol><li>[foo]<br>bar<li>baz</ol>', 1.1821 + '<ol><li>foo<br>[bar]<li>baz</ol>', 1.1822 + '<ol><li><div>[foo]</div>bar<li>baz</ol>', 1.1823 + '<ol><li>foo<ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.1824 + '<ol><li>foo<ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.1825 + '<ol><li>foo</li><ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.1826 + '<ol><li>foo</li><ol data-start=0 data-end=1><li>bar<li>baz</ol><li>quz</ol>', 1.1827 + '<ol><li>foo</li><ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.1828 + '<ol><li>foo</li><ol data-start=1 data-end=2><li>bar<li>baz</ol><li>quz</ol>', 1.1829 + '<ol><li>foo<ol><li>b[a]r</ol><li>baz</ol>', 1.1830 + '<ol><li>foo</li><ol><li>b[a]r</ol><li>baz</ol>', 1.1831 + '<ol><li>foo{<ol><li>bar</ol>}<li>baz</ol>', 1.1832 + '<ol><li>foo</li>{<ol><li>bar</ol>}<li>baz</ol>', 1.1833 + '<ol><li>[foo]<ol><li>bar</ol><li>baz</ol>', 1.1834 + '<ol><li>[foo]</li><ol><li>bar</ol><li>baz</ol>', 1.1835 + '<ol><li>foo<li>[bar]<ol><li>baz</ol><li>quz</ol>', 1.1836 + '<ol><li>foo<li>[bar]</li><ol><li>baz</ol><li>quz</ol>', 1.1837 + '<ol><li>foo<ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.1838 + '<ol><li>foo</li><ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.1839 + 1.1840 + // Lists with id's: 1.1841 + // http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-July/020721.html 1.1842 + '<ol><ol id=u1><li id=i1>foo</ol><li id=i2>[bar]</li><ol id=u3><li id=i3>baz</ol></ol>', 1.1843 + '<ol><ol><li id=i1>foo</ol><li id=i2>[bar]</li><ol id=u3><li id=i3>baz</ol></ol>', 1.1844 + '<ol><ol id=u1><li id=i1>foo</ol><li id=i2>[bar]</li><ol><li id=i3>baz</ol></ol>', 1.1845 + '<ol><li id=i2>[bar]</li><ol id=u3><li id=i3>baz</ol></ol>', 1.1846 + '<ol><ol id=u1><li id=i1>foo</ol><li id=i2>[bar]</ol>', 1.1847 + 1.1848 + // Try indenting multiple items at once. 1.1849 + '<ol><li>foo<li>b[ar<li>baz]</ol>', 1.1850 + '<ol><li>[foo<ol><li>bar]</ol><li>baz</ol>', 1.1851 + '<ol><li>[foo</li><ol><li>bar]</ol><li>baz</ol>', 1.1852 + '<ol><li>foo<ol><li>b[ar</ol><li>b]az</ol>', 1.1853 + '<ol><li>foo</li><ol><li>b[ar</ol><li>b]az</ol>', 1.1854 + '<ol><li>[foo<ol><li>bar</ol><li>baz]</ol><p>extra', 1.1855 + '<ol><li>[foo</li><ol><li>bar</ol><li>baz]</ol><p>extra', 1.1856 + 1.1857 + // We probably can't actually get this DOM . . . 1.1858 + '<ol><li>[foo]<ol><li>bar</ol>baz</ol>', 1.1859 + '<ol><li>foo<ol><li>[bar]</ol>baz</ol>', 1.1860 + '<ol><li>foo<ol><li>bar</ol>[baz]</ol>', 1.1861 + '<ol><li>[foo<ol><li>bar]</ol>baz</ol>', 1.1862 + 1.1863 + 'foo<!--bar-->[baz]<p>extra', 1.1864 + '[foo]<!--bar-->baz<p>extra', 1.1865 + '<p>foo<!--bar-->{}<p>extra', 1.1866 + '<p>{}<!--foo-->bar<p>extra', 1.1867 + 1.1868 + // Whitespace nodes 1.1869 + '<blockquote><p>foo</blockquote> <p>[bar]', 1.1870 + '<p>[foo]</p> <blockquote><p>bar</blockquote>', 1.1871 + '<blockquote><p>foo</blockquote> <p>[bar]</p> <blockquote><p>baz</blockquote>', 1.1872 + '<ol><li>foo</li><ol><li>bar</li> </ol><li>[baz]</ol>', 1.1873 + '<ol><li>foo</li><ol><li>bar</li></ol> <li>[baz]</ol>', 1.1874 + '<ol><li>foo</li><ol><li>bar</li> </ol> <li>[baz]</ol>', 1.1875 + '<ol><li>foo<ol><li>bar</li> </ol></li><li>[baz]</ol>', 1.1876 + '<ol><li>foo<ol><li>bar</li></ol></li> <li>[baz]</ol>', 1.1877 + '<ol><li>foo<ol><li>bar</li> </ol></li> <li>[baz]</ol>', 1.1878 + '<ol><li>foo<li>[bar]</li> <ol><li>baz</ol></ol>', 1.1879 + '<ol><li>foo<li>[bar]</li><ol> <li>baz</ol></ol>', 1.1880 + '<ol><li>foo<li>[bar]</li> <ol> <li>baz</ol></ol>', 1.1881 + '<ol><li>foo<li>[bar] <ol><li>baz</ol></ol>', 1.1882 + '<ol><li>foo<li>[bar]<ol> <li>baz</ol></ol>', 1.1883 + '<ol><li>foo<li>[bar] <ol> <li>baz</ol></ol>', 1.1884 + 1.1885 + // https://bugs.webkit.org/show_bug.cgi?id=32003 1.1886 + '<ul><li>a<br>{<br>}</li><li>b</li></ul>', 1.1887 + ], 1.1888 + //@} 1.1889 + inserthorizontalrule: [ 1.1890 + //@{ 1.1891 + 'foo[]bar', 1.1892 + '<span>foo</span>{}<span>bar</span>', 1.1893 + '<span>foo[</span><span>]bar</span>', 1.1894 + '<p>foo[bar<p>baz]quz', 1.1895 + '<div><b>foo</b>{}<b>bar</b></div>', 1.1896 + '<div><b>foo[</b><b>]bar</b></div>', 1.1897 + '<div><b>foo</b>{<b>bar</b>}<b>baz</b></div>', 1.1898 + '<b>foo[]bar</b>', 1.1899 + '<b id=abc>foo[]bar</b>', 1.1900 + ["abc", 'foo[bar]baz'], 1.1901 + 'foo[bar]baz', 1.1902 + 1.1903 + 'foo<b>[bar]</b>baz', 1.1904 + 'foo<b>{bar}</b>baz', 1.1905 + 'foo{<b>bar</b>}baz', 1.1906 + '<p>foo<p>[bar]<p>baz', 1.1907 + '<p>foo<p>{bar}<p>baz', 1.1908 + '<p>foo{<p>bar</p>}<p>baz', 1.1909 + 1.1910 + '<p>foo[bar]baz</p>', 1.1911 + '<p id=abc>foo[bar]baz</p>', 1.1912 + '<h1>foo[bar]baz</h1>', 1.1913 + '<p>foo<b>b[a]r</b>baz</p>', 1.1914 + 1.1915 + '<a>foo[bar]baz</a>', 1.1916 + '<a href=/>foo[bar]baz</a>', 1.1917 + '<abbr>foo[bar]baz</abbr>', 1.1918 + '<address>foo[bar]baz</address>', 1.1919 + '<article>foo[bar]baz</article>', 1.1920 + '<aside>foo[bar]baz</aside>', 1.1921 + '<b>foo[bar]baz</b>', 1.1922 + '<bdi>foo[bar]baz</bdi>', 1.1923 + '<bdo dir=rtl>foo[bar]baz</bdo>', 1.1924 + '<blockquote>foo[bar]baz</blockquote>', 1.1925 + '<table><caption>foo[bar]baz</caption><tr><td>quz</table>', 1.1926 + '<cite>foo[bar]baz</cite>', 1.1927 + '<code>foo[bar]baz</code>', 1.1928 + '<dl><dd>foo[bar]baz</dd></dl>', 1.1929 + '<del>foo[bar]baz</del>', 1.1930 + '<details>foo[bar]baz</details>', 1.1931 + '<dfn>foo[bar]baz</dfn>', 1.1932 + '<div>foo[bar]baz</div>', 1.1933 + '<dl><dt>foo[bar]baz</dt></dl>', 1.1934 + '<em>foo[bar]baz</em>', 1.1935 + '<figure><figcaption>foo[bar]baz</figcaption>quz</figure>', 1.1936 + '<figure>foo[bar]baz</figure>', 1.1937 + '<footer>foo[bar]baz</footer>', 1.1938 + '<h1>foo[bar]baz</h1>', 1.1939 + '<h2>foo[bar]baz</h2>', 1.1940 + '<h3>foo[bar]baz</h3>', 1.1941 + '<h4>foo[bar]baz</h4>', 1.1942 + '<h5>foo[bar]baz</h5>', 1.1943 + '<h6>foo[bar]baz</h6>', 1.1944 + '<header>foo[bar]baz</header>', 1.1945 + '<hgroup>foo[bar]baz</hgroup>', 1.1946 + '<hgroup><h1>foo[bar]baz</h1></hgroup>', 1.1947 + '<i>foo[bar]baz</i>', 1.1948 + '<ins>foo[bar]baz</ins>', 1.1949 + '<kbd>foo[bar]baz</kbd>', 1.1950 + '<mark>foo[bar]baz</mark>', 1.1951 + '<nav>foo[bar]baz</nav>', 1.1952 + '<ol><li>foo[bar]baz</li></ol>', 1.1953 + '<p>foo[bar]baz</p>', 1.1954 + '<pre>foo[bar]baz</pre>', 1.1955 + '<q>foo[bar]baz</q>', 1.1956 + '<ruby>foo[bar]baz<rt>quz</rt></ruby>', 1.1957 + '<ruby>foo<rt>bar[baz]quz</rt></ruby>', 1.1958 + '<ruby>foo<rp>bar[baz]quz</rp><rt>qoz</rt><rp>qiz</rp></ruby>', 1.1959 + '<s>foo[bar]baz</s>', 1.1960 + '<samp>foo[bar]baz</samp>', 1.1961 + '<section>foo[bar]baz</section>', 1.1962 + '<small>foo[bar]baz</small>', 1.1963 + '<span>foo[bar]baz</span>', 1.1964 + '<strong>foo[bar]baz</strong>', 1.1965 + '<sub>foo[bar]baz</sub>', 1.1966 + '<sup>foo[bar]baz</sup>', 1.1967 + '<table><tr><td>foo[bar]baz</td></table>', 1.1968 + '<table><tr><th>foo[bar]baz</th></table>', 1.1969 + '<u>foo[bar]baz</u>', 1.1970 + '<ul><li>foo[bar]baz</li></ul>', 1.1971 + '<var>foo[bar]baz</var>', 1.1972 + 1.1973 + '<acronym>foo[bar]baz</acronym>', 1.1974 + '<big>foo[bar]baz</big>', 1.1975 + '<blink>foo[bar]baz</blink>', 1.1976 + '<center>foo[bar]baz</center>', 1.1977 + '<dir>foo[bar]baz</dir>', 1.1978 + '<dir><li>foo[bar]baz</li></dir>', 1.1979 + '<font>foo[bar]baz</font>', 1.1980 + '<listing>foo[bar]baz</listing>', 1.1981 + '<marquee>foo[bar]baz</marquee>', 1.1982 + '<nobr>foo[bar]baz</nobr>', 1.1983 + '<strike>foo[bar]baz</strike>', 1.1984 + '<tt>foo[bar]baz</tt>', 1.1985 + '<xmp>foo[bar]baz</xmp>', 1.1986 + 1.1987 + '<quasit>foo[bar]baz</quasit>', 1.1988 + 1.1989 + '<table><tr><td>fo[o<td>b]ar</table>', 1.1990 + 'fo[o<span contenteditable=false>bar</span>b]az', 1.1991 + ], 1.1992 + //@} 1.1993 + inserthtml: [ 1.1994 + //@{ 1.1995 + 'foo[]bar', 1.1996 + 'foo[bar]baz', 1.1997 + 'foo<span style=color:#aBcDeF>[bar]</span>baz', 1.1998 + 'foo<span style=color:#aBcDeF>{bar}</span>baz', 1.1999 + 'foo{<span style=color:#aBcDeF>bar</span>}baz', 1.2000 + '[foo<span style=color:#aBcDeF>bar]</span>baz', 1.2001 + '{foo<span style=color:#aBcDeF>bar}</span>baz', 1.2002 + 'foo<span style=color:#aBcDeF>[bar</span>baz]', 1.2003 + 'foo<span style=color:#aBcDeF>{bar</span>baz}', 1.2004 + 'foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz', 1.2005 + 1.2006 + ['', 'foo[bar]baz'], 1.2007 + ['\0', 'foo[bar]baz'], 1.2008 + ['\x07', 'foo[bar]baz'], 1.2009 + // The following line makes Firefox 7.0a2 go into an infinite loop on 1.2010 + // my machine. 1.2011 + //['\ud800', 'foo[bar]baz'], 1.2012 + 1.2013 + ['<b>', 'foo[bar]baz'], 1.2014 + ['<b>abc', 'foo[bar]baz'], 1.2015 + ['<p>abc', '<p>foo[bar]baz'], 1.2016 + ['<li>abc', '<p>foo[bar]baz'], 1.2017 + ['<p>abc', '<ol>{<li>foo</li>}<li>bar</ol>'], 1.2018 + ['<p>abc', '<ol><li>foo</li>{<li>bar</li>}<li>baz</ol>'], 1.2019 + ['<p>abc', '<ol><li>[foo]</li><li>bar</ol>'], 1.2020 + 1.2021 + ['abc', '<xmp>f[o]o</xmp>'], 1.2022 + ['<b>abc</b>', '<xmp>f[o]o</xmp>'], 1.2023 + ['abc', '<script>f[o]o</script>bar'], 1.2024 + ['<b>abc</b>', '<script>f[o]o</script>bar'], 1.2025 + 1.2026 + ['<a>abc</a>', '<a>f[o]o</a>'], 1.2027 + ['<a href=/>abc</a>', '<a href=.>f[o]o</a>'], 1.2028 + ['<hr>', '<p>f[o]o'], 1.2029 + ['<hr>', '<b>f[o]o</b>'], 1.2030 + ['<h2>abc</h2>', '<h1>f[o]o</h1>'], 1.2031 + ['<td>abc</td>', '<table><tr><td>f[o]o</table>'], 1.2032 + ['<td>abc</td>', 'f[o]o'], 1.2033 + 1.2034 + ['<dt>abc</dt>', '<dl><dt>f[o]o<dd>bar</dl>'], 1.2035 + ['<dt>abc</dt>', '<dl><dt>foo<dd>b[a]r</dl>'], 1.2036 + ['<dd>abc</dd>', '<dl><dt>f[o]o<dd>bar</dl>'], 1.2037 + ['<dd>abc</dd>', '<dl><dt>foo<dd>b[a]r</dl>'], 1.2038 + ['<dt>abc</dt>', 'f[o]o'], 1.2039 + ['<dt>abc</dt>', '<ol><li>f[o]o</ol>'], 1.2040 + ['<dd>abc</dd>', 'f[o]o'], 1.2041 + ['<dd>abc</dd>', '<ol><li>f[o]o</ol>'], 1.2042 + 1.2043 + ['<li>abc</li>', '<dir><li>f[o]o</dir>'], 1.2044 + ['<li>abc</li>', '<ol><li>f[o]o</ol>'], 1.2045 + ['<li>abc</li>', '<ul><li>f[o]o</ul>'], 1.2046 + ['<dir><li>abc</dir>', '<dir><li>f[o]o</dir>'], 1.2047 + ['<dir><li>abc</dir>', '<ol><li>f[o]o</ol>'], 1.2048 + ['<dir><li>abc</dir>', '<ul><li>f[o]o</ul>'], 1.2049 + ['<ol><li>abc</ol>', '<dir><li>f[o]o</dir>'], 1.2050 + ['<ol><li>abc</ol>', '<ol><li>f[o]o</ol>'], 1.2051 + ['<ol><li>abc</ol>', '<ul><li>f[o]o</ul>'], 1.2052 + ['<ul><li>abc</ul>', '<dir><li>f[o]o</dir>'], 1.2053 + ['<ul><li>abc</ul>', '<ol><li>f[o]o</ol>'], 1.2054 + ['<ul><li>abc</ul>', '<ul><li>f[o]o</ul>'], 1.2055 + ['<li>abc</li>', 'f[o]o'], 1.2056 + 1.2057 + ['<nobr>abc</nobr>', '<nobr>f[o]o</nobr>'], 1.2058 + ['<nobr>abc</nobr>', 'f[o]o'], 1.2059 + 1.2060 + ['<p>abc', '<font color=blue>foo[]bar</font>'], 1.2061 + ['<p>abc', '<span style=color:blue>foo[]bar</span>'], 1.2062 + ['<p>abc', '<span style=font-variant:small-caps>foo[]bar</span>'], 1.2063 + [' ', '<p>[foo]</p>'], 1.2064 + ['<span style=display:none></span>', '<p>[foo]</p>'], 1.2065 + ['<!--abc-->', '<p>[foo]</p>'], 1.2066 + 1.2067 + ['abc', '<p>{}<br></p>'], 1.2068 + ['<!--abc-->', '<p>{}<br></p>'], 1.2069 + ['abc', '<p><!--foo-->{}<span><br></span><!--bar--></p>'], 1.2070 + ['<!--abc-->', '<p><!--foo-->{}<span><br></span><!--bar--></p>'], 1.2071 + ['abc', '<p>{}<span><!--foo--><br><!--bar--></span></p>'], 1.2072 + ['<!--abc-->', '<p>{}<span><!--foo--><br><!--bar--></span></p>'], 1.2073 + 1.2074 + ['abc', '<p><br>{}</p>'], 1.2075 + ['<!--abc-->', '<p><br>{}</p>'], 1.2076 + ['abc', '<p><!--foo--><span><br></span>{}<!--bar--></p>'], 1.2077 + ['<!--abc-->', '<p><!--foo--><span><br></span>{}<!--bar--></p>'], 1.2078 + ['abc', '<p><span><!--foo--><br><!--bar--></span>{}</p>'], 1.2079 + ['<!--abc-->', '<p><span><!--foo--><br><!--bar--></span>{}</p>'], 1.2080 + ], 1.2081 + //@} 1.2082 + insertimage: [ 1.2083 + //@{ 1.2084 + 'foo[]bar', 1.2085 + '<span>foo</span>{}<span>bar</span>', 1.2086 + '<span>foo[</span><span>]bar</span>', 1.2087 + ["", 'foo[bar]baz'], 1.2088 + 'foo[bar]baz', 1.2089 + 'foo<span style=color:#aBcDeF>[bar]</span>baz', 1.2090 + 'foo<span style=color:#aBcDeF>{bar}</span>baz', 1.2091 + 'foo{<span style=color:#aBcDeF>bar</span>}baz', 1.2092 + '[foo<span style=color:#aBcDeF>bar]</span>baz', 1.2093 + '{foo<span style=color:#aBcDeF>bar}</span>baz', 1.2094 + 'foo<span style=color:#aBcDeF>[bar</span>baz]', 1.2095 + 'foo<span style=color:#aBcDeF>{bar</span>baz}', 1.2096 + 'foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz', 1.2097 + 1.2098 + 'foo<b>[bar]</b>baz', 1.2099 + 'foo<b>{bar}</b>baz', 1.2100 + 'foo{<b>bar</b>}baz', 1.2101 + 'foo<span>[bar]</span>baz', 1.2102 + 'foo<span>{bar}</span>baz', 1.2103 + 'foo{<span>bar</span>}baz', 1.2104 + '<b>foo[bar</b><i>baz]quz</i>', 1.2105 + '<p>foo</p><p>[bar]</p><p>baz</p>', 1.2106 + '<p>foo</p><p>{bar}</p><p>baz</p>', 1.2107 + '<p>foo</p>{<p>bar</p>}<p>baz</p>', 1.2108 + 1.2109 + '<p>foo[bar<p>baz]quz', 1.2110 + '<p>foo[bar<div>baz]quz</div>', 1.2111 + '<p>foo[bar<h1>baz]quz</h1>', 1.2112 + '<div>foo[bar</div><p>baz]quz', 1.2113 + '<blockquote>foo[bar</blockquote><pre>baz]quz</pre>', 1.2114 + 1.2115 + '<p><b>foo[bar</b><p>baz]quz', 1.2116 + '<div><p>foo[bar</div><p>baz]quz', 1.2117 + '<p>foo[bar<blockquote><p>baz]quz<p>qoz</blockquote', 1.2118 + '<p>foo[bar<p style=color:blue>baz]quz', 1.2119 + '<p>foo[bar<p><b>baz]quz</b>', 1.2120 + 1.2121 + '<div><p>foo<p>[bar<p>baz]</div>', 1.2122 + 1.2123 + 'foo[<br>]bar', 1.2124 + '<p>foo[</p><p>]bar</p>', 1.2125 + '<p>foo[</p><p>]bar<br>baz</p>', 1.2126 + 'foo[<p>]bar</p>', 1.2127 + 'foo[<p>]bar<br>baz</p>', 1.2128 + 'foo[<p>]bar</p>baz', 1.2129 + '<p>foo[</p>]bar', 1.2130 + '<p>foo[</p>]bar<br>baz', 1.2131 + '<p>foo[</p>]bar<p>baz</p>', 1.2132 + 'foo[<div><p>]bar</div>', 1.2133 + '<div><p>foo[</p></div>]bar', 1.2134 + 'foo[<div><p>]bar</p>baz</div>', 1.2135 + 'foo[<div>]bar<p>baz</p></div>', 1.2136 + '<div><p>foo</p>bar[</div>]baz', 1.2137 + '<div>foo<p>bar[</p></div>]baz', 1.2138 + ], 1.2139 + //@} 1.2140 + insertlinebreak: [ 1.2141 + //@{ Same as insertparagraph (set below) 1.2142 + ], 1.2143 + //@} 1.2144 + insertorderedlist: [ 1.2145 + //@{ 1.2146 + 'foo[]bar', 1.2147 + 'foo[bar]baz', 1.2148 + 'foo<br>[bar]', 1.2149 + 'f[oo<br>b]ar<br>baz', 1.2150 + '<p>[foo]<br>bar</p>', 1.2151 + '[foo<ol><li>bar]</ol>baz', 1.2152 + 'foo<ol><li>[bar</ol>baz]', 1.2153 + '[foo<ul><li>bar]</ul>baz', 1.2154 + 'foo<ul><li>[bar</ul>baz]', 1.2155 + 'foo<ul><li>[bar</ul><ol><li>baz]</ol>quz', 1.2156 + 'foo<ol><li>[bar</ol><ul><li>baz]</ul>quz', 1.2157 + 1.2158 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.2159 + '<table><tbody><tr><td>fo[o<td>b]ar<td>baz</table>', 1.2160 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.2161 + 1.2162 + '<p>foo<p>[bar]<p>baz', 1.2163 + '<p>foo<blockquote>[bar]</blockquote><p>baz', 1.2164 + '<dl><dt>foo<dd>[bar]<dt>baz<dd>quz</dl>', 1.2165 + '<dl><dt>foo<dd>bar<dt>[baz]<dd>quz</dl>', 1.2166 + 1.2167 + '<p>[foo<p>bar]<p>baz', 1.2168 + '<p>[foo<blockquote>bar]</blockquote><p>baz', 1.2169 + '<dl><dt>[foo<dd>bar]<dt>baz<dd>quz</dl>', 1.2170 + '<dl><dt>foo<dd>[bar<dt>baz]<dd>quz</dl>', 1.2171 + 1.2172 + '<p>[foo<blockquote><p>bar]<p>baz</blockquote>', 1.2173 + 1.2174 + 1.2175 + // Various <ol> stuff 1.2176 + '<ol><li>foo<li>[bar]<li>baz</ol>', 1.2177 + '<ol><li>foo</ol>[bar]', 1.2178 + '[foo]<ol><li>bar</ol>', 1.2179 + '<ol><li>foo</ol>[bar]<ol><li>baz</ol>', 1.2180 + '<ol><ol><li>[foo]</ol></ol>', 1.2181 + '<ol><li>[foo]<br>bar<li>baz</ol>', 1.2182 + '<ol><li>foo<br>[bar]<li>baz</ol>', 1.2183 + '<ol><li><div>[foo]</div>bar<li>baz</ol>', 1.2184 + '<ol><li>foo<ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.2185 + '<ol><li>foo<ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.2186 + '<ol><li>foo</li><ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.2187 + '<ol><li>foo</li><ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.2188 + '<ol><li>[foo]<ol><li>bar</ol><li>baz</ol>', 1.2189 + '<ol><li>[foo]</li><ol><li>bar</ol><li>baz</ol>', 1.2190 + '<ol><li>foo<li>[bar]<ol><li>baz</ol><li>quz</ol>', 1.2191 + '<ol><li>foo<li>[bar]</li><ol><li>baz</ol><li>quz</ol>', 1.2192 + '<ol><li>foo<ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.2193 + '<ol><li>foo</li><ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.2194 + 1.2195 + // Multiple items at once. 1.2196 + '<ol><li>foo<li>[bar<li>baz]</ol>', 1.2197 + '<ol><li>[foo<ol><li>bar]</ol><li>baz</ol>', 1.2198 + '<ol><li>foo<ol><li>b[ar</ol><li>b]az</ol>', 1.2199 + '<ol><li>[foo<ol><li>bar</ol><li>baz]</ol><p>extra', 1.2200 + 1.2201 + // We probably can't actually get this DOM . . . 1.2202 + '<ol><li>[foo]<ol><li>bar</ol>baz</ol>', 1.2203 + '<ol><li>foo<ol><li>[bar]</ol>baz</ol>', 1.2204 + '<ol><li>foo<ol><li>bar</ol>[baz]</ol>', 1.2205 + '<ol><li>[foo<ol><li>bar]</ol>baz</ol>', 1.2206 + 1.2207 + 1.2208 + // Same stuff but with <ul> 1.2209 + '<ul><li>foo<li>[bar]<li>baz</ul>', 1.2210 + '<ul><li>foo</ul>[bar]', 1.2211 + '[foo]<ul><li>bar</ul>', 1.2212 + '<ul><li>foo</ul>[bar]<ul><li>baz</ul>', 1.2213 + '<ul><ul><li>[foo]</ul></ul>', 1.2214 + '<ul><li>[foo]<br>bar<li>baz</ul>', 1.2215 + '<ul><li>foo<br>[bar]<li>baz</ul>', 1.2216 + '<ul><li><div>[foo]</div>bar<li>baz</ul>', 1.2217 + '<ul><li>foo<ul><li>[bar]<li>baz</ul><li>quz</ul>', 1.2218 + '<ul><li>foo<ul><li>bar<li>[baz]</ul><li>quz</ul>', 1.2219 + '<ul><li>foo</li><ul><li>[bar]<li>baz</ul><li>quz</ul>', 1.2220 + '<ul><li>foo</li><ul><li>bar<li>[baz]</ul><li>quz</ul>', 1.2221 + '<ul><li>[foo]<ul><li>bar</ul><li>baz</ul>', 1.2222 + '<ul><li>[foo]</li><ul><li>bar</ul><li>baz</ul>', 1.2223 + '<ul><li>foo<li>[bar]<ul><li>baz</ul><li>quz</ul>', 1.2224 + '<ul><li>foo<li>[bar]</li><ul><li>baz</ul><li>quz</ul>', 1.2225 + '<ul><li>foo<ul><li>bar<li>baz</ul><li>[quz]</ul>', 1.2226 + '<ul><li>foo</li><ul><li>bar<li>baz</ul><li>[quz]</ul>', 1.2227 + 1.2228 + // Multiple items at once. 1.2229 + '<ul><li>foo<li>[bar<li>baz]</ul>', 1.2230 + '<ul><li>[foo<ul><li>bar]</ul><li>baz</ul>', 1.2231 + '<ul><li>foo<ul><li>b[ar</ul><li>b]az</ul>', 1.2232 + '<ul><li>[foo<ul><li>bar</ul><li>baz]</ul><p>extra', 1.2233 + 1.2234 + // We probably can't actually get this DOM . . . 1.2235 + '<ul><li>[foo]<ul><li>bar</ul>baz</ul>', 1.2236 + '<ul><li>foo<ul><li>[bar]</ul>baz</ul>', 1.2237 + '<ul><li>foo<ul><li>bar</ul>[baz]</ul>', 1.2238 + '<ul><li>[foo<ul><li>bar]</ul>baz</ul>', 1.2239 + 1.2240 + 1.2241 + // Mix of <ol> and <ul> 1.2242 + 'foo<ol><li>bar</ol><ul><li>[baz]</ul>quz', 1.2243 + 'foo<ol><li>bar</ol><ul><li>[baz</ul>quz]', 1.2244 + 'foo<ul><li>[bar]</ul><ol><li>baz</ol>quz', 1.2245 + '[foo<ul><li>bar]</ul><ol><li>baz</ol>quz', 1.2246 + 1.2247 + // Interaction with indentation 1.2248 + '[foo]<blockquote>bar</blockquote>baz', 1.2249 + 'foo<blockquote>[bar]</blockquote>baz', 1.2250 + '[foo<blockquote>bar]</blockquote>baz', 1.2251 + '<ol><li>foo</ol><blockquote>[bar]</blockquote>baz', 1.2252 + '[foo]<blockquote><ol><li>bar</ol></blockquote>baz', 1.2253 + 'foo<blockquote>[bar]<br>baz</blockquote>', 1.2254 + '[foo<blockquote>bar]<br>baz</blockquote>', 1.2255 + '<ol><li>foo</ol><blockquote>[bar]<br>baz</blockquote>', 1.2256 + 1.2257 + '<p>[foo]<blockquote><p>bar</blockquote><p>baz', 1.2258 + '<p>foo<blockquote><p>[bar]</blockquote><p>baz', 1.2259 + '<p>[foo<blockquote><p>bar]</blockquote><p>baz', 1.2260 + '<ol><li>foo</ol><blockquote><p>[bar]</blockquote><p>baz', 1.2261 + 1.2262 + // Attributes 1.2263 + '<ul id=abc><li>foo<li>[bar]<li>baz</ul>', 1.2264 + '<ul style=color:blue><li>foo<li>[bar]<li>baz</ul>', 1.2265 + '<ul style=text-indent:1em><li>foo<li>[bar]<li>baz</ul>', 1.2266 + '<ul id=abc><li>[foo]<li>bar<li>baz</ul>', 1.2267 + '<ul style=color:blue><li>[foo]<li>bar<li>baz</ul>', 1.2268 + '<ul style=text-indent:1em><li>[foo]<li>bar<li>baz</ul>', 1.2269 + '<ul id=abc><li>foo<li>bar<li>[baz]</ul>', 1.2270 + '<ul style=color:blue><li>foo<li>bar<li>[baz]</ul>', 1.2271 + '<ul style=text-indent:1em><li>foo<li>bar<li>[baz]</ul>', 1.2272 + 1.2273 + // Whitespace nodes 1.2274 + '<ol><li>foo</ol> <p>[bar]', 1.2275 + '<p>[foo]</p> <ol><li>bar</ol>', 1.2276 + '<ol><li>foo</ol> <p>[bar]</p> <ol><li>baz</ol>', 1.2277 + 1.2278 + // This caused an infinite loop at one point due to a bug in "fix 1.2279 + // disallowed ancestors". Disabled because I'm not sure how we want it 1.2280 + // to behave: 1.2281 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14578 1.2282 + '!<span contenteditable=true>foo[]</span>', 1.2283 + ], 1.2284 + //@} 1.2285 + insertparagraph: [ 1.2286 + //@{ 1.2287 + 'foo[bar]baz', 1.2288 + 'fo[o<table><tr><td>b]ar</table>', 1.2289 + '<table><tr><td>[foo<td>bar]<tr><td>baz<td>quz</table>', 1.2290 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<tr><td>baz<td>quz</table>', 1.2291 + '<table><tr><td>fo[o</table>b]ar', 1.2292 + '<table><tr><td>fo[o<td>b]ar<td>baz</table>', 1.2293 + '{<table><tr><td>foo</table>}', 1.2294 + '<table><tr><td>[foo]</table>', 1.2295 + '<ol><li>[foo]<li>bar</ol>', 1.2296 + '<ol><li>f[o]o<li>bar</ol>', 1.2297 + 1.2298 + '[]foo', 1.2299 + 'foo[]', 1.2300 + '<span>foo[]</span>', 1.2301 + 'foo[]<br>', 1.2302 + 'foo[]bar', 1.2303 + '<address>[]foo</address>', 1.2304 + '<address>foo[]</address>', 1.2305 + '<address>foo[]<br></address>', 1.2306 + '<address>foo[]bar</address>', 1.2307 + '<div>[]foo</div>', 1.2308 + '<div>foo[]</div>', 1.2309 + '<div>foo[]<br></div>', 1.2310 + '<div>foo[]bar</div>', 1.2311 + '<dl><dt>[]foo<dd>bar</dl>', 1.2312 + '<dl><dt>foo[]<dd>bar</dl>', 1.2313 + '<dl><dt>foo[]<br><dd>bar</dl>', 1.2314 + '<dl><dt>foo[]bar<dd>baz</dl>', 1.2315 + '<dl><dt>foo<dd>[]bar</dl>', 1.2316 + '<dl><dt>foo<dd>bar[]</dl>', 1.2317 + '<dl><dt>foo<dd>bar[]<br></dl>', 1.2318 + '<dl><dt>foo<dd>bar[]baz</dl>', 1.2319 + '<h1>[]foo</h1>', 1.2320 + '<h1>foo[]</h1>', 1.2321 + '<h1>foo[]<br></h1>', 1.2322 + '<h1>foo[]bar</h1>', 1.2323 + '<ol><li>[]foo</ol>', 1.2324 + '<ol><li>foo[]</ol>', 1.2325 + '<ol><li>foo[]<br></ol>', 1.2326 + '<ol><li>foo[]bar</ol>', 1.2327 + '<p>[]foo</p>', 1.2328 + '<p>foo[]</p>', 1.2329 + '<p>foo[]<br></p>', 1.2330 + '<p>foo[]bar</p>', 1.2331 + '<pre>[]foo</pre>', 1.2332 + '<pre>foo[]</pre>', 1.2333 + '<pre>foo[]<br></pre>', 1.2334 + '<pre>foo[]bar</pre>', 1.2335 + 1.2336 + '<pre>foo[]<br><br></pre>', 1.2337 + '<pre>foo<br>{}<br></pre>', 1.2338 + '<pre>foo []</pre>', 1.2339 + '<pre>foo[] </pre>', 1.2340 + '<pre>foo [] </pre>', 1.2341 + 1.2342 + '<xmp>foo[]bar</xmp>', 1.2343 + '<script>foo[]bar</script>baz', 1.2344 + '<div style=display:none>foo[]bar</div>baz', 1.2345 + '<listing>foo[]bar</listing>', 1.2346 + 1.2347 + '<ol><li>{}<br></li></ol>', 1.2348 + 'foo<ol><li>{}<br></li></ol>', 1.2349 + '<ol><li>{}<br></li></ol>foo', 1.2350 + '<ol><li>foo<li>{}<br></ol>', 1.2351 + '<ol><li>{}<br><li>bar</ol>', 1.2352 + '<ol><li>foo</li><ul><li>{}<br></ul></ol>', 1.2353 + 1.2354 + '<dl><dt>{}<br></dt></dl>', 1.2355 + '<dl><dt>foo<dd>{}<br></dl>', 1.2356 + '<dl><dt>{}<br><dd>bar</dl>', 1.2357 + '<dl><dt>foo<dd>bar<dl><dt>{}<br><dd>baz</dl></dl>', 1.2358 + '<dl><dt>foo<dd>bar<dl><dt>baz<dd>{}<br></dl></dl>', 1.2359 + 1.2360 + '<h1>foo[bar</h1><p>baz]quz</p>', 1.2361 + '<p>foo[bar</p><h1>baz]quz</h1>', 1.2362 + '<p>foo</p>{}<br>', 1.2363 + '{}<br><p>foo</p>', 1.2364 + '<p>foo</p>{}<br><h1>bar</h1>', 1.2365 + '<h1>foo</h1>{}<br><p>bar</p>', 1.2366 + '<h1>foo</h1>{}<br><h2>bar</h2>', 1.2367 + '<p>foo</p><h1>[bar]</h1><p>baz</p>', 1.2368 + '<p>foo</p>{<h1>bar</h1>}<p>baz</p>', 1.2369 + 1.2370 + '<table><tr><td>foo[]bar</table>', 1.2371 + '<table><tr><td><p>foo[]bar</table>', 1.2372 + 1.2373 + '<blockquote>[]foo</blockquote>', 1.2374 + '<blockquote>foo[]</blockquote>', 1.2375 + '<blockquote>foo[]<br></blockquote>', 1.2376 + '<blockquote>foo[]bar</blockquote>', 1.2377 + '<blockquote><p>[]foo</blockquote>', 1.2378 + '<blockquote><p>foo[]</blockquote>', 1.2379 + '<blockquote><p>foo[]bar</blockquote>', 1.2380 + '<blockquote><p>foo[]<p>bar</blockquote>', 1.2381 + '<blockquote><p>foo[]bar<p>baz</blockquote>', 1.2382 + 1.2383 + '<span>foo[]bar</span>', 1.2384 + '<span>foo[]bar</span>baz', 1.2385 + '<b>foo[]bar</b>', 1.2386 + '<b>foo[]bar</b>baz', 1.2387 + '<b>foo[]</b>bar', 1.2388 + 'foo<b>[]bar</b>', 1.2389 + '<b>foo[]</b><i>bar</i>', 1.2390 + '<b id=x class=y>foo[]bar</b>', 1.2391 + '<i><b>foo[]bar</b>baz</i>', 1.2392 + 1.2393 + '<p><b>foo[]bar</b></p>', 1.2394 + '<p><b>[]foo</b></p>', 1.2395 + '<p><b id=x class=y>foo[]bar</b></p>', 1.2396 + '<div><b>foo[]bar</b></div>', 1.2397 + 1.2398 + '<a href=foo>foo[]bar</a>', 1.2399 + '<a href=foo>foo[]bar</a>baz', 1.2400 + '<a href=foo>foo[]</a>bar', 1.2401 + 'foo<a href=foo>[]bar</a>', 1.2402 + 1.2403 + '<p>foo[]<!--bar-->', 1.2404 + '<p><!--foo-->[]bar', 1.2405 + 1.2406 + '<p>foo<span style=color:#aBcDeF>[bar]</span>baz', 1.2407 + '<p>foo<span style=color:#aBcDeF>{bar}</span>baz', 1.2408 + '<p>foo{<span style=color:#aBcDeF>bar</span>}baz', 1.2409 + '<p>[foo<span style=color:#aBcDeF>bar]</span>baz', 1.2410 + '<p>{foo<span style=color:#aBcDeF>bar}</span>baz', 1.2411 + '<p>foo<span style=color:#aBcDeF>[bar</span>baz]', 1.2412 + '<p>foo<span style=color:#aBcDeF>{bar</span>baz}', 1.2413 + '<p>foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz', 1.2414 + 1.2415 + // https://bugs.webkit.org/show_bug.cgi?id=5036 1.2416 + '<ul contenteditable><li>{}<br></ul>', 1.2417 + '<ul contenteditable><li>foo[]</ul>', 1.2418 + '<div contenteditable=false><ul contenteditable><li>{}<br></ul></div>', 1.2419 + '<div contenteditable=false><ul contenteditable><li>foo[]</ul></div>', 1.2420 + 1.2421 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=13841 1.2422 + // https://bugs.webkit.org/show_bug.cgi?id=23507 1.2423 + '<address><p>foo[]</address>', 1.2424 + '<dl><dt><p>foo[]</dl>', 1.2425 + '<dl><dd><p>foo[]</dl>', 1.2426 + '<ol><li><p>foo[]</ol>', 1.2427 + '<ul><li><p>foo[]</ul>', 1.2428 + '<address><div>foo[]</address>', 1.2429 + '<dl><dt><div>foo[]</dl>', 1.2430 + '<dl><dd><div>foo[]</dl>', 1.2431 + '<ol><li><div>foo[]</ol>', 1.2432 + '<ul><li><div>foo[]</ul>', 1.2433 + '<div><p>foo[]</div>', 1.2434 + '<div><div>foo[]</div>', 1.2435 + 1.2436 + '<address><p>[]foo</address>', 1.2437 + '<dl><dt><p>[]foo</dl>', 1.2438 + '<dl><dd><p>[]foo</dl>', 1.2439 + '<ol><li><p>[]foo</ol>', 1.2440 + '<ul><li><p>[]foo</ul>', 1.2441 + '<address><div>[]foo</address>', 1.2442 + '<dl><dt><div>[]foo</dl>', 1.2443 + '<dl><dd><div>[]foo</dl>', 1.2444 + '<ol><li><div>[]foo</ol>', 1.2445 + '<ul><li><div>[]foo</ul>', 1.2446 + '<div><p>[]foo</div>', 1.2447 + '<div><div>[]foo</div>', 1.2448 + 1.2449 + '<address><p>foo[]bar</address>', 1.2450 + '<dl><dt><p>foo[]bar</dl>', 1.2451 + '<dl><dd><p>foo[]bar</dl>', 1.2452 + '<ol><li><p>foo[]bar</ol>', 1.2453 + '<ul><li><p>foo[]bar</ul>', 1.2454 + '<address><div>foo[]bar</address>', 1.2455 + '<dl><dt><div>foo[]bar</dl>', 1.2456 + '<dl><dd><div>foo[]bar</dl>', 1.2457 + '<ol><li><div>foo[]bar</ol>', 1.2458 + '<ul><li><div>foo[]bar</ul>', 1.2459 + '<div><p>foo[]bar</div>', 1.2460 + '<div><div>foo[]bar</div>', 1.2461 + 1.2462 + '<ol><li class=a id=x><p class=b id=y>foo[]</ol>', 1.2463 + '<div class=a id=x><div class=b id=y>foo[]</div></div>', 1.2464 + '<div class=a id=x><p class=b id=y>foo[]</div>', 1.2465 + '<ol><li class=a id=x><p class=b id=y>[]foo</ol>', 1.2466 + '<div class=a id=x><div class=b id=y>[]foo</div></div>', 1.2467 + '<div class=a id=x><p class=b id=y>[]foo</div>', 1.2468 + '<ol><li class=a id=x><p class=b id=y>foo[]bar</ol>', 1.2469 + '<div class=a id=x><div class=b id=y>foo[]bar</div></div>', 1.2470 + '<div class=a id=x><p class=b id=y>foo[]bar</div>', 1.2471 + ], 1.2472 + //@} 1.2473 + inserttext: [ 1.2474 + //@{ 1.2475 + 'foo[bar]baz', 1.2476 + ['', 'foo[bar]baz'], 1.2477 + 1.2478 + ['\t', 'foo[]bar'], 1.2479 + ['&', 'foo[]bar'], 1.2480 + ['\n', 'foo[]bar'], 1.2481 + ['abc\ndef', 'foo[]bar'], 1.2482 + ['\x07', 'foo[]bar'], 1.2483 + 1.2484 + ['<b>hi</b>', 'foo[]bar'], 1.2485 + ['<', 'foo[]bar'], 1.2486 + ['&', 'foo[]bar'], 1.2487 + 1.2488 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14254 1.2489 + ['!\r', 'foo[]bar'], 1.2490 + ['!\r\n', 'foo[]bar'], 1.2491 + ['!\0', 'foo[]bar'], 1.2492 + ['!\ud800', 'foo[]bar'], 1.2493 + 1.2494 + // Whitespace tests! The following two bugs are relevant to some of 1.2495 + // these: 1.2496 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14119 1.2497 + // https://bugzilla.mozilla.org/show_bug.cgi?id=681626 1.2498 + [' ', 'foo[]bar'], 1.2499 + [' ', 'foo []bar'], 1.2500 + [' ', 'foo[] bar'], 1.2501 + [' ', 'foo []bar'], 1.2502 + [' ', 'foo [] bar'], 1.2503 + [' ', 'foo[] bar'], 1.2504 + [' ', 'foo []bar'], 1.2505 + [' ', 'foo [] bar'], 1.2506 + [' ', 'foo[] bar'], 1.2507 + [' ', 'foo []bar'], 1.2508 + [' ', 'foo [] bar'], 1.2509 + [' ', 'foo[] bar'], 1.2510 + [' ', 'foo [] bar'], 1.2511 + [' ', 'foo []bar'], 1.2512 + [' ', 'foo [] bar'], 1.2513 + 1.2514 + [' ', '[]foo'], 1.2515 + [' ', '{}foo'], 1.2516 + [' ', 'foo[]'], 1.2517 + [' ', 'foo{}'], 1.2518 + [' ', 'foo []'], 1.2519 + [' ', 'foo {}'], 1.2520 + [' ', 'foo []'], 1.2521 + [' ', 'foo {}'], 1.2522 + [' ', '<b>foo[]</b>bar'], 1.2523 + [' ', 'foo[]<b>bar</b>'], 1.2524 + 1.2525 + [' ', 'foo[] '], 1.2526 + [' ', ' foo [] '], 1.2527 + [' ', 'foo[]<span> </span>'], 1.2528 + [' ', 'foo[]<span> </span> '], 1.2529 + [' ', ' []foo'], 1.2530 + [' ', ' [] foo '], 1.2531 + [' ', '<span> </span>[]foo'], 1.2532 + [' ', ' <span> </span>[]foo'], 1.2533 + 1.2534 + [' ', '{}<br>'], 1.2535 + [' ', '<p>{}<br>'], 1.2536 + 1.2537 + [' ', '<p>foo[]<p>bar'], 1.2538 + [' ', '<p>foo []<p>bar'], 1.2539 + [' ', '<p>foo[]<p> bar'], 1.2540 + 1.2541 + // Some of the same tests as above, repeated with various values of 1.2542 + // white-space. 1.2543 + [' ', '<pre>foo[]bar</pre>'], 1.2544 + [' ', '<pre>foo []bar</pre>'], 1.2545 + [' ', '<pre>foo[] bar</pre>'], 1.2546 + [' ', '<pre>foo []bar</pre>'], 1.2547 + [' ', '<pre>[]foo</pre>'], 1.2548 + [' ', '<pre>foo[]</pre>'], 1.2549 + [' ', '<pre>foo []</pre>'], 1.2550 + [' ', '<pre> foo [] </pre>'], 1.2551 + 1.2552 + [' ', '<div style=white-space:pre>foo[]bar</div>'], 1.2553 + [' ', '<div style=white-space:pre>foo []bar</div>'], 1.2554 + [' ', '<div style=white-space:pre>foo[] bar</div>'], 1.2555 + [' ', '<div style=white-space:pre>foo []bar</div>'], 1.2556 + [' ', '<div style=white-space:pre>[]foo</div>'], 1.2557 + [' ', '<div style=white-space:pre>foo[]</div>'], 1.2558 + [' ', '<div style=white-space:pre>foo []</div>'], 1.2559 + [' ', '<div style=white-space:pre> foo [] </div>'], 1.2560 + 1.2561 + [' ', '<div style=white-space:pre-wrap>foo[]bar</div>'], 1.2562 + [' ', '<div style=white-space:pre-wrap>foo []bar</div>'], 1.2563 + [' ', '<div style=white-space:pre-wrap>foo[] bar</div>'], 1.2564 + [' ', '<div style=white-space:pre-wrap>foo []bar</div>'], 1.2565 + [' ', '<div style=white-space:pre-wrap>[]foo</div>'], 1.2566 + [' ', '<div style=white-space:pre-wrap>foo[]</div>'], 1.2567 + [' ', '<div style=white-space:pre-wrap>foo []</div>'], 1.2568 + [' ', '<div style=white-space:pre-wrap> foo [] </div>'], 1.2569 + 1.2570 + [' ', '<div style=white-space:pre-line>foo[]bar</div>'], 1.2571 + [' ', '<div style=white-space:pre-line>foo []bar</div>'], 1.2572 + [' ', '<div style=white-space:pre-line>foo[] bar</div>'], 1.2573 + [' ', '<div style=white-space:pre-line>foo []bar</div>'], 1.2574 + [' ', '<div style=white-space:pre-line>[]foo</div>'], 1.2575 + [' ', '<div style=white-space:pre-line>foo[]</div>'], 1.2576 + [' ', '<div style=white-space:pre-line>foo []</div>'], 1.2577 + [' ', '<div style=white-space:pre-line> foo [] </div>'], 1.2578 + 1.2579 + [' ', '<div style=white-space:nowrap>foo[]bar</div>'], 1.2580 + [' ', '<div style=white-space:nowrap>foo []bar</div>'], 1.2581 + [' ', '<div style=white-space:nowrap>foo[] bar</div>'], 1.2582 + [' ', '<div style=white-space:nowrap>foo []bar</div>'], 1.2583 + [' ', '<div style=white-space:nowrap>[]foo</div>'], 1.2584 + [' ', '<div style=white-space:nowrap>foo[]</div>'], 1.2585 + [' ', '<div style=white-space:nowrap>foo []</div>'], 1.2586 + [' ', '<div style=white-space:nowrap> foo [] </div>'], 1.2587 + 1.2588 + // End whitespace tests 1.2589 + 1.2590 + // Autolinking tests 1.2591 + [' ', 'http://a[]'], 1.2592 + [' ', 'ftp://a[]'], 1.2593 + [' ', 'quasit://a[]'], 1.2594 + [' ', '.x-++-.://a[]'], 1.2595 + [' ', '(http://a)[]'], 1.2596 + [' ', '<http://a>[]'], 1.2597 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14744 1.2598 + ['! ', '[http://a][]'], 1.2599 + ['! ', '{http://a}[]'], 1.2600 + [' ', 'http://a![]'], 1.2601 + [' ', '!"#$%&\'()*+,-./:;<=>?\^_`|~http://a!"#$%&\'()*+,-./:;<=>?\^_`|~[]'], 1.2602 + [' ', 'http://a!"\'(),-.:;<>`[]'], 1.2603 + [' ', 'http://a#$%&*+/=?\^_|~[]'], 1.2604 + [' ', 'mailto:a[]'], 1.2605 + [' ', 'a@b[]'], 1.2606 + [' ', 'a@[]'], 1.2607 + [' ', '@b[]'], 1.2608 + [' ', '#@x[]'], 1.2609 + [' ', 'a@.[]'], 1.2610 + [' ', '!"#$%&\'()*+,-./:;<=>?\^_`|~a@b!"#$%&\'()*+,-./:;<=>?\^_`|~[]'], 1.2611 + [' ', '<b>a@b</b>{}'], 1.2612 + [' ', '<b>a</b><i>@</i><u>b</u>{}'], 1.2613 + [' ', 'a@b<b>[]c</b>'], 1.2614 + [' ', '<p>a@b</p><p>[]c</p>'], 1.2615 + ['a', 'http://a[]'], 1.2616 + ['\t', 'http://a[]'], 1.2617 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14254 1.2618 + ['!\r', 'http://a[]'], 1.2619 + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=14745 1.2620 + ['!\n', 'http://a[]'], 1.2621 + ['\f', 'http://a[]'], 1.2622 + ['\u00A0', 'http://a[]'], 1.2623 + 1.2624 + [' ', 'foo[]'], 1.2625 + 1.2626 + 'foo[]bar', 1.2627 + 'foo []', 1.2628 + 'foo\xa0[]', 1.2629 + '<p>foo[]', 1.2630 + '<p>foo</p>{}', 1.2631 + '<p>[]foo', 1.2632 + '<p>{}foo', 1.2633 + '{}<p>foo', 1.2634 + '<p>foo</p>{}<p>bar</p>', 1.2635 + '<b>foo[]</b>bar', 1.2636 + '<b>foo</b>[]bar', 1.2637 + 'foo<b>{}</b>bar', 1.2638 + '<a>foo[]</a>bar', 1.2639 + '<a>foo</a>[]bar', 1.2640 + '<a href=/>foo[]</a>bar', 1.2641 + '<a href=/>foo</a>[]bar', 1.2642 + '<p>fo[o<p>b]ar', 1.2643 + '<p>fo[o<p>bar<p>b]az', 1.2644 + '{}<br>', 1.2645 + '<p>{}<br>', 1.2646 + '<p><span>{}<br></span>', 1.2647 + '<p>foo<span style=color:#aBcDeF>[bar]</span>baz', 1.2648 + '<p>foo<span style=color:#aBcDeF>{bar}</span>baz', 1.2649 + '<p>foo{<span style=color:#aBcDeF>bar</span>}baz', 1.2650 + '<p>[foo<span style=color:#aBcDeF>bar]</span>baz', 1.2651 + '<p>{foo<span style=color:#aBcDeF>bar}</span>baz', 1.2652 + '<p>foo<span style=color:#aBcDeF>[bar</span>baz]', 1.2653 + '<p>foo<span style=color:#aBcDeF>{bar</span>baz}', 1.2654 + '<p>foo<span style=color:#aBcDeF>[bar</span><span style=color:#fEdCbA>baz]</span>quz', 1.2655 + 1.2656 + 1.2657 + // These are like the corresponding tests in the multitest section, but 1.2658 + // because the selection isn't collapsed, we don't need to do 1.2659 + // multitests to set overrides. 1.2660 + 'foo<b>[bar]</b>baz', 1.2661 + 'foo<i>[bar]</i>baz', 1.2662 + 'foo<s>[bar]</s>baz', 1.2663 + 'foo<sub>[bar]</sub>baz', 1.2664 + 'foo<sup>[bar]</sup>baz', 1.2665 + 'foo<u>[bar]</u>baz', 1.2666 + 'foo<a href=http://www.google.com>[bar]</a>baz', 1.2667 + 'foo<font face=sans-serif>[bar]</font>baz', 1.2668 + 'foo<font size=4>[bar]</font>baz', 1.2669 + 'foo<font color=#0000FF>[bar]</font>baz', 1.2670 + 'foo<span style=background-color:#00FFFF>[bar]</span>baz', 1.2671 + 'foo<a href=http://www.google.com><font color=blue>[bar]</font></a>baz', 1.2672 + 'foo<font color=blue><a href=http://www.google.com>[bar]</a></font>baz', 1.2673 + 'foo<a href=http://www.google.com><font color=brown>[bar]</font></a>baz', 1.2674 + 'foo<font color=brown><a href=http://www.google.com>[bar]</a></font>baz', 1.2675 + 'foo<a href=http://www.google.com><font color=black>[bar]</font></a>baz', 1.2676 + 'foo<a href=http://www.google.com><u>[bar]</u></a>baz', 1.2677 + 'foo<u><a href=http://www.google.com>[bar]</a></u>baz', 1.2678 + 'foo<sub><font size=2>[bar]</font></sub>baz', 1.2679 + 'foo<font size=2><sub>[bar]</sub></font>baz', 1.2680 + 'foo<sub><font size=3>[bar]</font></sub>baz', 1.2681 + 'foo<font size=3><sub>[bar]</sub></font>baz', 1.2682 + 1.2683 + // Now repeat but with different selections. 1.2684 + '[foo<b>bar]</b>baz', 1.2685 + '[foo<i>bar]</i>baz', 1.2686 + '[foo<s>bar]</s>baz', 1.2687 + '[foo<sub>bar]</sub>baz', 1.2688 + '[foo<sup>bar]</sup>baz', 1.2689 + '[foo<u>bar]</u>baz', 1.2690 + '[foo<a href=http://www.google.com>bar]</a>baz', 1.2691 + '[foo<font face=sans-serif>bar]</font>baz', 1.2692 + '[foo<font size=4>bar]</font>baz', 1.2693 + '[foo<font color=#0000FF>bar]</font>baz', 1.2694 + '[foo<span style=background-color:#00FFFF>bar]</span>baz', 1.2695 + '[foo<a href=http://www.google.com><font color=blue>bar]</font></a>baz', 1.2696 + '[foo<font color=blue><a href=http://www.google.com>bar]</a></font>baz', 1.2697 + '[foo<a href=http://www.google.com><font color=brown>bar]</font></a>baz', 1.2698 + '[foo<font color=brown><a href=http://www.google.com>bar]</a></font>baz', 1.2699 + '[foo<a href=http://www.google.com><font color=black>bar]</font></a>baz', 1.2700 + '[foo<a href=http://www.google.com><u>bar]</u></a>baz', 1.2701 + '[foo<u><a href=http://www.google.com>bar]</a></u>baz', 1.2702 + '[foo<sub><font size=2>bar]</font></sub>baz', 1.2703 + '[foo<font size=2><sub>bar]</sub></font>baz', 1.2704 + '[foo<sub><font size=3>bar]</font></sub>baz', 1.2705 + '[foo<font size=3><sub>bar]</sub></font>baz', 1.2706 + 1.2707 + 'foo<b>[bar</b>baz]', 1.2708 + 'foo<i>[bar</i>baz]', 1.2709 + 'foo<s>[bar</s>baz]', 1.2710 + 'foo<sub>[bar</sub>baz]', 1.2711 + 'foo<sup>[bar</sup>baz]', 1.2712 + 'foo<u>[bar</u>baz]', 1.2713 + 'foo<a href=http://www.google.com>[bar</a>baz]', 1.2714 + 'foo<font face=sans-serif>[bar</font>baz]', 1.2715 + 'foo<font size=4>[bar</font>baz]', 1.2716 + 'foo<font color=#0000FF>[bar</font>baz]', 1.2717 + 'foo<span style=background-color:#00FFFF>[bar</span>baz]', 1.2718 + 'foo<a href=http://www.google.com><font color=blue>[bar</font></a>baz]', 1.2719 + 'foo<font color=blue><a href=http://www.google.com>[bar</a></font>baz]', 1.2720 + 'foo<a href=http://www.google.com><font color=brown>[bar</font></a>baz]', 1.2721 + 'foo<font color=brown><a href=http://www.google.com>[bar</a></font>baz]', 1.2722 + 'foo<a href=http://www.google.com><font color=black>[bar</font></a>baz]', 1.2723 + 'foo<a href=http://www.google.com><u>[bar</u></a>baz]', 1.2724 + 'foo<u><a href=http://www.google.com>[bar</a></u>baz]', 1.2725 + 'foo<sub><font size=2>[bar</font></sub>baz]', 1.2726 + 'foo<font size=2><sub>[bar</sub></font>baz]', 1.2727 + 'foo<sub><font size=3>[bar</font></sub>baz]', 1.2728 + 'foo<font size=3><sub>[bar</sub></font>baz]', 1.2729 + 1.2730 + // https://bugs.webkit.org/show_bug.cgi?id=19702 1.2731 + '<blockquote><font color=blue>[foo]</font></blockquote>', 1.2732 + ], 1.2733 + //@} 1.2734 + insertunorderedlist: [ 1.2735 + //@{ 1.2736 + 'foo[]bar', 1.2737 + 'foo[bar]baz', 1.2738 + 'foo<br>[bar]', 1.2739 + 'f[oo<br>b]ar<br>baz', 1.2740 + '<p>[foo]<br>bar</p>', 1.2741 + '[foo<ol><li>bar]</ol>baz', 1.2742 + 'foo<ol><li>[bar</ol>baz]', 1.2743 + '[foo<ul><li>bar]</ul>baz', 1.2744 + 'foo<ul><li>[bar</ul>baz]', 1.2745 + 'foo<ul><li>[bar</ul><ol><li>baz]</ol>quz', 1.2746 + 'foo<ol><li>[bar</ol><ul><li>baz]</ul>quz', 1.2747 + 1.2748 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.2749 + '<table><tbody><tr><td>fo[o<td>b]ar<td>baz</table>', 1.2750 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.2751 + 1.2752 + '<p>foo<p>[bar]<p>baz', 1.2753 + '<p>foo<blockquote>[bar]</blockquote><p>baz', 1.2754 + '<dl><dt>foo<dd>[bar]<dt>baz<dd>quz</dl>', 1.2755 + '<dl><dt>foo<dd>bar<dt>[baz]<dd>quz</dl>', 1.2756 + 1.2757 + '<p>[foo<p>bar]<p>baz', 1.2758 + '<p>[foo<blockquote>bar]</blockquote><p>baz', 1.2759 + '<dl><dt>[foo<dd>bar]<dt>baz<dd>quz</dl>', 1.2760 + '<dl><dt>foo<dd>[bar<dt>baz]<dd>quz</dl>', 1.2761 + 1.2762 + '<p>[foo<blockquote><p>bar]<p>baz</blockquote>', 1.2763 + 1.2764 + 1.2765 + // Various <ol> stuff 1.2766 + '<ol><li>foo<li>[bar]<li>baz</ol>', 1.2767 + '<ol><li>foo</ol>[bar]', 1.2768 + '[foo]<ol><li>bar</ol>', 1.2769 + '<ol><li>foo</ol>[bar]<ol><li>baz</ol>', 1.2770 + '<ol><ol><li>[foo]</ol></ol>', 1.2771 + '<ol><li>[foo]<br>bar<li>baz</ol>', 1.2772 + '<ol><li>foo<br>[bar]<li>baz</ol>', 1.2773 + '<ol><li><div>[foo]</div>bar<li>baz</ol>', 1.2774 + '<ol><li>foo<ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.2775 + '<ol><li>foo<ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.2776 + '<ol><li>foo</li><ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.2777 + '<ol><li>foo</li><ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.2778 + '<ol><li>[foo]<ol><li>bar</ol><li>baz</ol>', 1.2779 + '<ol><li>[foo]</li><ol><li>bar</ol><li>baz</ol>', 1.2780 + '<ol><li>foo<li>[bar]<ol><li>baz</ol><li>quz</ol>', 1.2781 + '<ol><li>foo<li>[bar]</li><ol><li>baz</ol><li>quz</ol>', 1.2782 + '<ol><li>foo<ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.2783 + '<ol><li>foo</li><ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.2784 + 1.2785 + // Multiple items at once. 1.2786 + '<ol><li>foo<li>[bar<li>baz]</ol>', 1.2787 + '<ol><li>[foo<ol><li>bar]</ol><li>baz</ol>', 1.2788 + '<ol><li>foo<ol><li>b[ar</ol><li>b]az</ol>', 1.2789 + '<ol><li>[foo<ol><li>bar</ol><li>baz]</ol><p>extra', 1.2790 + 1.2791 + // We probably can't actually get this DOM . . . 1.2792 + '<ol><li>[foo]<ol><li>bar</ol>baz</ol>', 1.2793 + '<ol><li>foo<ol><li>[bar]</ol>baz</ol>', 1.2794 + '<ol><li>foo<ol><li>bar</ol>[baz]</ol>', 1.2795 + '<ol><li>[foo<ol><li>bar]</ol>baz</ol>', 1.2796 + 1.2797 + 1.2798 + // Same stuff but with <ul> 1.2799 + '<ul><li>foo<li>[bar]<li>baz</ul>', 1.2800 + '<ul><li>foo</ul>[bar]', 1.2801 + '[foo]<ul><li>bar</ul>', 1.2802 + '<ul><li>foo</ul>[bar]<ul><li>baz</ul>', 1.2803 + '<ul><ul><li>[foo]</ul></ul>', 1.2804 + '<ul><li>[foo]<br>bar<li>baz</ul>', 1.2805 + '<ul><li>foo<br>[bar]<li>baz</ul>', 1.2806 + '<ul><li><div>[foo]</div>bar<li>baz</ul>', 1.2807 + '<ul><li>foo<ul><li>[bar]<li>baz</ul><li>quz</ul>', 1.2808 + '<ul><li>foo<ul><li>bar<li>[baz]</ul><li>quz</ul>', 1.2809 + '<ul><li>foo</li><ul><li>[bar]<li>baz</ul><li>quz</ul>', 1.2810 + '<ul><li>foo</li><ul><li>bar<li>[baz]</ul><li>quz</ul>', 1.2811 + '<ul><li>[foo]<ul><li>bar</ul><li>baz</ul>', 1.2812 + '<ul><li>[foo]</li><ul><li>bar</ul><li>baz</ul>', 1.2813 + '<ul><li>foo<li>[bar]<ul><li>baz</ul><li>quz</ul>', 1.2814 + '<ul><li>foo<li>[bar]</li><ul><li>baz</ul><li>quz</ul>', 1.2815 + '<ul><li>foo<ul><li>bar<li>baz</ul><li>[quz]</ul>', 1.2816 + '<ul><li>foo</li><ul><li>bar<li>baz</ul><li>[quz]</ul>', 1.2817 + 1.2818 + // Multiple items at once. 1.2819 + '<ul><li>foo<li>[bar<li>baz]</ul>', 1.2820 + '<ul><li>[foo<ul><li>bar]</ul><li>baz</ul>', 1.2821 + '<ul><li>foo<ul><li>b[ar</ul><li>b]az</ul>', 1.2822 + '<ul><li>[foo<ul><li>bar</ul><li>baz]</ul><p>extra', 1.2823 + 1.2824 + // We probably can't actually get this DOM . . . 1.2825 + '<ul><li>[foo]<ul><li>bar</ul>baz</ul>', 1.2826 + '<ul><li>foo<ul><li>[bar]</ul>baz</ul>', 1.2827 + '<ul><li>foo<ul><li>bar</ul>[baz]</ul>', 1.2828 + '<ul><li>[foo<ul><li>bar]</ul>baz</ul>', 1.2829 + 1.2830 + 1.2831 + // Mix of <ol> and <ul> 1.2832 + 'foo<ol><li>bar</ol><ul><li>[baz]</ul>quz', 1.2833 + 'foo<ol><li>bar</ol><ul><li>[baz</ul>quz]', 1.2834 + 'foo<ul><li>[bar]</ul><ol><li>baz</ol>quz', 1.2835 + '[foo<ul><li>bar]</ul><ol><li>baz</ol>quz', 1.2836 + 1.2837 + // Interaction with indentation 1.2838 + '[foo]<blockquote>bar</blockquote>baz', 1.2839 + 'foo<blockquote>[bar]</blockquote>baz', 1.2840 + '[foo<blockquote>bar]</blockquote>baz', 1.2841 + '<ol><li>foo</ol><blockquote>[bar]</blockquote>baz', 1.2842 + '[foo]<blockquote><ol><li>bar</ol></blockquote>baz', 1.2843 + 'foo<blockquote>[bar]<br>baz</blockquote>', 1.2844 + '[foo<blockquote>bar]<br>baz</blockquote>', 1.2845 + '<ol><li>foo</ol><blockquote>[bar]<br>baz</blockquote>', 1.2846 + 1.2847 + '<p>[foo]<blockquote><p>bar</blockquote><p>baz', 1.2848 + '<p>foo<blockquote><p>[bar]</blockquote><p>baz', 1.2849 + '<p>[foo<blockquote><p>bar]</blockquote><p>baz', 1.2850 + '<ol><li>foo</ol><blockquote><p>[bar]</blockquote><p>baz', 1.2851 + 1.2852 + // Attributes 1.2853 + '<ul id=abc><li>foo<li>[bar]<li>baz</ul>', 1.2854 + '<ul style=color:blue><li>foo<li>[bar]<li>baz</ul>', 1.2855 + '<ul style=text-indent:1em><li>foo<li>[bar]<li>baz</ul>', 1.2856 + '<ul id=abc><li>[foo]<li>bar<li>baz</ul>', 1.2857 + '<ul style=color:blue><li>[foo]<li>bar<li>baz</ul>', 1.2858 + '<ul style=text-indent:1em><li>[foo]<li>bar<li>baz</ul>', 1.2859 + '<ul id=abc><li>foo<li>bar<li>[baz]</ul>', 1.2860 + '<ul style=color:blue><li>foo<li>bar<li>[baz]</ul>', 1.2861 + '<ul style=text-indent:1em><li>foo<li>bar<li>[baz]</ul>', 1.2862 + 1.2863 + // Whitespace nodes 1.2864 + '<ul><li>foo</ul> <p>[bar]', 1.2865 + '<p>[foo]</p> <ul><li>bar</ul>', 1.2866 + '<ul><li>foo</ul> <p>[bar]</p> <ul><li>baz</ul>', 1.2867 + 1.2868 + // https://bugs.webkit.org/show_bug.cgi?id=24167 1.2869 + '{<div style="font-size: 1.3em">1</div><div style="font-size: 1.1em">2</div>}', 1.2870 + ], 1.2871 + //@} 1.2872 + italic: [ 1.2873 + //@{ 1.2874 + 'foo[]bar', 1.2875 + '<p>[foo</p> <p>bar]</p>', 1.2876 + '<span>[foo</span> <span>bar]</span>', 1.2877 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.2878 + '<p>[foo<p><br><p>bar]', 1.2879 + '<b>foo[]bar</b>', 1.2880 + '<i>foo[]bar</i>', 1.2881 + '<span>foo</span>{}<span>bar</span>', 1.2882 + '<span>foo[</span><span>]bar</span>', 1.2883 + 'foo[bar]baz', 1.2884 + 'foo[bar<b>baz]qoz</b>quz', 1.2885 + 'foo[bar<i>baz]qoz</i>quz', 1.2886 + '{<p><p> <p>foo</p>}', 1.2887 + 1.2888 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.2889 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.2890 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.2891 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.2892 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.2893 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.2894 + 1.2895 + 'foo<span style="font-style: italic">[bar]</span>baz', 1.2896 + 'foo<address>[bar]</address>baz', 1.2897 + 'foo<cite>[bar]</cite>baz', 1.2898 + 'foo<dfn>[bar]</dfn>baz', 1.2899 + 'foo<em>[bar]</em>baz', 1.2900 + 'foo<i>[bar]</i>baz', 1.2901 + 'foo<var>[bar]</var>baz', 1.2902 + 1.2903 + 'foo{<address>bar</address>}baz', 1.2904 + 'foo{<cite>bar</cite>}baz', 1.2905 + 'foo{<dfn>bar</dfn>}baz', 1.2906 + 'foo{<em>bar</em>}baz', 1.2907 + 'foo{<i>bar</i>}baz', 1.2908 + 'foo{<var>bar</var>}baz', 1.2909 + 1.2910 + 'foo<address>b[a]r</address>baz', 1.2911 + 'foo<cite>b[a]r</cite>baz', 1.2912 + 'foo<dfn>b[a]r</dfn>baz', 1.2913 + 'foo<em>b[a]r</em>baz', 1.2914 + 'foo<i>b[a]r</i>baz', 1.2915 + 'foo<var>b[a]r</var>baz', 1.2916 + 1.2917 + 'fo[o<address>bar</address>b]az', 1.2918 + 'fo[o<cite>bar</cite>b]az', 1.2919 + 'fo[o<dfn>bar</dfn>b]az', 1.2920 + 'fo[o<em>bar</em>b]az', 1.2921 + 'fo[o<i>bar</i>b]az', 1.2922 + 'fo[o<var>bar</var>b]az', 1.2923 + 1.2924 + 'foo[<address>bar</address>baz]', 1.2925 + 'foo[<cite>bar</cite>baz]', 1.2926 + 'foo[<dfn>bar</dfn>baz]', 1.2927 + 'foo[<em>bar</em>baz]', 1.2928 + 'foo[<i>bar</i>baz]', 1.2929 + 'foo[<var>bar</var>baz]', 1.2930 + 1.2931 + '[foo<address>bar</address>]baz', 1.2932 + '[foo<cite>bar</cite>]baz', 1.2933 + '[foo<dfn>bar</dfn>]baz', 1.2934 + '[foo<em>bar</em>]baz', 1.2935 + '[foo<i>bar</i>]baz', 1.2936 + '[foo<var>bar</var>]baz', 1.2937 + 1.2938 + 'foo<span style="font-style: italic">[bar]</span>baz', 1.2939 + 'foo<span style="font-style: oblique">[bar]</span>baz', 1.2940 + 'foo<span style="font-style: oblique">b[a]r</span>baz', 1.2941 + 1.2942 + '<i>{<p>foo</p><p>bar</p>}<p>baz</p></i>', 1.2943 + '<i><p>foo[<b>bar</b>}</p><p>baz</p></i>', 1.2944 + 'foo [bar <b>baz] qoz</b> quz sic', 1.2945 + 'foo bar <b>baz [qoz</b> quz] sic', 1.2946 + 'foo [bar <i>baz] qoz</i> quz sic', 1.2947 + 'foo bar <i>baz [qoz</i> quz] sic', 1.2948 + 1.2949 + // Tests for queryCommandIndeterm() and queryCommandState() 1.2950 + 'fo[o<i>b]ar</i>baz', 1.2951 + 'foo<i>ba[r</i>b]az', 1.2952 + 'fo[o<i>bar</i>b]az', 1.2953 + 'foo[<i>b]ar</i>baz', 1.2954 + 'foo<i>ba[r</i>]baz', 1.2955 + 'foo[<i>bar</i>]baz', 1.2956 + 'foo<i>[bar]</i>baz', 1.2957 + 'foo{<i>bar</i>}baz', 1.2958 + 'fo[o<span style=font-style:italic>b]ar</span>baz', 1.2959 + 'fo[o<span style=font-style:oblique>b]ar</span>baz', 1.2960 + '<span style=font-style:italic>fo[o</span><span style=font-style:oblique>b]ar</span>', 1.2961 + '<span style=font-style:oblique>fo[o</span><span style=font-style:italic>b]ar</span>', 1.2962 + '<i>fo[o</i><address>b]ar</address>', 1.2963 + ], 1.2964 + //@} 1.2965 + justifycenter: [ 1.2966 + //@{ 1.2967 + 'foo[]bar<p>extra', 1.2968 + '<span>foo</span>{}<span>bar</span><p>extra', 1.2969 + '<span>foo[</span><span>]bar</span><p>extra', 1.2970 + 'foo[bar]baz<p>extra', 1.2971 + 'foo[bar<b>baz]qoz</b>quz<p>extra', 1.2972 + '<p>foo[]bar<p>extra', 1.2973 + '<p>foo[bar]baz<p>extra', 1.2974 + '<h1>foo[bar]baz</h1><p>extra', 1.2975 + '<pre>foo[bar]baz</pre><p>extra', 1.2976 + '<xmp>foo[bar]baz</xmp><p>extra', 1.2977 + '<center><p>[foo]<p>bar</center><p>extra', 1.2978 + '<center><p>[foo<p>bar]</center><p>extra', 1.2979 + 1.2980 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.2981 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.2982 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.2983 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.2984 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.2985 + '{<table><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.2986 + 1.2987 + '<table align=center><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.2988 + '<table align=center><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.2989 + '<table align=center><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.2990 + '<table align=center><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.2991 + '<table align=center data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.2992 + '{<table align=center><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.2993 + 1.2994 + '<table><tbody align=center><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.2995 + '<table><tbody align=center><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.2996 + '<table><tbody align=center><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.2997 + '<table><tbody align=center data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.2998 + '<table data-start=0 data-end=1><tbody align=center><tr><td>foo<td>bar<td>baz</table><p>extra', 1.2999 + '{<table><tbody align=center><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3000 + 1.3001 + '<table><tbody><tr align=center><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3002 + '<table><tbody><tr align=center data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3003 + '<table><tbody><tr align=center data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3004 + '<table><tbody data-start=0 data-end=1><tr align=center><td>foo<td>bar<td>baz</table><p>extra', 1.3005 + '<table data-start=0 data-end=1><tbody><tr align=center><td>foo<td>bar<td>baz</table><p>extra', 1.3006 + '{<table><tr align=center><td>foo<td>bar<td>baz</table>}<p>extra', 1.3007 + 1.3008 + '<div align=center><p>[foo]<p>bar</div><p>extra', 1.3009 + '<div align=center><p>[foo<p>bar}</div><p>extra', 1.3010 + '<div style=text-align:center><p>[foo]<p>bar</div><p>extra', 1.3011 + '<div style=text-align:center><p>[foo<p>bar]</div><p>extra', 1.3012 + 1.3013 + '<div align=justify><p>[foo]<p>bar</div><p>extra', 1.3014 + '<div align=justify><p>[foo<p>bar}</div><p>extra', 1.3015 + '<div style=text-align:justify><p>[foo]<p>bar</div><p>extra', 1.3016 + '<div style=text-align:justify><p>[foo<p>bar]</div><p>extra', 1.3017 + 1.3018 + '<div align=left><p>[foo]<p>bar</div><p>extra', 1.3019 + '<div align=left><p>[foo<p>bar}</div><p>extra', 1.3020 + '<div style=text-align:left><p>[foo]<p>bar</div><p>extra', 1.3021 + '<div style=text-align:left><p>[foo<p>bar]</div><p>extra', 1.3022 + 1.3023 + '<div align=right><p>[foo]<p>bar</div><p>extra', 1.3024 + '<div align=right><p>[foo<p>bar}</div><p>extra', 1.3025 + '<div style=text-align:right><p>[foo]<p>bar</div><p>extra', 1.3026 + '<div style=text-align:right><p>[foo<p>bar]</div><p>extra', 1.3027 + 1.3028 + '<center>foo</center>[bar]<p>extra', 1.3029 + '[foo]<center>bar</center><p>extra', 1.3030 + '<center>foo</center>[bar]<center>baz</center><p>extra', 1.3031 + '<div align=center>foo</div>[bar]<p>extra', 1.3032 + '[foo]<div align=center>bar</div><p>extra', 1.3033 + '<div align=center>foo</div>[bar]<div align=center>baz</div><p>extra', 1.3034 + '<div align=center><p>foo</div><p>[bar]<p>extra', 1.3035 + '<p>[foo]<div align=center><p>bar</div><p>extra', 1.3036 + '<div align=center><p>foo</div><p>[bar]<div align=center><p>baz</div><p>extra', 1.3037 + '<div style=text-align:center>foo</div>[bar]<p>extra', 1.3038 + '[foo]<div style=text-align:center>bar</div><p>extra', 1.3039 + '<div style=text-align:center>foo</div>[bar]<div style=text-align:center>baz</div><p>extra', 1.3040 + '<div style=text-align:center><p>foo</div><p>[bar]<p>extra', 1.3041 + '<p>[foo]<div style=text-align:center><p>bar</div><p>extra', 1.3042 + '<div style=text-align:center><p>foo</div><p>[bar]<div style=text-align:center><p>baz</div><p>extra', 1.3043 + '<p align=center>foo<p>[bar]<p>extra', 1.3044 + '<p>[foo]<p align=center>bar<p>extra', 1.3045 + '<p align=center>foo<p>[bar]<p align=center>baz<p>extra', 1.3046 + 1.3047 + '<center>[foo</center>bar]<p>extra', 1.3048 + '<center>fo[o</center>b]ar<p>extra', 1.3049 + '<div align=center>[foo</div>bar]<p>extra', 1.3050 + '<div align=center>fo[o</div>b]ar<p>extra', 1.3051 + '<div style=text-align:center>[foo</div>bar]<p>extra', 1.3052 + '<div style=text-align:center>fo[o</div>b]ar<p>extra', 1.3053 + '<span style=text-align:center>[foo]</span><p>extra', 1.3054 + '<span style=text-align:center>f[o]o</span><p>extra', 1.3055 + 1.3056 + '<div style=text-align:center>[foo<div style=text-align:left contenteditable=false>bar</div>baz]</div><p>extra', 1.3057 + 1.3058 + '<div align=nonsense><p>[foo]</div><p>extra', 1.3059 + '<div style=text-align:inherit><p>[foo]</div><p>extra', 1.3060 + '<quasit align=right><p>[foo]</p></quasit><p>extra', 1.3061 + 1.3062 + '<div align=center>{<div align=left>foo</div>}</div>', 1.3063 + '<div align=left>{<div align=center>foo</div>}</div>', 1.3064 + '<div align=center>{<div align=left>foo</div>bar}</div>', 1.3065 + '<div align=left>{<div align=center>foo</div>bar}</div>', 1.3066 + '<div align=center>{<div align=left>foo</div><img src=/img/lion.svg>}</div>', 1.3067 + '<div align=left>{<div align=center>foo</div><img src=/img/lion.svg>}</div>', 1.3068 + '<div align=center>{<div align=left>foo</div><!-- bar -->}</div>', 1.3069 + '<div align=left>{<div align=center>foo</div><!-- bar -->}</div>', 1.3070 + 1.3071 + '<div style=text-align:start>[foo]</div><p>extra', 1.3072 + '<div style=text-align:end>[foo]</div><p>extra', 1.3073 + '<div dir=rtl style=text-align:start>[foo]</div><p>extra', 1.3074 + '<div dir=rtl style=text-align:end>[foo]</div><p>extra', 1.3075 + 1.3076 + // Whitespace nodes 1.3077 + '<div style=text-align:center><p>foo</div> <p>[bar]', 1.3078 + '<div align=center><p>foo</div> <p>[bar]', 1.3079 + '<center><p>foo</center> <p>[bar]', 1.3080 + '<p>[foo]</p> <div style=text-align:center><p>bar</div>', 1.3081 + '<p>[foo]</p> <div align=center><p>bar</div>', 1.3082 + '<p>[foo]</p> <center><p>bar</center>', 1.3083 + '<div style=text-align:center><p>foo</div> <p>[bar]</p> <div style=text-align:center><p>baz</div>', 1.3084 + '<div align=center><p>foo</div> <p>[bar]</p> <div align=center><p>baz</div>', 1.3085 + '<center><p>foo</center> <p>[bar]</p> <center><p>baz</center>', 1.3086 + ], 1.3087 + //@} 1.3088 + justifyfull: [ 1.3089 + //@{ 1.3090 + 'foo[]bar<p>extra', 1.3091 + '<span>foo</span>{}<span>bar</span><p>extra', 1.3092 + '<span>foo[</span><span>]bar</span><p>extra', 1.3093 + 'foo[bar]baz<p>extra', 1.3094 + 'foo[bar<b>baz]qoz</b>quz<p>extra', 1.3095 + '<p>foo[]bar<p>extra', 1.3096 + '<p>foo[bar]baz<p>extra', 1.3097 + '<h1>foo[bar]baz</h1><p>extra', 1.3098 + '<pre>foo[bar]baz</pre><p>extra', 1.3099 + '<xmp>foo[bar]baz</xmp><p>extra', 1.3100 + '<center><p>[foo]<p>bar</center><p>extra', 1.3101 + '<center><p>[foo<p>bar]</center><p>extra', 1.3102 + 1.3103 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3104 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3105 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3106 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3107 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3108 + '{<table><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3109 + 1.3110 + '<table align=justify><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3111 + '<table align=justify><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3112 + '<table align=justify><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3113 + '<table align=justify><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3114 + '<table align=justify data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3115 + '{<table align=justify><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3116 + 1.3117 + '<table><tbody align=justify><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3118 + '<table><tbody align=justify><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3119 + '<table><tbody align=justify><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3120 + '<table><tbody align=justify data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3121 + '<table data-start=0 data-end=1><tbody align=justify><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3122 + '{<table><tbody align=justify><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3123 + 1.3124 + '<table><tbody><tr align=justify><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3125 + '<table><tbody><tr align=justify data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3126 + '<table><tbody><tr align=justify data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3127 + '<table><tbody data-start=0 data-end=1><tr align=justify><td>foo<td>bar<td>baz</table><p>extra', 1.3128 + '<table data-start=0 data-end=1><tbody><tr align=justify><td>foo<td>bar<td>baz</table><p>extra', 1.3129 + '{<table><tr align=justify><td>foo<td>bar<td>baz</table>}<p>extra', 1.3130 + 1.3131 + '<div align=center><p>[foo]<p>bar</div><p>extra', 1.3132 + '<div align=center><p>[foo<p>bar}</div><p>extra', 1.3133 + '<div style=text-align:center><p>[foo]<p>bar</div><p>extra', 1.3134 + '<div style=text-align:center><p>[foo<p>bar]</div><p>extra', 1.3135 + 1.3136 + '<div align=justify><p>[foo]<p>bar</div><p>extra', 1.3137 + '<div align=justify><p>[foo<p>bar}</div><p>extra', 1.3138 + '<div style=text-align:justify><p>[foo]<p>bar</div><p>extra', 1.3139 + '<div style=text-align:justify><p>[foo<p>bar]</div><p>extra', 1.3140 + 1.3141 + '<div align=left><p>[foo]<p>bar</div><p>extra', 1.3142 + '<div align=left><p>[foo<p>bar}</div><p>extra', 1.3143 + '<div style=text-align:left><p>[foo]<p>bar</div><p>extra', 1.3144 + '<div style=text-align:left><p>[foo<p>bar]</div><p>extra', 1.3145 + 1.3146 + '<div align=right><p>[foo]<p>bar</div><p>extra', 1.3147 + '<div align=right><p>[foo<p>bar}</div><p>extra', 1.3148 + '<div style=text-align:right><p>[foo]<p>bar</div><p>extra', 1.3149 + '<div style=text-align:right><p>[foo<p>bar]</div><p>extra', 1.3150 + 1.3151 + '<div align=justify>foo</div>[bar]<p>extra', 1.3152 + '[foo]<div align=justify>bar</div><p>extra', 1.3153 + '<div align=justify>foo</div>[bar]<div align=justify>baz</div><p>extra', 1.3154 + '<div align=justify><p>foo</div><p>[bar]<p>extra', 1.3155 + '<p>[foo]<div align=justify><p>bar</div><p>extra', 1.3156 + '<div align=justify><p>foo</div><p>[bar]<div align=justify><p>baz</div><p>extra', 1.3157 + '<div style=text-align:justify>foo</div>[bar]<p>extra', 1.3158 + '[foo]<div style=text-align:justify>bar</div><p>extra', 1.3159 + '<div style=text-align:justify>foo</div>[bar]<div style=text-align:justify>baz</div><p>extra', 1.3160 + '<div style=text-align:justify><p>foo</div><p>[bar]<p>extra', 1.3161 + '<p>[foo]<div style=text-align:justify><p>bar</div><p>extra', 1.3162 + '<div style=text-align:justify><p>foo</div><p>[bar]<div style=text-align:justify><p>baz</div><p>extra', 1.3163 + '<p align=justify>foo<p>[bar]<p>extra', 1.3164 + '<p>[foo]<p align=justify>bar<p>extra', 1.3165 + '<p align=justify>foo<p>[bar]<p align=justify>baz<p>extra', 1.3166 + 1.3167 + '<div align=justify>[foo</div>bar]<p>extra', 1.3168 + '<div align=justify>fo[o</div>b]ar<p>extra', 1.3169 + '<div style=text-align:justify>[foo</div>bar]<p>extra', 1.3170 + '<div style=text-align:justify>fo[o</div>b]ar<p>extra', 1.3171 + '<span style=text-align:justify>[foo]</span><p>extra', 1.3172 + '<span style=text-align:justify>f[o]o</span><p>extra', 1.3173 + 1.3174 + '<div style=text-align:justify>[foo<div style=text-align:left contenteditable=false>bar</div>baz]</div><p>extra', 1.3175 + 1.3176 + '<div align=nonsense><p>[foo]</div><p>extra', 1.3177 + '<div style=text-align:inherit><p>[foo]</div><p>extra', 1.3178 + '<quasit align=center><p>[foo]</p></quasit><p>extra', 1.3179 + 1.3180 + '<div style=text-align:start>[foo]</div><p>extra', 1.3181 + '<div style=text-align:end>[foo]</div><p>extra', 1.3182 + '<div dir=rtl style=text-align:start>[foo]</div><p>extra', 1.3183 + '<div dir=rtl style=text-align:end>[foo]</div><p>extra', 1.3184 + 1.3185 + // Whitespace nodes 1.3186 + '<div style=text-align:justify><p>foo</div> <p>[bar]', 1.3187 + '<div align=justify><p>foo</div> <p>[bar]', 1.3188 + '<p>[foo]</p> <div style=text-align:justify><p>bar</div>', 1.3189 + '<p>[foo]</p> <div align=justify><p>bar</div>', 1.3190 + '<div style=text-align:justify><p>foo</div> <p>[bar]</p> <div style=text-align:justify><p>baz</div>', 1.3191 + '<div align=justify><p>foo</div> <p>[bar]</p> <div align=justify><p>baz</div>', 1.3192 + ], 1.3193 + //@} 1.3194 + justifyleft: [ 1.3195 + //@{ 1.3196 + 'foo[]bar<p>extra', 1.3197 + '<span>foo</span>{}<span>bar</span><p>extra', 1.3198 + '<span>foo[</span><span>]bar</span><p>extra', 1.3199 + 'foo[bar]baz<p>extra', 1.3200 + 'foo[bar<b>baz]qoz</b>quz<p>extra', 1.3201 + '<p>foo[]bar<p>extra', 1.3202 + '<p>foo[bar]baz<p>extra', 1.3203 + '<h1>foo[bar]baz</h1><p>extra', 1.3204 + '<pre>foo[bar]baz</pre><p>extra', 1.3205 + '<xmp>foo[bar]baz</xmp><p>extra', 1.3206 + '<center><p>[foo]<p>bar</center><p>extra', 1.3207 + '<center><p>[foo<p>bar]</center><p>extra', 1.3208 + 1.3209 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3210 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3211 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3212 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3213 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3214 + '{<table><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3215 + 1.3216 + '<table align=left><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3217 + '<table align=left><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3218 + '<table align=left><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3219 + '<table align=left><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3220 + '<table align=left data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3221 + '{<table align=left><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3222 + 1.3223 + '<table><tbody align=left><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3224 + '<table><tbody align=left><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3225 + '<table><tbody align=left><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3226 + '<table><tbody align=left data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3227 + '<table data-start=0 data-end=1><tbody align=left><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3228 + '{<table><tbody align=left><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3229 + 1.3230 + '<table><tbody><tr align=left><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3231 + '<table><tbody><tr align=left data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3232 + '<table><tbody><tr align=left data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3233 + '<table><tbody data-start=0 data-end=1><tr align=left><td>foo<td>bar<td>baz</table><p>extra', 1.3234 + '<table data-start=0 data-end=1><tbody><tr align=left><td>foo<td>bar<td>baz</table><p>extra', 1.3235 + '{<table><tr align=left><td>foo<td>bar<td>baz</table>}<p>extra', 1.3236 + 1.3237 + '<div align=center><p>[foo]<p>bar</div><p>extra', 1.3238 + '<div align=center><p>[foo<p>bar}</div><p>extra', 1.3239 + '<div style=text-align:center><p>[foo]<p>bar</div><p>extra', 1.3240 + '<div style=text-align:center><p>[foo<p>bar]</div><p>extra', 1.3241 + 1.3242 + '<div align=justify><p>[foo]<p>bar</div><p>extra', 1.3243 + '<div align=justify><p>[foo<p>bar}</div><p>extra', 1.3244 + '<div style=text-align:justify><p>[foo]<p>bar</div><p>extra', 1.3245 + '<div style=text-align:justify><p>[foo<p>bar]</div><p>extra', 1.3246 + 1.3247 + '<div align=left><p>[foo]<p>bar</div><p>extra', 1.3248 + '<div align=left><p>[foo<p>bar}</div><p>extra', 1.3249 + '<div style=text-align:left><p>[foo]<p>bar</div><p>extra', 1.3250 + '<div style=text-align:left><p>[foo<p>bar]</div><p>extra', 1.3251 + 1.3252 + '<div align=right><p>[foo]<p>bar</div><p>extra', 1.3253 + '<div align=right><p>[foo<p>bar}</div><p>extra', 1.3254 + '<div style=text-align:right><p>[foo]<p>bar</div><p>extra', 1.3255 + '<div style=text-align:right><p>[foo<p>bar]</div><p>extra', 1.3256 + 1.3257 + '<div align=left>foo</div>[bar]<p>extra', 1.3258 + '[foo]<div align=left>bar</div><p>extra', 1.3259 + '<div align=left>foo</div>[bar]<div align=left>baz</div><p>extra', 1.3260 + '<div align=left><p>foo</div><p>[bar]<p>extra', 1.3261 + '<p>[foo]<div align=left><p>bar</div><p>extra', 1.3262 + '<div align=left><p>foo</div><p>[bar]<div align=left><p>baz</div><p>extra', 1.3263 + '<div style=text-align:left>foo</div>[bar]<p>extra', 1.3264 + '[foo]<div style=text-align:left>bar</div><p>extra', 1.3265 + '<div style=text-align:left>foo</div>[bar]<div style=text-align:left>baz</div><p>extra', 1.3266 + '<div style=text-align:left><p>foo</div><p>[bar]<p>extra', 1.3267 + '<p>[foo]<div style=text-align:left><p>bar</div><p>extra', 1.3268 + '<div style=text-align:left><p>foo</div><p>[bar]<div style=text-align:left><p>baz</div><p>extra', 1.3269 + '<p align=left>foo<p>[bar]<p>extra', 1.3270 + '<p>[foo]<p align=left>bar<p>extra', 1.3271 + '<p align=left>foo<p>[bar]<p align=left>baz<p>extra', 1.3272 + 1.3273 + '<div align=left>[foo</div>bar]<p>extra', 1.3274 + '<div align=left>fo[o</div>b]ar<p>extra', 1.3275 + '<div style=text-align:left>[foo</div>bar]<p>extra', 1.3276 + '<div style=text-align:left>fo[o</div>b]ar<p>extra', 1.3277 + '<span style=text-align:left>[foo]</span><p>extra', 1.3278 + '<span style=text-align:left>f[o]o</span><p>extra', 1.3279 + 1.3280 + '<div style=text-align:left>[foo<div style=text-align:left contenteditable=false>bar</div>baz]</div><p>extra', 1.3281 + 1.3282 + '<div align=nonsense><p>[foo]</div><p>extra', 1.3283 + '<div style=text-align:inherit><p>[foo]</div><p>extra', 1.3284 + '<quasit align=center><p>[foo]</p></quasit><p>extra', 1.3285 + 1.3286 + '<div style=text-align:start>[foo]</div><p>extra', 1.3287 + '<div style=text-align:end>[foo]</div><p>extra', 1.3288 + '<div dir=rtl style=text-align:start>[foo]</div><p>extra', 1.3289 + '<div dir=rtl style=text-align:end>[foo]</div><p>extra', 1.3290 + 1.3291 + // Whitespace nodes 1.3292 + '<div style=text-align:left><p>foo</div> <p>[bar]', 1.3293 + '<div align=left><p>foo</div> <p>[bar]', 1.3294 + '<p>[foo]</p> <div style=text-align:left><p>bar</div>', 1.3295 + '<p>[foo]</p> <div align=left><p>bar</div>', 1.3296 + '<div style=text-align:left><p>foo</div> <p>[bar]</p> <div style=text-align:left><p>baz</div>', 1.3297 + '<div align=left><p>foo</div> <p>[bar]</p> <div align=left><p>baz</div>', 1.3298 + ], 1.3299 + //@} 1.3300 + justifyright: [ 1.3301 + //@{ 1.3302 + 'foo[]bar<p>extra', 1.3303 + '<span>foo</span>{}<span>bar</span><p>extra', 1.3304 + '<span>foo[</span><span>]bar</span><p>extra', 1.3305 + 'foo[bar]baz<p>extra', 1.3306 + 'foo[bar<b>baz]qoz</b>quz<p>extra', 1.3307 + '<p>foo[]bar<p>extra', 1.3308 + '<p>foo[bar]baz<p>extra', 1.3309 + '<h1>foo[bar]baz</h1><p>extra', 1.3310 + '<pre>foo[bar]baz</pre><p>extra', 1.3311 + '<xmp>foo[bar]baz</xmp><p>extra', 1.3312 + '<center><p>[foo]<p>bar</center><p>extra', 1.3313 + '<center><p>[foo<p>bar]</center><p>extra', 1.3314 + 1.3315 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3316 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3317 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3318 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3319 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3320 + '{<table><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3321 + 1.3322 + '<table align=right><tbody><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3323 + '<table align=right><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3324 + '<table align=right><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3325 + '<table align=right><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3326 + '<table align=right data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3327 + '{<table align=right><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3328 + 1.3329 + '<table><tbody align=right><tr><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3330 + '<table><tbody align=right><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3331 + '<table><tbody align=right><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3332 + '<table><tbody align=right data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3333 + '<table data-start=0 data-end=1><tbody align=right><tr><td>foo<td>bar<td>baz</table><p>extra', 1.3334 + '{<table><tbody align=right><tr><td>foo<td>bar<td>baz</table>}<p>extra', 1.3335 + 1.3336 + '<table><tbody><tr align=right><td>foo<td>b[a]r<td>baz</table><p>extra', 1.3337 + '<table><tbody><tr align=right data-start=1 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3338 + '<table><tbody><tr align=right data-start=0 data-end=2><td>foo<td>bar<td>baz</table><p>extra', 1.3339 + '<table><tbody data-start=0 data-end=1><tr align=right><td>foo<td>bar<td>baz</table><p>extra', 1.3340 + '<table data-start=0 data-end=1><tbody><tr align=right><td>foo<td>bar<td>baz</table><p>extra', 1.3341 + '{<table><tr align=right><td>foo<td>bar<td>baz</table>}<p>extra', 1.3342 + 1.3343 + '<div align=center><p>[foo]<p>bar</div><p>extra', 1.3344 + '<div align=center><p>[foo<p>bar}</div><p>extra', 1.3345 + '<div style=text-align:center><p>[foo]<p>bar</div><p>extra', 1.3346 + '<div style=text-align:center><p>[foo<p>bar]</div><p>extra', 1.3347 + 1.3348 + '<div align=justify><p>[foo]<p>bar</div><p>extra', 1.3349 + '<div align=justify><p>[foo<p>bar}</div><p>extra', 1.3350 + '<div style=text-align:justify><p>[foo]<p>bar</div><p>extra', 1.3351 + '<div style=text-align:justify><p>[foo<p>bar]</div><p>extra', 1.3352 + 1.3353 + '<div align=left><p>[foo]<p>bar</div><p>extra', 1.3354 + '<div align=left><p>[foo<p>bar}</div><p>extra', 1.3355 + '<div style=text-align:left><p>[foo]<p>bar</div><p>extra', 1.3356 + '<div style=text-align:left><p>[foo<p>bar]</div><p>extra', 1.3357 + 1.3358 + '<div align=right><p>[foo]<p>bar</div><p>extra', 1.3359 + '<div align=right><p>[foo<p>bar}</div><p>extra', 1.3360 + '<div style=text-align:right><p>[foo]<p>bar</div><p>extra', 1.3361 + '<div style=text-align:right><p>[foo<p>bar]</div><p>extra', 1.3362 + 1.3363 + '<div align=right>foo</div>[bar]<p>extra', 1.3364 + '[foo]<div align=right>bar</div><p>extra', 1.3365 + '<div align=right>foo</div>[bar]<div align=right>baz</div><p>extra', 1.3366 + '<div align=right><p>foo</div><p>[bar]<p>extra', 1.3367 + '<p>[foo]<div align=right><p>bar</div><p>extra', 1.3368 + '<div align=right><p>foo</div><p>[bar]<div align=right><p>baz</div><p>extra', 1.3369 + '<div style=text-align:right>foo</div>[bar]<p>extra', 1.3370 + '[foo]<div style=text-align:right>bar</div><p>extra', 1.3371 + '<div style=text-align:right>foo</div>[bar]<div style=text-align:right>baz</div><p>extra', 1.3372 + '<div style=text-align:right><p>foo</div><p>[bar]<p>extra', 1.3373 + '<p>[foo]<div style=text-align:right><p>bar</div><p>extra', 1.3374 + '<div style=text-align:right><p>foo</div><p>[bar]<div style=text-align:right><p>baz</div><p>extra', 1.3375 + '<p align=right>foo<p>[bar]<p>extra', 1.3376 + '<p>[foo]<p align=right>bar<p>extra', 1.3377 + '<p align=right>foo<p>[bar]<p align=right>baz<p>extra', 1.3378 + 1.3379 + '<div align=right>[foo</div>bar]<p>extra', 1.3380 + '<div align=right>fo[o</div>b]ar<p>extra', 1.3381 + '<div style=text-align:right>[foo</div>bar]<p>extra', 1.3382 + '<div style=text-align:right>fo[o</div>b]ar<p>extra', 1.3383 + '<span style=text-align:right>[foo]</span><p>extra', 1.3384 + '<span style=text-align:right>f[o]o</span><p>extra', 1.3385 + 1.3386 + '<div style=text-align:right>[foo<div style=text-align:left contenteditable=false>bar</div>baz]</div><p>extra', 1.3387 + 1.3388 + '<div align=nonsense><p>[foo]</div><p>extra', 1.3389 + '<div style=text-align:inherit><p>[foo]</div><p>extra', 1.3390 + '<quasit align=center><p>[foo]</p></quasit><p>extra', 1.3391 + 1.3392 + '<div style=text-align:start>[foo]</div><p>extra', 1.3393 + '<div style=text-align:end>[foo]</div><p>extra', 1.3394 + '<div dir=rtl style=text-align:start>[foo]</div><p>extra', 1.3395 + '<div dir=rtl style=text-align:end>[foo]</div><p>extra', 1.3396 + 1.3397 + // Whitespace nodes 1.3398 + '<div style=text-align:right><p>foo</div> <p>[bar]', 1.3399 + '<div align=right><p>foo</div> <p>[bar]', 1.3400 + '<p>[foo]</p> <div style=text-align:right><p>bar</div>', 1.3401 + '<p>[foo]</p> <div align=right><p>bar</div>', 1.3402 + '<div style=text-align:right><p>foo</div> <p>[bar]</p> <div style=text-align:right><p>baz</div>', 1.3403 + '<div align=right><p>foo</div> <p>[bar]</p> <div align=right><p>baz</div>', 1.3404 + ], 1.3405 + //@} 1.3406 + outdent: [ 1.3407 + //@{ 1.3408 + // These mimic existing indentation in various browsers, to see how 1.3409 + // they cope with outdenting various things. This is spec, Gecko 1.3410 + // non-CSS, and Opera: 1.3411 + '<blockquote><p>foo[bar]</p><p>baz</p></blockquote><p>extra', 1.3412 + '<blockquote><p>foo[bar</p><p>b]az</p></blockquote><p>extra', 1.3413 + '<blockquote><p>foo[bar]</p></blockquote><p>baz</p><p>extra', 1.3414 + '<blockquote><p>foo[bar</p></blockquote><p>b]az</p><p>extra', 1.3415 + 1.3416 + // IE: 1.3417 + '<blockquote style="margin-right: 0px;" dir="ltr"><p>foo[bar]</p><p>baz</p></blockquote><p>extra', 1.3418 + '<blockquote style="margin-right: 0px;" dir="ltr"><p>foo[bar</p><p>b]az</p></blockquote><p>extra', 1.3419 + '<blockquote style="margin-right: 0px;" dir="ltr"><p>foo[bar]</p></blockquote><p>baz</p><p>extra', 1.3420 + '<blockquote style="margin-right: 0px;" dir="ltr"><p>foo[bar</p></blockquote><p>b]az</p><p>extra', 1.3421 + 1.3422 + // Firefox CSS mode: 1.3423 + '<p style="margin-left: 40px">foo[bar]</p><p style="margin-left: 40px">baz</p><p>extra', 1.3424 + '<p style="margin-left: 40px">foo[bar</p><p style="margin-left: 40px">b]az</p><p>extra', 1.3425 + '<p style="margin-left: 40px">foo[bar]</p><p>baz</p><p>extra', 1.3426 + '<p style="margin-left: 40px">foo[bar</p><p>b]az</p><p>extra', 1.3427 + 1.3428 + // WebKit: 1.3429 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>foo[bar]</p><p>baz</p></blockquote><p>extra', 1.3430 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>foo[bar</p><p>b]az</p></blockquote><p>extra', 1.3431 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>foo[bar]</p></blockquote><p>baz</p><p>extra', 1.3432 + '<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>foo[bar</p></blockquote><p>b]az</p><p>extra', 1.3433 + 1.3434 + // Now let's try nesting lots of stuff and see what happens. 1.3435 + '<blockquote><blockquote>foo[bar]baz</blockquote></blockquote>', 1.3436 + '<blockquote><blockquote data-abc=def>foo[bar]baz</blockquote></blockquote>', 1.3437 + '<blockquote data-abc=def><blockquote>foo[bar]baz</blockquote></blockquote>', 1.3438 + '<blockquote><div>foo[bar]baz</div></blockquote>', 1.3439 + '<blockquote><div id=abc>foo[bar]baz</div></blockquote>', 1.3440 + '<blockquote id=abc>foo[bar]baz</blockquote>', 1.3441 + '<blockquote style="color: blue">foo[bar]baz</blockquote>', 1.3442 + 1.3443 + '<blockquote><blockquote><p>foo[bar]<p>baz</blockquote></blockquote>', 1.3444 + '<blockquote><blockquote data-abc=def><p>foo[bar]<p>baz</blockquote></blockquote>', 1.3445 + '<blockquote data-abc=def><blockquote><p>foo[bar]<p>baz</blockquote></blockquote>', 1.3446 + '<blockquote><div><p>foo[bar]<p>baz</div></blockquote>', 1.3447 + '<blockquote><div id=abc><p>foo[bar]<p>baz</div></blockquote>', 1.3448 + '<blockquote id=abc><p>foo[bar]<p>baz</blockquote>', 1.3449 + '<blockquote style="color: blue"><p>foo[bar]<p>baz</blockquote>', 1.3450 + 1.3451 + '<blockquote><p><b>foo[bar]</b><p>baz</blockquote>', 1.3452 + '<blockquote><p><strong>foo[bar]</strong><p>baz</blockquote>', 1.3453 + '<blockquote><p><span>foo[bar]</span><p>baz</blockquote>', 1.3454 + '<blockquote><blockquote style="color: blue"><p>foo[bar]</blockquote><p>baz</blockquote>', 1.3455 + '<blockquote style="color: blue"><blockquote><p>foo[bar]</blockquote><p>baz</blockquote>', 1.3456 + 1.3457 + // Lists! 1.3458 + '<ol><li>foo<li>[bar]<li>baz</ol>', 1.3459 + '<ol data-start=1 data-end=2><li>foo<li>bar<li>baz</ol>', 1.3460 + '<ol><li>foo</ol>[bar]', 1.3461 + '<ol><li>[foo]<br>bar<li>baz</ol>', 1.3462 + '<ol><li>foo<br>[bar]<li>baz</ol>', 1.3463 + '<ol><li><div>[foo]</div>bar<li>baz</ol>', 1.3464 + '<ol><li>foo<ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.3465 + '<ol><li>foo<ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.3466 + '<ol><li>foo</li><ol><li>[bar]<li>baz</ol><li>quz</ol>', 1.3467 + '<ol><li>foo</li><ol data-start=0 data-end=1><li>bar<li>baz</ol><li>quz</ol>', 1.3468 + '<ol><li>foo</li><ol><li>bar<li>[baz]</ol><li>quz</ol>', 1.3469 + '<ol><li>foo</li><ol data-start=1 data-end=2><li>bar<li>baz</ol><li>quz</ol>', 1.3470 + '<ol><li>foo<ol><li>b[a]r</ol><li>baz</ol>', 1.3471 + '<ol><li>foo</li><ol><li>b[a]r</ol><li>baz</ol>', 1.3472 + '<ol><li>foo{<ol><li>bar</ol>}<li>baz</ol>', 1.3473 + '<ol><li>foo</li>{<ol><li>bar</ol>}<li>baz</ol>', 1.3474 + '<ol><li>[foo]<ol><li>bar</ol><li>baz</ol>', 1.3475 + '<ol><li>[foo]</li><ol><li>bar</ol><li>baz</ol>', 1.3476 + '<ol><li>foo<li>[bar]<ol><li>baz</ol><li>quz</ol>', 1.3477 + '<ol><li>foo<li>[bar]</li><ol><li>baz</ol><li>quz</ol>', 1.3478 + '<ol><li>foo<ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.3479 + '<ol><li>foo</li><ol><li>bar<li>baz</ol><li>[quz]</ol>', 1.3480 + 1.3481 + // Try outdenting multiple items at once. 1.3482 + '<ol><li>foo<li>b[ar<li>baz]</ol>', 1.3483 + '<ol><li>[foo<ol><li>bar]</ol><li>baz</ol>', 1.3484 + '<ol><li>[foo</li><ol><li>bar]</ol><li>baz</ol>', 1.3485 + '<ol><li>foo<ol><li>b[ar</ol><li>b]az</ol>', 1.3486 + '<ol><li>foo</li><ol><li>b[ar</ol><li>b]az</ol>', 1.3487 + '<ol><li>[foo<ol><li>bar</ol><li>baz]</ol><p>extra', 1.3488 + '<ol><li>[foo</li><ol><li>bar</ol><li>baz]</ol><p>extra', 1.3489 + 1.3490 + // We probably can't actually get this DOM . . . 1.3491 + '<ol><li>[foo]<ol><li>bar</ol>baz</ol>', 1.3492 + '<ol><li>foo<ol><li>[bar]</ol>baz</ol>', 1.3493 + '<ol><li>foo<ol><li>bar</ol>[baz]</ol>', 1.3494 + '<ol><li>[foo<ol><li>bar]</ol>baz</ol>', 1.3495 + 1.3496 + // Attribute handling on lists 1.3497 + 'foo<ol start=5><li>[bar]</ol>baz', 1.3498 + 'foo<ol id=abc><li>[bar]</ol>baz', 1.3499 + 'foo<ol style=color:blue><li>[bar]</ol>baz', 1.3500 + 'foo<ol><li value=5>[bar]</ol>baz', 1.3501 + 'foo<ol><li id=abc>[bar]</ol>baz', 1.3502 + 'foo<ol><li style=color:blue>[bar]</ol>baz', 1.3503 + '<ol><li>foo</li><ol><li value=5>[bar]</ol></ol>', 1.3504 + '<ul><li>foo</li><ol><li value=5>[bar]</ol></ul>', 1.3505 + '<ol><li>foo</li><ol start=5><li>[bar]</ol><li>baz</ol>', 1.3506 + '<ol><li>foo</li><ol id=abc><li>[bar]</ol><li>baz</ol>', 1.3507 + '<ol><li>foo</li><ol style=color:blue><li>[bar]</ol><li>baz</ol>', 1.3508 + '<ol><li>foo</li><ol style=text-indent:1em><li>[bar]</ol><li>baz</ol>', 1.3509 + '<ol><li>foo</li><ol start=5><li>[bar<li>baz]</ol><li>quz</ol>', 1.3510 + '<ol><li>foo</li><ol id=abc><li>[bar<li>baz]</ol><li>quz</ol>', 1.3511 + '<ol><li>foo</li><ol style=color:blue><li>[bar<li>baz]</ol><li>quz</ol>', 1.3512 + '<ol><li>foo</li><ol style=text-indent:1em><li>[bar<li>baz]</ol><li>quz</ol>', 1.3513 + 1.3514 + // List inside indentation element 1.3515 + '<blockquote><ol><li>[foo]</ol></blockquote><p>extra', 1.3516 + '<blockquote>foo<ol><li>[bar]</ol>baz</blockquote><p>extra', 1.3517 + '<blockquote><ol><li>foo</li><ol><li>[bar]</ol><li>baz</ol></blockquote><p>extra', 1.3518 + 1.3519 + '<ol><li><h1>[foo]</h1></ol>', 1.3520 + '<ol><li><xmp>[foo]</xmp></li></ol>', 1.3521 + '<blockquote><ol><li>foo<div><ol><li>[bar]</ol></div><li>baz</ol></blockquote>', 1.3522 + 1.3523 + // Whitespace nodes 1.3524 + '<blockquote> <p>[foo]</p></blockquote>', 1.3525 + '<blockquote><p>[foo]</p> </blockquote>', 1.3526 + '<blockquote> <p>[foo]</p> </blockquote>', 1.3527 + '<ol> <li>[foo]</li></ol>', 1.3528 + '<ol><li>[foo]</li> </ol>', 1.3529 + '<ol> <li>[foo]</li> </ol>', 1.3530 + '<ul> <li>[foo]</li></ul>', 1.3531 + '<ul><li>[foo]</li> </ul>', 1.3532 + '<ul> <li>[foo]</li> </ul>', 1.3533 + '<blockquote> <p>[foo]</p> <p>bar</p> <p>baz</p></blockquote>', 1.3534 + '<blockquote> <p>foo</p> <p>[bar]</p> <p>baz</p></blockquote>', 1.3535 + '<blockquote> <p>foo</p> <p>bar</p> <p>[baz]</p></blockquote>', 1.3536 + '<ol> <li>[foo]</li> <li>bar</li> <li>baz</li></ol>', 1.3537 + '<ol> <li>foo</li> <li>[bar]</li> <li>baz</li></ol>', 1.3538 + '<ol> <li>foo</li> <li>bar</li> <li>[baz]</li></ol>', 1.3539 + '<ul> <li>[foo]</li> <li>bar</li> <li>baz</li></ul>', 1.3540 + '<ul> <li>foo</li> <li>[bar]</li> <li>baz</li></ul>', 1.3541 + '<ul> <li>foo</li> <li>bar</li> <li>[baz]</li></ul>', 1.3542 + 1.3543 + // https://bugs.webkit.org/show_bug.cgi?id=24249 1.3544 + '<ol><li>[]a<table><tr><td><br></table></ol>', 1.3545 + // https://bugs.webkit.org/show_bug.cgi?id=43447 1.3546 + '<blockquote><span>foo<br>[bar]</span></blockquote>', 1.3547 + ], 1.3548 + //@} 1.3549 + removeformat: [ 1.3550 + //@{ 1.3551 + 'foo[]bar', 1.3552 + '<span>foo</span>{}<span>bar</span>', 1.3553 + '<span>foo[</span><span>]bar</span>', 1.3554 + '[foo<b>bar</b>baz]', 1.3555 + 'foo[<b>bar</b>baz]', 1.3556 + 'foo[<b>bar</b>]baz', 1.3557 + 'foo<b>[bar]</b>baz', 1.3558 + 'foo<b>b[a]r</b>baz', 1.3559 + '[foo<strong>bar</strong>baz]', 1.3560 + '[foo<span style="font-weight: bold">bar</span>baz]', 1.3561 + 'foo<span style="font-weight: bold">b[a]r</span>baz', 1.3562 + '[foo<span style="font-variant: small-caps">bar</span>baz]', 1.3563 + 'foo<span style="font-variant: small-caps">b[a]r</span>baz', 1.3564 + '[foo<b id=foo>bar</b>baz]', 1.3565 + 'foo<b id=foo>b[a]r</b>baz', 1.3566 + 1.3567 + // HTML has lots of inline elements, doesn't it? 1.3568 + '[foo<a>bar</a>baz]', 1.3569 + 'foo<a>b[a]r</a>baz', 1.3570 + '[foo<a href=foo>bar</a>baz]', 1.3571 + 'foo<a href=foo>b[a]r</a>baz', 1.3572 + '[foo<abbr>bar</abbr>baz]', 1.3573 + 'foo<abbr>b[a]r</abbr>baz', 1.3574 + '[foo<acronym>bar</acronym>baz]', 1.3575 + 'foo<acronym>b[a]r</acronym>baz', 1.3576 + '[foo<b>bar</b>baz]', 1.3577 + 'foo<b>b[a]r</b>baz', 1.3578 + '[foo<bdi dir=rtl>bar</bdi>baz]', 1.3579 + 'foo<bdi dir=rtl>b[a]r</bdi>baz', 1.3580 + '[foo<bdo dir=rtl>bar</bdo>baz]', 1.3581 + 'foo<bdo dir=rtl>b[a]r</bdo>baz', 1.3582 + '[foo<big>bar</big>baz]', 1.3583 + 'foo<big>b[a]r</big>baz', 1.3584 + '[foo<blink>bar</blink>baz]', 1.3585 + 'foo<blink>b[a]r</blink>baz', 1.3586 + '[foo<cite>bar</cite>baz]', 1.3587 + 'foo<cite>b[a]r</cite>baz', 1.3588 + '[foo<code>bar</code>baz]', 1.3589 + 'foo<code>b[a]r</code>baz', 1.3590 + '[foo<del>bar</del>baz]', 1.3591 + 'foo<del>b[a]r</del>baz', 1.3592 + '[foo<dfn>bar</dfn>baz]', 1.3593 + 'foo<dfn>b[a]r</dfn>baz', 1.3594 + '[foo<em>bar</em>baz]', 1.3595 + 'foo<em>b[a]r</em>baz', 1.3596 + '[foo<font>bar</font>baz]', 1.3597 + 'foo<font>b[a]r</font>baz', 1.3598 + '[foo<font color=blue>bar</font>baz]', 1.3599 + 'foo<font color=blue>b[a]r</font>baz', 1.3600 + '[foo<i>bar</i>baz]', 1.3601 + 'foo<i>b[a]r</i>baz', 1.3602 + '[foo<ins>bar</ins>baz]', 1.3603 + 'foo<ins>b[a]r</ins>baz', 1.3604 + '[foo<kbd>bar</kbd>baz]', 1.3605 + 'foo<kbd>b[a]r</kbd>baz', 1.3606 + '[foo<mark>bar</mark>baz]', 1.3607 + 'foo<mark>b[a]r</mark>baz', 1.3608 + '[foo<nobr>bar</nobr>baz]', 1.3609 + 'foo<nobr>b[a]r</nobr>baz', 1.3610 + '[foo<q>bar</q>baz]', 1.3611 + 'foo<q>b[a]r</q>baz', 1.3612 + '[foo<samp>bar</samp>baz]', 1.3613 + 'foo<samp>b[a]r</samp>baz', 1.3614 + '[foo<s>bar</s>baz]', 1.3615 + 'foo<s>b[a]r</s>baz', 1.3616 + '[foo<small>bar</small>baz]', 1.3617 + 'foo<small>b[a]r</small>baz', 1.3618 + '[foo<span>bar</span>baz]', 1.3619 + 'foo<span>b[a]r</span>baz', 1.3620 + '[foo<strike>bar</strike>baz]', 1.3621 + 'foo<strike>b[a]r</strike>baz', 1.3622 + '[foo<strong>bar</strong>baz]', 1.3623 + 'foo<strong>b[a]r</strong>baz', 1.3624 + '[foo<sub>bar</sub>baz]', 1.3625 + 'foo<sub>b[a]r</sub>baz', 1.3626 + '[foo<sup>bar</sup>baz]', 1.3627 + 'foo<sup>b[a]r</sup>baz', 1.3628 + '[foo<tt>bar</tt>baz]', 1.3629 + 'foo<tt>b[a]r</tt>baz', 1.3630 + '[foo<u>bar</u>baz]', 1.3631 + 'foo<u>b[a]r</u>baz', 1.3632 + '[foo<var>bar</var>baz]', 1.3633 + 'foo<var>b[a]r</var>baz', 1.3634 + 1.3635 + // Empty and replaced elements 1.3636 + '[foo<br>bar]', 1.3637 + '[foo<hr>bar]', 1.3638 + '[foo<wbr>bar]', 1.3639 + '[foo<img>bar]', 1.3640 + '[foo<img src=abc>bar]', 1.3641 + '[foo<video></video>bar]', 1.3642 + '[foo<video src=abc></video>bar]', 1.3643 + '[foo<svg><circle fill=blue r=20 cx=20 cy=20 /></svg>bar]', 1.3644 + 1.3645 + // Unrecognized elements 1.3646 + '[foo<nonexistentelement>bar</nonexistentelement>baz]', 1.3647 + 'foo<nonexistentelement>b[a]r</nonexistentelement>baz', 1.3648 + '[foo<nonexistentelement style="display: block">bar</nonexistentelement>baz]', 1.3649 + 'foo<nonexistentelement style="display: block">b[a]r</nonexistentelement>baz', 1.3650 + 1.3651 + // Random stuff 1.3652 + '[foo<span id=foo>bar</span>baz]', 1.3653 + 'foo<span id=foo>b[a]r</span>baz', 1.3654 + '[foo<span class=foo>bar</span>baz]', 1.3655 + 'foo<span class=foo>b[a]r</span>baz', 1.3656 + '[foo<b style="font-weight: normal">bar</b>baz]', 1.3657 + 'foo<b style="font-weight: normal">b[a]r</b>baz', 1.3658 + '<p style="background-color: aqua">foo[bar]baz</p>', 1.3659 + '<p><span style="background-color: aqua">foo[bar]baz</span></p>', 1.3660 + '<p style="font-weight: bold">foo[bar]baz</p>', 1.3661 + '<b><p style="font-weight: bold">foo[bar]baz</p></b>', 1.3662 + '<p style="font-variant: small-caps">foo[bar]baz</p>', 1.3663 + '{<p style="font-variant: small-caps">foobarbaz</p>}', 1.3664 + '<p style="text-indent: 2em">foo[bar]baz</p>', 1.3665 + '{<p style="text-indent: 2em">foobarbaz</p>}', 1.3666 + 1.3667 + // https://bugzilla.mozilla.org/show_bug.cgi?id=649138 1.3668 + // Chrome 15 dev fails this for some unclear reason. 1.3669 + '<table data-start=0 data-end=1><tr><td><b>foo</b></table>', 1.3670 + ], 1.3671 + //@} 1.3672 + strikethrough: [ 1.3673 + //@{ 1.3674 + 'foo[]bar', 1.3675 + '<p>[foo</p> <p>bar]</p>', 1.3676 + '<span>[foo</span> <span>bar]</span>', 1.3677 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.3678 + '<p>[foo<p><br><p>bar]', 1.3679 + '<b>foo[]bar</b>', 1.3680 + '<i>foo[]bar</i>', 1.3681 + '<span>foo</span>{}<span>bar</span>', 1.3682 + '<span>foo[</span><span>]bar</span>', 1.3683 + 'foo[bar]baz', 1.3684 + 'foo[bar<b>baz]qoz</b>quz', 1.3685 + 'foo[bar<i>baz]qoz</i>quz', 1.3686 + '{<p><p> <p>foo</p>}', 1.3687 + 1.3688 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.3689 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.3690 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.3691 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.3692 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.3693 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.3694 + 1.3695 + 'foo<u>[bar]</u>baz', 1.3696 + 'foo<span style="text-decoration: underline">[bar]</span>baz', 1.3697 + '<u>foo[bar]baz</u>', 1.3698 + '<u>foo[b<span style="color:blue">ar]ba</span>z</u>', 1.3699 + '<u>foo[b<span style="color:blue" id=foo>ar]ba</span>z</u>', 1.3700 + '<u>foo[b<span style="font-size:3em">ar]ba</span>z</u>', 1.3701 + '<u>foo[b<i>ar]ba</i>z</u>', 1.3702 + '<p style="text-decoration: underline">foo[bar]baz</p>', 1.3703 + 1.3704 + 'foo<s>[bar]</s>baz', 1.3705 + 'foo<span style="text-decoration: line-through">[bar]</span>baz', 1.3706 + '<s>foo[bar]baz</s>', 1.3707 + '<s>foo[b<span style="color:blue">ar]ba</span>z</s>', 1.3708 + '<s>foo[b<span style="color:blue" id=foo>ar]ba</span>z</s>', 1.3709 + '<s>foo[b<span style="font-size:3em">ar]ba</span>z</s>', 1.3710 + '<s>foo[b<i>ar]ba</i>z</s>', 1.3711 + '<p style="text-decoration: line-through">foo[bar]baz</p>', 1.3712 + 1.3713 + 'foo<strike>[bar]</strike>baz', 1.3714 + '<strike>foo[bar]baz</strike>', 1.3715 + '<strike>foo[b<span style="color:blue">ar]ba</span>z</strike>', 1.3716 + '<strike>foo[b<span style="color:blue" id=foo>ar]ba</span>z</strike>', 1.3717 + '<strike>foo[b<span style="font-size:3em">ar]ba</span>z</strike>', 1.3718 + '<strike>foo[b<i>ar]ba</i>z</strike>', 1.3719 + 1.3720 + 'foo<ins>[bar]</ins>baz', 1.3721 + '<ins>foo[bar]baz</ins>', 1.3722 + '<ins>foo[b<span style="color:blue">ar]ba</span>z</ins>', 1.3723 + '<ins>foo[b<span style="color:blue" id=foo>ar]ba</span>z</ins>', 1.3724 + '<ins>foo[b<span style="font-size:3em">ar]ba</span>z</ins>', 1.3725 + '<ins>foo[b<i>ar]ba</i>z</ins>', 1.3726 + 1.3727 + 'foo<del>[bar]</del>baz', 1.3728 + '<del>foo[bar]baz</del>', 1.3729 + '<del>foo[b<span style="color:blue">ar]ba</span>z</del>', 1.3730 + '<del>foo[b<span style="color:blue" id=foo>ar]ba</span>z</del>', 1.3731 + '<del>foo[b<span style="font-size:3em">ar]ba</span>z</del>', 1.3732 + '<del>foo[b<i>ar]ba</i>z</del>', 1.3733 + 1.3734 + 'foo<span style="text-decoration: underline line-through">[bar]</span>baz', 1.3735 + 'foo<span style="text-decoration: underline line-through">b[a]r</span>baz', 1.3736 + 'foo<s style="text-decoration: underline">[bar]</s>baz', 1.3737 + 'foo<s style="text-decoration: underline">b[a]r</s>baz', 1.3738 + 'foo<u style="text-decoration: line-through">[bar]</u>baz', 1.3739 + 'foo<u style="text-decoration: line-through">b[a]r</u>baz', 1.3740 + 'foo<s style="text-decoration: overline">[bar]</s>baz', 1.3741 + 'foo<s style="text-decoration: overline">b[a]r</s>baz', 1.3742 + 'foo<u style="text-decoration: overline">[bar]</u>baz', 1.3743 + 'foo<u style="text-decoration: overline">b[a]r</u>baz', 1.3744 + 1.3745 + '<p style="text-decoration: line-through">foo[bar]baz</p>', 1.3746 + '<p style="text-decoration: overline">foo[bar]baz</p>', 1.3747 + 1.3748 + 'foo<span class="underline">[bar]</span>baz', 1.3749 + 'foo<span class="underline">b[a]r</span>baz', 1.3750 + 'foo<span class="line-through">[bar]</span>baz', 1.3751 + 'foo<span class="line-through">b[a]r</span>baz', 1.3752 + 'foo<span class="underline-and-line-through">[bar]</span>baz', 1.3753 + 'foo<span class="underline-and-line-through">b[a]r</span>baz', 1.3754 + 1.3755 + // Tests for queryCommandIndeterm() and queryCommandState() 1.3756 + 'fo[o<s>b]ar</s>baz', 1.3757 + 'foo<s>ba[r</s>b]az', 1.3758 + 'fo[o<s>bar</s>b]az', 1.3759 + 'foo[<s>b]ar</s>baz', 1.3760 + 'foo<s>ba[r</s>]baz', 1.3761 + 'foo[<s>bar</s>]baz', 1.3762 + 'foo<s>[bar]</s>baz', 1.3763 + 'foo{<s>bar</s>}baz', 1.3764 + 'fo[o<span style=text-decoration:line-through>b]ar</span>baz', 1.3765 + '<strike>fo[o</strike><s>b]ar</s>', 1.3766 + '<s>fo[o</s><del>b]ar</del>', 1.3767 + ], 1.3768 + //@} 1.3769 + subscript: [ 1.3770 + //@{ 1.3771 + 'foo[]bar', 1.3772 + '<p>[foo</p> <p>bar]</p>', 1.3773 + '<span>[foo</span> <span>bar]</span>', 1.3774 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.3775 + '<p>[foo<p><br><p>bar]', 1.3776 + '<b>foo[]bar</b>', 1.3777 + '<i>foo[]bar</i>', 1.3778 + '<span>foo</span>{}<span>bar</span>', 1.3779 + '<span>foo[</span><span>]bar</span>', 1.3780 + 'foo[bar]baz', 1.3781 + 'foo[bar<b>baz]qoz</b>quz', 1.3782 + 'foo[bar<i>baz]qoz</i>quz', 1.3783 + '{<p><p> <p>foo</p>}', 1.3784 + 1.3785 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.3786 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.3787 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.3788 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.3789 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.3790 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.3791 + 1.3792 + 'foo<sub>[bar]</sub>baz', 1.3793 + 'foo<sub>b[a]r</sub>baz', 1.3794 + 'foo<sup>[bar]</sup>baz', 1.3795 + 'foo<sup>b[a]r</sup>baz', 1.3796 + 1.3797 + 'foo<span style=vertical-align:sub>[bar]</span>baz', 1.3798 + 'foo<span style=vertical-align:super>[bar]</span>baz', 1.3799 + 1.3800 + 'foo<sub><sub>[bar]</sub></sub>baz', 1.3801 + 'foo<sub><sub>b[a]r</sub></sub>baz', 1.3802 + 'foo<sub>b<sub>[a]</sub>r</sub>baz', 1.3803 + 'foo<sup><sup>[bar]</sup></sup>baz', 1.3804 + 'foo<sup><sup>b[a]r</sup></sup>baz', 1.3805 + 'foo<sup>b<sup>[a]</sup>r</sup>baz', 1.3806 + 'foo<sub><sup>[bar]</sup></sub>baz', 1.3807 + 'foo<sub><sup>b[a]r</sup></sub>baz', 1.3808 + 'foo<sub>b<sup>[a]</sup>r</sub>baz', 1.3809 + 'foo<sup><sub>[bar]</sub></sup>baz', 1.3810 + 'foo<sup><sub>b[a]r</sub></sup>baz', 1.3811 + 'foo<sup>b<sub>[a]</sub>r</sup>baz', 1.3812 + 1.3813 + // Tests for queryCommandIndeterm() and queryCommandState() 1.3814 + 'fo[o<sub>b]ar</sub>baz', 1.3815 + 'foo<sub>ba[r</sub>b]az', 1.3816 + 'fo[o<sub>bar</sub>b]az', 1.3817 + 'foo[<sub>b]ar</sub>baz', 1.3818 + 'foo<sub>ba[r</sub>]baz', 1.3819 + 'foo[<sub>bar</sub>]baz', 1.3820 + 'foo<sub>[bar]</sub>baz', 1.3821 + 'foo{<sub>bar</sub>}baz', 1.3822 + '<sub>fo[o</sub><sup>b]ar</sup>', 1.3823 + '<sub>fo[o</sub><span style=vertical-align:sub>b]ar</span>', 1.3824 + 'foo<span style=vertical-align:top>[bar]</span>baz', 1.3825 + '<sub>fo[o</sub><span style=vertical-align:top>b]ar</span>', 1.3826 + ], 1.3827 + //@} 1.3828 + superscript: [ 1.3829 + //@{ 1.3830 + 'foo[]bar', 1.3831 + '<p>[foo</p> <p>bar]</p>', 1.3832 + '<span>[foo</span> <span>bar]</span>', 1.3833 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.3834 + '<p>[foo<p><br><p>bar]', 1.3835 + '<b>foo[]bar</b>', 1.3836 + '<i>foo[]bar</i>', 1.3837 + '<span>foo</span>{}<span>bar</span>', 1.3838 + '<span>foo[</span><span>]bar</span>', 1.3839 + 'foo[bar]baz', 1.3840 + 'foo[bar<b>baz]qoz</b>quz', 1.3841 + 'foo[bar<i>baz]qoz</i>quz', 1.3842 + '{<p><p> <p>foo</p>}', 1.3843 + 1.3844 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.3845 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.3846 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.3847 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.3848 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.3849 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.3850 + 1.3851 + 'foo<sub>[bar]</sub>baz', 1.3852 + 'foo<sub>b[a]r</sub>baz', 1.3853 + 'foo<sup>[bar]</sup>baz', 1.3854 + 'foo<sup>b[a]r</sup>baz', 1.3855 + 1.3856 + 'foo<span style=vertical-align:sub>[bar]</span>baz', 1.3857 + 'foo<span style=vertical-align:super>[bar]</span>baz', 1.3858 + 1.3859 + 'foo<sub><sub>[bar]</sub></sub>baz', 1.3860 + 'foo<sub><sub>b[a]r</sub></sub>baz', 1.3861 + 'foo<sub>b<sub>[a]</sub>r</sub>baz', 1.3862 + 'foo<sup><sup>[bar]</sup></sup>baz', 1.3863 + 'foo<sup><sup>b[a]r</sup></sup>baz', 1.3864 + 'foo<sup>b<sup>[a]</sup>r</sup>baz', 1.3865 + 'foo<sub><sup>[bar]</sup></sub>baz', 1.3866 + 'foo<sub><sup>b[a]r</sup></sub>baz', 1.3867 + 'foo<sub>b<sup>[a]</sup>r</sub>baz', 1.3868 + 'foo<sup><sub>[bar]</sub></sup>baz', 1.3869 + 'foo<sup><sub>b[a]r</sub></sup>baz', 1.3870 + 'foo<sup>b<sub>[a]</sub>r</sup>baz', 1.3871 + 1.3872 + // Tests for queryCommandIndeterm() and queryCommandState() 1.3873 + 'fo[o<sup>b]ar</sup>baz', 1.3874 + 'foo<sup>ba[r</sup>b]az', 1.3875 + 'fo[o<sup>bar</sup>b]az', 1.3876 + 'foo[<sup>b]ar</sup>baz', 1.3877 + 'foo<sup>ba[r</sup>]baz', 1.3878 + 'foo[<sup>bar</sup>]baz', 1.3879 + 'foo<sup>[bar]</sup>baz', 1.3880 + 'foo{<sup>bar</sup>}baz', 1.3881 + '<sup>fo[o</sup><sub>b]ar</sub>', 1.3882 + '<sup>fo[o</sup><span style=vertical-align:super>b]ar</span>', 1.3883 + 'foo<span style=vertical-align:bottom>[bar]</span>baz', 1.3884 + '<sup>fo[o</sup><span style=vertical-align:bottom>b]ar</span>', 1.3885 + 1.3886 + // https://bugs.webkit.org/show_bug.cgi?id=28472 1.3887 + 'foo<sup>[bar]<br></sup>', 1.3888 + ], 1.3889 + //@} 1.3890 + underline: [ 1.3891 + //@{ 1.3892 + 'foo[]bar', 1.3893 + '<p>[foo</p> <p>bar]</p>', 1.3894 + '<span>[foo</span> <span>bar]</span>', 1.3895 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.3896 + '<p>[foo<p><br><p>bar]', 1.3897 + '<b>foo[]bar</b>', 1.3898 + '<i>foo[]bar</i>', 1.3899 + '<span>foo</span>{}<span>bar</span>', 1.3900 + '<span>foo[</span><span>]bar</span>', 1.3901 + 'foo[bar]baz', 1.3902 + 'foo[bar<b>baz]qoz</b>quz', 1.3903 + 'foo[bar<i>baz]qoz</i>quz', 1.3904 + '{<p><p> <p>foo</p>}', 1.3905 + 1.3906 + '<table><tbody><tr><td>foo<td>b[a]r<td>baz</table>', 1.3907 + '<table><tbody><tr data-start=1 data-end=2><td>foo<td>bar<td>baz</table>', 1.3908 + '<table><tbody><tr data-start=0 data-end=2><td>foo<td>bar<td>baz</table>', 1.3909 + '<table><tbody data-start=0 data-end=1><tr><td>foo<td>bar<td>baz</table>', 1.3910 + '<table data-start=0 data-end=1><tbody><tr><td>foo<td>bar<td>baz</table>', 1.3911 + '{<table><tr><td>foo<td>bar<td>baz</table>}', 1.3912 + 1.3913 + 'foo<u>[bar]</u>baz', 1.3914 + 'foo<span style="text-decoration: underline">[bar]</span>baz', 1.3915 + '<u>foo[bar]baz</u>', 1.3916 + '<u>foo[b<span style="color:blue">ar]ba</span>z</u>', 1.3917 + '<u>foo[b<span style="color:blue" id=foo>ar]ba</span>z</u>', 1.3918 + '<u>foo[b<span style="font-size:3em">ar]ba</span>z</u>', 1.3919 + '<u>foo[b<i>ar]ba</i>z</u>', 1.3920 + '<p style="text-decoration: underline">foo[bar]baz</p>', 1.3921 + 1.3922 + 'foo<s>[bar]</s>baz', 1.3923 + 'foo<span style="text-decoration: line-through">[bar]</span>baz', 1.3924 + '<s>foo[bar]baz</s>', 1.3925 + '<s>foo[b<span style="color:blue">ar]ba</span>z</s>', 1.3926 + '<s>foo[b<span style="color:blue" id=foo>ar]ba</span>z</s>', 1.3927 + '<s>foo[b<span style="font-size:3em">ar]ba</span>z</s>', 1.3928 + '<s>foo[b<i>ar]ba</i>z</s>', 1.3929 + '<p style="text-decoration: line-through">foo[bar]baz</p>', 1.3930 + 1.3931 + 'foo<strike>[bar]</strike>baz', 1.3932 + '<strike>foo[bar]baz</strike>', 1.3933 + '<strike>foo[b<span style="color:blue">ar]ba</span>z</strike>', 1.3934 + '<strike>foo[b<span style="color:blue" id=foo>ar]ba</span>z</strike>', 1.3935 + '<strike>foo[b<span style="font-size:3em">ar]ba</span>z</strike>', 1.3936 + '<strike>foo[b<i>ar]ba</i>z</strike>', 1.3937 + 1.3938 + 'foo<ins>[bar]</ins>baz', 1.3939 + '<ins>foo[bar]baz</ins>', 1.3940 + '<ins>foo[b<span style="color:blue">ar]ba</span>z</ins>', 1.3941 + '<ins>foo[b<span style="color:blue" id=foo>ar]ba</span>z</ins>', 1.3942 + '<ins>foo[b<span style="font-size:3em">ar]ba</span>z</ins>', 1.3943 + '<ins>foo[b<i>ar]ba</i>z</ins>', 1.3944 + 1.3945 + 'foo<del>[bar]</del>baz', 1.3946 + '<del>foo[bar]baz</del>', 1.3947 + '<del>foo[b<span style="color:blue">ar]ba</span>z</del>', 1.3948 + '<del>foo[b<span style="color:blue" id=foo>ar]ba</span>z</del>', 1.3949 + '<del>foo[b<span style="font-size:3em">ar]ba</span>z</del>', 1.3950 + '<del>foo[b<i>ar]ba</i>z</del>', 1.3951 + 1.3952 + 'foo<span style="text-decoration: underline line-through">[bar]</span>baz', 1.3953 + 'foo<span style="text-decoration: underline line-through">b[a]r</span>baz', 1.3954 + 'foo<s style="text-decoration: underline">[bar]</s>baz', 1.3955 + 'foo<s style="text-decoration: underline">b[a]r</s>baz', 1.3956 + 'foo<u style="text-decoration: line-through">[bar]</u>baz', 1.3957 + 'foo<u style="text-decoration: line-through">b[a]r</u>baz', 1.3958 + 'foo<s style="text-decoration: overline">[bar]</s>baz', 1.3959 + 'foo<s style="text-decoration: overline">b[a]r</s>baz', 1.3960 + 'foo<u style="text-decoration: overline">[bar]</u>baz', 1.3961 + 'foo<u style="text-decoration: overline">b[a]r</u>baz', 1.3962 + 1.3963 + '<p style="text-decoration: line-through">foo[bar]baz</p>', 1.3964 + '<p style="text-decoration: overline">foo[bar]baz</p>', 1.3965 + 1.3966 + 'foo<span class="underline">[bar]</span>baz', 1.3967 + 'foo<span class="underline">b[a]r</span>baz', 1.3968 + 'foo<span class="line-through">[bar]</span>baz', 1.3969 + 'foo<span class="line-through">b[a]r</span>baz', 1.3970 + 'foo<span class="underline-and-line-through">[bar]</span>baz', 1.3971 + 'foo<span class="underline-and-line-through">b[a]r</span>baz', 1.3972 + 1.3973 + // Tests for queryCommandIndeterm() and queryCommandState() 1.3974 + 'fo[o<u>b]ar</u>baz', 1.3975 + 'foo<u>ba[r</u>b]az', 1.3976 + 'fo[o<u>bar</u>b]az', 1.3977 + 'foo[<u>b]ar</u>baz', 1.3978 + 'foo<u>ba[r</u>]baz', 1.3979 + 'foo[<u>bar</u>]baz', 1.3980 + 'foo<u>[bar]</u>baz', 1.3981 + 'foo{<u>bar</u>}baz', 1.3982 + 'fo[o<span style=text-decoration:underline>b]ar</span>baz', 1.3983 + '<ins>fo[o</ins><u>b]ar</u>', 1.3984 + '<u>fo[o</u><ins>b]ar</ins>', 1.3985 + ], 1.3986 + //@} 1.3987 + unlink: [ 1.3988 + //@{ 1.3989 + 'foo[]bar', 1.3990 + '<p>[foo</p> <p>bar]</p>', 1.3991 + '<span>[foo</span> <span>bar]</span>', 1.3992 + '<p>[foo</p><p> <span>bar</span> </p><p>baz]</p>', 1.3993 + '<b>foo[]bar</b>', 1.3994 + '<i>foo[]bar</i>', 1.3995 + '<span>foo</span>{}<span>bar</span>', 1.3996 + '<span>foo[</span><span>]bar</span>', 1.3997 + 'foo[bar]baz', 1.3998 + 'foo[bar<b>baz]qoz</b>quz', 1.3999 + 'foo[bar<i>baz]qoz</i>quz', 1.4000 + '{<p><p> <p>foo</p>}', 1.4001 + 1.4002 + '<a href=http://www.google.com/>foo[bar]baz</a>', 1.4003 + '<a href=http://www.google.com/>foo[barbaz</a>}', 1.4004 + '{<a href=http://www.google.com/>foobar]baz</a>', 1.4005 + '{<a href=http://www.google.com/>foobarbaz</a>}', 1.4006 + '<a href=http://www.google.com/>[foobarbaz]</a>', 1.4007 + 1.4008 + 'foo<a href=http://www.google.com/>b[]ar</a>baz', 1.4009 + 'foo<a href=http://www.google.com/>[bar]</a>baz', 1.4010 + 'foo[<a href=http://www.google.com/>bar</a>]baz', 1.4011 + 'foo<a href=http://www.google.com/>[bar</a>baz]', 1.4012 + '[foo<a href=http://www.google.com/>bar]</a>baz', 1.4013 + '[foo<a href=http://www.google.com/>bar</a>baz]', 1.4014 + 1.4015 + '<a id=foo href=http://www.google.com/>foobar[]baz</a>', 1.4016 + '<a id=foo href=http://www.google.com/>foo[bar]baz</a>', 1.4017 + '<a id=foo href=http://www.google.com/>[foobarbaz]</a>', 1.4018 + 'foo<a id=foo href=http://www.google.com/>[bar]</a>baz', 1.4019 + 'foo[<a id=foo href=http://www.google.com/>bar</a>]baz', 1.4020 + '[foo<a id=foo href=http://www.google.com/>bar</a>baz]', 1.4021 + 1.4022 + '<a name=foo>foobar[]baz</a>', 1.4023 + '<a name=foo>foo[bar]baz</a>', 1.4024 + '<a name=foo>[foobarbaz]</a>', 1.4025 + 'foo<a name=foo>[bar]</a>baz', 1.4026 + 'foo[<a name=foo>bar</a>]baz', 1.4027 + '[foo<a name=foo>bar</a>baz]', 1.4028 + ], 1.4029 + //@} 1.4030 + copy: ['!foo[bar]baz'], 1.4031 + cut: ['!foo[bar]baz'], 1.4032 + defaultparagraphseparator: [ 1.4033 + //@{ 1.4034 + ['', 'foo[bar]baz'], 1.4035 + ['div', 'foo[bar]baz'], 1.4036 + ['p', 'foo[bar]baz'], 1.4037 + ['DIV', 'foo[bar]baz'], 1.4038 + ['P', 'foo[bar]baz'], 1.4039 + [' div ', 'foo[bar]baz'], 1.4040 + [' p ', 'foo[bar]baz'], 1.4041 + ['<div>', 'foo[bar]baz'], 1.4042 + ['<p>', 'foo[bar]baz'], 1.4043 + ['li', 'foo[bar]baz'], 1.4044 + ['blockquote', 'foo[bar]baz'], 1.4045 + ], 1.4046 + //@} 1.4047 + paste: ['!foo[bar]baz'], 1.4048 + selectall: ['foo[bar]baz'], 1.4049 + stylewithcss: [ 1.4050 + //@{ 1.4051 + ['true', 'foo[bar]baz'], 1.4052 + ['TRUE', 'foo[bar]baz'], 1.4053 + ['TrUe', 'foo[bar]baz'], 1.4054 + ['true ', 'foo[bar]baz'], 1.4055 + [' true', 'foo[bar]baz'], 1.4056 + ['truer', 'foo[bar]baz'], 1.4057 + [' true ', 'foo[bar]baz'], 1.4058 + [' TrUe', 'foo[bar]baz'], 1.4059 + ['', 'foo[bar]baz'], 1.4060 + [' ', 'foo[bar]baz'], 1.4061 + ['false', 'foo[bar]baz'], 1.4062 + ['FALSE', 'foo[bar]baz'], 1.4063 + ['FaLsE', 'foo[bar]baz'], 1.4064 + [' false', 'foo[bar]baz'], 1.4065 + ['false ', 'foo[bar]baz'], 1.4066 + ['falser', 'foo[bar]baz'], 1.4067 + ['falsé', 'foo[bar]baz'], 1.4068 + ], 1.4069 + //@} 1.4070 + usecss: [ 1.4071 + //@{ 1.4072 + ['true', 'foo[bar]baz'], 1.4073 + ['TRUE', 'foo[bar]baz'], 1.4074 + ['TrUe', 'foo[bar]baz'], 1.4075 + ['true ', 'foo[bar]baz'], 1.4076 + [' true', 'foo[bar]baz'], 1.4077 + ['truer', 'foo[bar]baz'], 1.4078 + [' true ', 'foo[bar]baz'], 1.4079 + [' TrUe', 'foo[bar]baz'], 1.4080 + ['', 'foo[bar]baz'], 1.4081 + [' ', 'foo[bar]baz'], 1.4082 + ['false', 'foo[bar]baz'], 1.4083 + ['FALSE', 'foo[bar]baz'], 1.4084 + ['FaLsE', 'foo[bar]baz'], 1.4085 + [' false', 'foo[bar]baz'], 1.4086 + ['false ', 'foo[bar]baz'], 1.4087 + ['falser', 'foo[bar]baz'], 1.4088 + ['falsé', 'foo[bar]baz'], 1.4089 + ], 1.4090 + //@} 1.4091 + quasit: ['foo[bar]baz'], 1.4092 + multitest: [ 1.4093 + //@{ 1.4094 + // Insertion-affecting state. Test that insertText works right, and 1.4095 + // test that various block commands preserve (or don't preserve) the 1.4096 + // state. 1.4097 + ['foo[]bar', 'bold', 'inserttext'], 1.4098 + ['foo[]bar', 'bold', 'delete'], 1.4099 + ['foo[]bar', 'bold', 'delete', 'inserttext'], 1.4100 + ['foo[]bar', 'bold', 'formatblock'], 1.4101 + ['foo[]bar', 'bold', 'formatblock', 'inserttext'], 1.4102 + ['foo[]bar', 'bold', 'forwarddelete'], 1.4103 + ['foo[]bar', 'bold', 'forwarddelete', 'inserttext'], 1.4104 + ['foo[]bar', 'bold', 'indent'], 1.4105 + ['foo[]bar', 'bold', 'indent', 'inserttext'], 1.4106 + ['foo[]bar', 'bold', 'inserthorizontalrule'], 1.4107 + ['foo[]bar', 'bold', 'inserthorizontalrule', 'inserttext'], 1.4108 + ['foo[]bar', 'bold', 'inserthtml'], 1.4109 + ['foo[]bar', 'bold', 'inserthtml', 'inserttext'], 1.4110 + ['foo[]bar', 'bold', 'insertimage'], 1.4111 + ['foo[]bar', 'bold', 'insertimage', 'inserttext'], 1.4112 + ['foo[]bar', 'bold', 'insertlinebreak'], 1.4113 + ['foo[]bar', 'bold', 'insertlinebreak', 'inserttext'], 1.4114 + ['foo[]bar', 'bold', 'insertorderedlist'], 1.4115 + ['foo[]bar', 'bold', 'insertorderedlist', 'inserttext'], 1.4116 + ['foo[]bar', 'bold', 'insertparagraph'], 1.4117 + ['foo[]bar', 'bold', 'insertparagraph', 'inserttext'], 1.4118 + ['foo[]bar', 'bold', 'insertunorderedlist'], 1.4119 + ['foo[]bar', 'bold', 'insertunorderedlist', 'inserttext'], 1.4120 + ['foo[]bar', 'bold', 'justifycenter'], 1.4121 + ['foo[]bar', 'bold', 'justifycenter', 'inserttext'], 1.4122 + ['foo[]bar', 'bold', 'justifyfull'], 1.4123 + ['foo[]bar', 'bold', 'justifyfull', 'inserttext'], 1.4124 + ['foo[]bar', 'bold', 'justifyleft'], 1.4125 + ['foo[]bar', 'bold', 'justifyleft', 'inserttext'], 1.4126 + ['foo[]bar', 'bold', 'justifyright'], 1.4127 + ['foo[]bar', 'bold', 'justifyright', 'inserttext'], 1.4128 + ['foo[]bar', 'bold', 'outdent'], 1.4129 + ['foo[]bar', 'bold', 'outdent', 'inserttext'], 1.4130 + 1.4131 + ['foo[]bar', 'italic', 'inserttext'], 1.4132 + ['foo[]bar', 'italic', 'delete'], 1.4133 + ['foo[]bar', 'italic', 'delete', 'inserttext'], 1.4134 + ['foo[]bar', 'italic', 'formatblock'], 1.4135 + ['foo[]bar', 'italic', 'formatblock', 'inserttext'], 1.4136 + ['foo[]bar', 'italic', 'forwarddelete'], 1.4137 + ['foo[]bar', 'italic', 'forwarddelete', 'inserttext'], 1.4138 + ['foo[]bar', 'italic', 'indent'], 1.4139 + ['foo[]bar', 'italic', 'indent', 'inserttext'], 1.4140 + ['foo[]bar', 'italic', 'inserthorizontalrule'], 1.4141 + ['foo[]bar', 'italic', 'inserthorizontalrule', 'inserttext'], 1.4142 + ['foo[]bar', 'italic', 'inserthtml'], 1.4143 + ['foo[]bar', 'italic', 'inserthtml', 'inserttext'], 1.4144 + ['foo[]bar', 'italic', 'insertimage'], 1.4145 + ['foo[]bar', 'italic', 'insertimage', 'inserttext'], 1.4146 + ['foo[]bar', 'italic', 'insertlinebreak'], 1.4147 + ['foo[]bar', 'italic', 'insertlinebreak', 'inserttext'], 1.4148 + ['foo[]bar', 'italic', 'insertorderedlist'], 1.4149 + ['foo[]bar', 'italic', 'insertorderedlist', 'inserttext'], 1.4150 + ['foo[]bar', 'italic', 'insertparagraph'], 1.4151 + ['foo[]bar', 'italic', 'insertparagraph', 'inserttext'], 1.4152 + ['foo[]bar', 'italic', 'insertunorderedlist'], 1.4153 + ['foo[]bar', 'italic', 'insertunorderedlist', 'inserttext'], 1.4154 + ['foo[]bar', 'italic', 'justifycenter'], 1.4155 + ['foo[]bar', 'italic', 'justifycenter', 'inserttext'], 1.4156 + ['foo[]bar', 'italic', 'justifyfull'], 1.4157 + ['foo[]bar', 'italic', 'justifyfull', 'inserttext'], 1.4158 + ['foo[]bar', 'italic', 'justifyleft'], 1.4159 + ['foo[]bar', 'italic', 'justifyleft', 'inserttext'], 1.4160 + ['foo[]bar', 'italic', 'justifyright'], 1.4161 + ['foo[]bar', 'italic', 'justifyright', 'inserttext'], 1.4162 + ['foo[]bar', 'italic', 'outdent'], 1.4163 + ['foo[]bar', 'italic', 'outdent', 'inserttext'], 1.4164 + 1.4165 + ['foo[]bar', 'strikethrough', 'inserttext'], 1.4166 + ['foo[]bar', 'strikethrough', 'delete'], 1.4167 + ['foo[]bar', 'strikethrough', 'delete', 'inserttext'], 1.4168 + ['foo[]bar', 'strikethrough', 'formatblock'], 1.4169 + ['foo[]bar', 'strikethrough', 'formatblock', 'inserttext'], 1.4170 + ['foo[]bar', 'strikethrough', 'forwarddelete'], 1.4171 + ['foo[]bar', 'strikethrough', 'forwarddelete', 'inserttext'], 1.4172 + ['foo[]bar', 'strikethrough', 'indent'], 1.4173 + ['foo[]bar', 'strikethrough', 'indent', 'inserttext'], 1.4174 + ['foo[]bar', 'strikethrough', 'inserthorizontalrule'], 1.4175 + ['foo[]bar', 'strikethrough', 'inserthorizontalrule', 'inserttext'], 1.4176 + ['foo[]bar', 'strikethrough', 'inserthtml'], 1.4177 + ['foo[]bar', 'strikethrough', 'inserthtml', 'inserttext'], 1.4178 + ['foo[]bar', 'strikethrough', 'insertimage'], 1.4179 + ['foo[]bar', 'strikethrough', 'insertimage', 'inserttext'], 1.4180 + ['foo[]bar', 'strikethrough', 'insertlinebreak'], 1.4181 + ['foo[]bar', 'strikethrough', 'insertlinebreak', 'inserttext'], 1.4182 + ['foo[]bar', 'strikethrough', 'insertorderedlist'], 1.4183 + ['foo[]bar', 'strikethrough', 'insertorderedlist', 'inserttext'], 1.4184 + ['foo[]bar', 'strikethrough', 'insertparagraph'], 1.4185 + ['foo[]bar', 'strikethrough', 'insertparagraph', 'inserttext'], 1.4186 + ['foo[]bar', 'strikethrough', 'insertunorderedlist'], 1.4187 + ['foo[]bar', 'strikethrough', 'insertunorderedlist', 'inserttext'], 1.4188 + ['foo[]bar', 'strikethrough', 'justifycenter'], 1.4189 + ['foo[]bar', 'strikethrough', 'justifycenter', 'inserttext'], 1.4190 + ['foo[]bar', 'strikethrough', 'justifyfull'], 1.4191 + ['foo[]bar', 'strikethrough', 'justifyfull', 'inserttext'], 1.4192 + ['foo[]bar', 'strikethrough', 'justifyleft'], 1.4193 + ['foo[]bar', 'strikethrough', 'justifyleft', 'inserttext'], 1.4194 + ['foo[]bar', 'strikethrough', 'justifyright'], 1.4195 + ['foo[]bar', 'strikethrough', 'justifyright', 'inserttext'], 1.4196 + ['foo[]bar', 'strikethrough', 'outdent'], 1.4197 + ['foo[]bar', 'strikethrough', 'outdent', 'inserttext'], 1.4198 + 1.4199 + ['foo[]bar', 'subscript', 'inserttext'], 1.4200 + ['foo[]bar', 'subscript', 'delete'], 1.4201 + ['foo[]bar', 'subscript', 'delete', 'inserttext'], 1.4202 + ['foo[]bar', 'subscript', 'formatblock'], 1.4203 + ['foo[]bar', 'subscript', 'formatblock', 'inserttext'], 1.4204 + ['foo[]bar', 'subscript', 'forwarddelete'], 1.4205 + ['foo[]bar', 'subscript', 'forwarddelete', 'inserttext'], 1.4206 + ['foo[]bar', 'subscript', 'indent'], 1.4207 + ['foo[]bar', 'subscript', 'indent', 'inserttext'], 1.4208 + ['foo[]bar', 'subscript', 'inserthorizontalrule'], 1.4209 + ['foo[]bar', 'subscript', 'inserthorizontalrule', 'inserttext'], 1.4210 + ['foo[]bar', 'subscript', 'inserthtml'], 1.4211 + ['foo[]bar', 'subscript', 'inserthtml', 'inserttext'], 1.4212 + ['foo[]bar', 'subscript', 'insertimage'], 1.4213 + ['foo[]bar', 'subscript', 'insertimage', 'inserttext'], 1.4214 + ['foo[]bar', 'subscript', 'insertlinebreak'], 1.4215 + ['foo[]bar', 'subscript', 'insertlinebreak', 'inserttext'], 1.4216 + ['foo[]bar', 'subscript', 'insertorderedlist'], 1.4217 + ['foo[]bar', 'subscript', 'insertorderedlist', 'inserttext'], 1.4218 + ['foo[]bar', 'subscript', 'insertparagraph'], 1.4219 + ['foo[]bar', 'subscript', 'insertparagraph', 'inserttext'], 1.4220 + ['foo[]bar', 'subscript', 'insertunorderedlist'], 1.4221 + ['foo[]bar', 'subscript', 'insertunorderedlist', 'inserttext'], 1.4222 + ['foo[]bar', 'subscript', 'justifycenter'], 1.4223 + ['foo[]bar', 'subscript', 'justifycenter', 'inserttext'], 1.4224 + ['foo[]bar', 'subscript', 'justifyfull'], 1.4225 + ['foo[]bar', 'subscript', 'justifyfull', 'inserttext'], 1.4226 + ['foo[]bar', 'subscript', 'justifyleft'], 1.4227 + ['foo[]bar', 'subscript', 'justifyleft', 'inserttext'], 1.4228 + ['foo[]bar', 'subscript', 'justifyright'], 1.4229 + ['foo[]bar', 'subscript', 'justifyright', 'inserttext'], 1.4230 + ['foo[]bar', 'subscript', 'outdent'], 1.4231 + ['foo[]bar', 'subscript', 'outdent', 'inserttext'], 1.4232 + 1.4233 + ['foo[]bar', 'superscript', 'inserttext'], 1.4234 + ['foo[]bar', 'superscript', 'delete'], 1.4235 + ['foo[]bar', 'superscript', 'delete', 'inserttext'], 1.4236 + ['foo[]bar', 'superscript', 'formatblock'], 1.4237 + ['foo[]bar', 'superscript', 'formatblock', 'inserttext'], 1.4238 + ['foo[]bar', 'superscript', 'forwarddelete'], 1.4239 + ['foo[]bar', 'superscript', 'forwarddelete', 'inserttext'], 1.4240 + ['foo[]bar', 'superscript', 'indent'], 1.4241 + ['foo[]bar', 'superscript', 'indent', 'inserttext'], 1.4242 + ['foo[]bar', 'superscript', 'inserthorizontalrule'], 1.4243 + ['foo[]bar', 'superscript', 'inserthorizontalrule', 'inserttext'], 1.4244 + ['foo[]bar', 'superscript', 'inserthtml'], 1.4245 + ['foo[]bar', 'superscript', 'inserthtml', 'inserttext'], 1.4246 + ['foo[]bar', 'superscript', 'insertimage'], 1.4247 + ['foo[]bar', 'superscript', 'insertimage', 'inserttext'], 1.4248 + ['foo[]bar', 'superscript', 'insertlinebreak'], 1.4249 + ['foo[]bar', 'superscript', 'insertlinebreak', 'inserttext'], 1.4250 + ['foo[]bar', 'superscript', 'insertorderedlist'], 1.4251 + ['foo[]bar', 'superscript', 'insertorderedlist', 'inserttext'], 1.4252 + ['foo[]bar', 'superscript', 'insertparagraph'], 1.4253 + ['foo[]bar', 'superscript', 'insertparagraph', 'inserttext'], 1.4254 + ['foo[]bar', 'superscript', 'insertunorderedlist'], 1.4255 + ['foo[]bar', 'superscript', 'insertunorderedlist', 'inserttext'], 1.4256 + ['foo[]bar', 'superscript', 'justifycenter'], 1.4257 + ['foo[]bar', 'superscript', 'justifycenter', 'inserttext'], 1.4258 + ['foo[]bar', 'superscript', 'justifyfull'], 1.4259 + ['foo[]bar', 'superscript', 'justifyfull', 'inserttext'], 1.4260 + ['foo[]bar', 'superscript', 'justifyleft'], 1.4261 + ['foo[]bar', 'superscript', 'justifyleft', 'inserttext'], 1.4262 + ['foo[]bar', 'superscript', 'justifyright'], 1.4263 + ['foo[]bar', 'superscript', 'justifyright', 'inserttext'], 1.4264 + ['foo[]bar', 'superscript', 'outdent'], 1.4265 + ['foo[]bar', 'superscript', 'outdent', 'inserttext'], 1.4266 + 1.4267 + ['foo[]bar', 'underline', 'inserttext'], 1.4268 + ['foo[]bar', 'underline', 'delete'], 1.4269 + ['foo[]bar', 'underline', 'delete', 'inserttext'], 1.4270 + ['foo[]bar', 'underline', 'formatblock'], 1.4271 + ['foo[]bar', 'underline', 'formatblock', 'inserttext'], 1.4272 + ['foo[]bar', 'underline', 'forwarddelete'], 1.4273 + ['foo[]bar', 'underline', 'forwarddelete', 'inserttext'], 1.4274 + ['foo[]bar', 'underline', 'indent'], 1.4275 + ['foo[]bar', 'underline', 'indent', 'inserttext'], 1.4276 + ['foo[]bar', 'underline', 'inserthorizontalrule'], 1.4277 + ['foo[]bar', 'underline', 'inserthorizontalrule', 'inserttext'], 1.4278 + ['foo[]bar', 'underline', 'inserthtml'], 1.4279 + ['foo[]bar', 'underline', 'inserthtml', 'inserttext'], 1.4280 + ['foo[]bar', 'underline', 'insertimage'], 1.4281 + ['foo[]bar', 'underline', 'insertimage', 'inserttext'], 1.4282 + ['foo[]bar', 'underline', 'insertlinebreak'], 1.4283 + ['foo[]bar', 'underline', 'insertlinebreak', 'inserttext'], 1.4284 + ['foo[]bar', 'underline', 'insertorderedlist'], 1.4285 + ['foo[]bar', 'underline', 'insertorderedlist', 'inserttext'], 1.4286 + ['foo[]bar', 'underline', 'insertparagraph'], 1.4287 + ['foo[]bar', 'underline', 'insertparagraph', 'inserttext'], 1.4288 + ['foo[]bar', 'underline', 'insertunorderedlist'], 1.4289 + ['foo[]bar', 'underline', 'insertunorderedlist', 'inserttext'], 1.4290 + ['foo[]bar', 'underline', 'justifycenter'], 1.4291 + ['foo[]bar', 'underline', 'justifycenter', 'inserttext'], 1.4292 + ['foo[]bar', 'underline', 'justifyfull'], 1.4293 + ['foo[]bar', 'underline', 'justifyfull', 'inserttext'], 1.4294 + ['foo[]bar', 'underline', 'justifyleft'], 1.4295 + ['foo[]bar', 'underline', 'justifyleft', 'inserttext'], 1.4296 + ['foo[]bar', 'underline', 'justifyright'], 1.4297 + ['foo[]bar', 'underline', 'justifyright', 'inserttext'], 1.4298 + ['foo[]bar', 'underline', 'outdent'], 1.4299 + ['foo[]bar', 'underline', 'outdent', 'inserttext'], 1.4300 + 1.4301 + // Insertion-affecting value. Test that insertText works right, and 1.4302 + // test that various block commands preserve (or don't preserve) the 1.4303 + // value. 1.4304 + ['foo[]bar', 'backcolor', 'inserttext'], 1.4305 + ['foo[]bar', 'backcolor', 'delete'], 1.4306 + ['foo[]bar', 'backcolor', 'delete', 'inserttext'], 1.4307 + ['foo[]bar', 'backcolor', 'formatblock'], 1.4308 + ['foo[]bar', 'backcolor', 'formatblock', 'inserttext'], 1.4309 + ['foo[]bar', 'backcolor', 'forwarddelete'], 1.4310 + ['foo[]bar', 'backcolor', 'forwarddelete', 'inserttext'], 1.4311 + ['foo[]bar', 'backcolor', 'indent'], 1.4312 + ['foo[]bar', 'backcolor', 'indent', 'inserttext'], 1.4313 + ['foo[]bar', 'backcolor', 'inserthorizontalrule'], 1.4314 + ['foo[]bar', 'backcolor', 'inserthorizontalrule', 'inserttext'], 1.4315 + ['foo[]bar', 'backcolor', 'inserthtml'], 1.4316 + ['foo[]bar', 'backcolor', 'inserthtml', 'inserttext'], 1.4317 + ['foo[]bar', 'backcolor', 'insertimage'], 1.4318 + ['foo[]bar', 'backcolor', 'insertimage', 'inserttext'], 1.4319 + ['foo[]bar', 'backcolor', 'insertlinebreak'], 1.4320 + ['foo[]bar', 'backcolor', 'insertlinebreak', 'inserttext'], 1.4321 + ['foo[]bar', 'backcolor', 'insertorderedlist'], 1.4322 + ['foo[]bar', 'backcolor', 'insertorderedlist', 'inserttext'], 1.4323 + ['foo[]bar', 'backcolor', 'insertparagraph'], 1.4324 + ['foo[]bar', 'backcolor', 'insertparagraph', 'inserttext'], 1.4325 + ['foo[]bar', 'backcolor', 'insertunorderedlist'], 1.4326 + ['foo[]bar', 'backcolor', 'insertunorderedlist', 'inserttext'], 1.4327 + ['foo[]bar', 'backcolor', 'justifycenter'], 1.4328 + ['foo[]bar', 'backcolor', 'justifycenter', 'inserttext'], 1.4329 + ['foo[]bar', 'backcolor', 'justifyfull'], 1.4330 + ['foo[]bar', 'backcolor', 'justifyfull', 'inserttext'], 1.4331 + ['foo[]bar', 'backcolor', 'justifyleft'], 1.4332 + ['foo[]bar', 'backcolor', 'justifyleft', 'inserttext'], 1.4333 + ['foo[]bar', 'backcolor', 'justifyright'], 1.4334 + ['foo[]bar', 'backcolor', 'justifyright', 'inserttext'], 1.4335 + ['foo[]bar', 'backcolor', 'outdent'], 1.4336 + ['foo[]bar', 'backcolor', 'outdent', 'inserttext'], 1.4337 + 1.4338 + ['foo[]bar', 'createlink', 'inserttext'], 1.4339 + ['foo[]bar', 'createlink', 'delete'], 1.4340 + ['foo[]bar', 'createlink', 'delete', 'inserttext'], 1.4341 + ['foo[]bar', 'createlink', 'formatblock'], 1.4342 + ['foo[]bar', 'createlink', 'formatblock', 'inserttext'], 1.4343 + ['foo[]bar', 'createlink', 'forwarddelete'], 1.4344 + ['foo[]bar', 'createlink', 'forwarddelete', 'inserttext'], 1.4345 + ['foo[]bar', 'createlink', 'indent'], 1.4346 + ['foo[]bar', 'createlink', 'indent', 'inserttext'], 1.4347 + ['foo[]bar', 'createlink', 'inserthorizontalrule'], 1.4348 + ['foo[]bar', 'createlink', 'inserthorizontalrule', 'inserttext'], 1.4349 + ['foo[]bar', 'createlink', 'inserthtml'], 1.4350 + ['foo[]bar', 'createlink', 'inserthtml', 'inserttext'], 1.4351 + ['foo[]bar', 'createlink', 'insertimage'], 1.4352 + ['foo[]bar', 'createlink', 'insertimage', 'inserttext'], 1.4353 + ['foo[]bar', 'createlink', 'insertlinebreak'], 1.4354 + ['foo[]bar', 'createlink', 'insertlinebreak', 'inserttext'], 1.4355 + ['foo[]bar', 'createlink', 'insertorderedlist'], 1.4356 + ['foo[]bar', 'createlink', 'insertorderedlist', 'inserttext'], 1.4357 + ['foo[]bar', 'createlink', 'insertparagraph'], 1.4358 + ['foo[]bar', 'createlink', 'insertparagraph', 'inserttext'], 1.4359 + ['foo[]bar', 'createlink', 'insertunorderedlist'], 1.4360 + ['foo[]bar', 'createlink', 'insertunorderedlist', 'inserttext'], 1.4361 + ['foo[]bar', 'createlink', 'justifycenter'], 1.4362 + ['foo[]bar', 'createlink', 'justifycenter', 'inserttext'], 1.4363 + ['foo[]bar', 'createlink', 'justifyfull'], 1.4364 + ['foo[]bar', 'createlink', 'justifyfull', 'inserttext'], 1.4365 + ['foo[]bar', 'createlink', 'justifyleft'], 1.4366 + ['foo[]bar', 'createlink', 'justifyleft', 'inserttext'], 1.4367 + ['foo[]bar', 'createlink', 'justifyright'], 1.4368 + ['foo[]bar', 'createlink', 'justifyright', 'inserttext'], 1.4369 + ['foo[]bar', 'createlink', 'outdent'], 1.4370 + ['foo[]bar', 'createlink', 'outdent', 'inserttext'], 1.4371 + 1.4372 + ['foo[]bar', 'fontname', 'inserttext'], 1.4373 + ['foo[]bar', 'fontname', 'delete'], 1.4374 + ['foo[]bar', 'fontname', 'delete', 'inserttext'], 1.4375 + ['foo[]bar', 'fontname', 'formatblock'], 1.4376 + ['foo[]bar', 'fontname', 'formatblock', 'inserttext'], 1.4377 + ['foo[]bar', 'fontname', 'forwarddelete'], 1.4378 + ['foo[]bar', 'fontname', 'forwarddelete', 'inserttext'], 1.4379 + ['foo[]bar', 'fontname', 'indent'], 1.4380 + ['foo[]bar', 'fontname', 'indent', 'inserttext'], 1.4381 + ['foo[]bar', 'fontname', 'inserthorizontalrule'], 1.4382 + ['foo[]bar', 'fontname', 'inserthorizontalrule', 'inserttext'], 1.4383 + ['foo[]bar', 'fontname', 'inserthtml'], 1.4384 + ['foo[]bar', 'fontname', 'inserthtml', 'inserttext'], 1.4385 + ['foo[]bar', 'fontname', 'insertimage'], 1.4386 + ['foo[]bar', 'fontname', 'insertimage', 'inserttext'], 1.4387 + ['foo[]bar', 'fontname', 'insertlinebreak'], 1.4388 + ['foo[]bar', 'fontname', 'insertlinebreak', 'inserttext'], 1.4389 + ['foo[]bar', 'fontname', 'insertorderedlist'], 1.4390 + ['foo[]bar', 'fontname', 'insertorderedlist', 'inserttext'], 1.4391 + ['foo[]bar', 'fontname', 'insertparagraph'], 1.4392 + ['foo[]bar', 'fontname', 'insertparagraph', 'inserttext'], 1.4393 + ['foo[]bar', 'fontname', 'insertunorderedlist'], 1.4394 + ['foo[]bar', 'fontname', 'insertunorderedlist', 'inserttext'], 1.4395 + ['foo[]bar', 'fontname', 'justifycenter'], 1.4396 + ['foo[]bar', 'fontname', 'justifycenter', 'inserttext'], 1.4397 + ['foo[]bar', 'fontname', 'justifyfull'], 1.4398 + ['foo[]bar', 'fontname', 'justifyfull', 'inserttext'], 1.4399 + ['foo[]bar', 'fontname', 'justifyleft'], 1.4400 + ['foo[]bar', 'fontname', 'justifyleft', 'inserttext'], 1.4401 + ['foo[]bar', 'fontname', 'justifyright'], 1.4402 + ['foo[]bar', 'fontname', 'justifyright', 'inserttext'], 1.4403 + ['foo[]bar', 'fontname', 'outdent'], 1.4404 + ['foo[]bar', 'fontname', 'outdent', 'inserttext'], 1.4405 + 1.4406 + ['foo[]bar', 'fontsize', 'inserttext'], 1.4407 + ['foo[]bar', 'fontsize', 'delete'], 1.4408 + ['foo[]bar', 'fontsize', 'delete', 'inserttext'], 1.4409 + ['foo[]bar', 'fontsize', 'formatblock'], 1.4410 + ['foo[]bar', 'fontsize', 'formatblock', 'inserttext'], 1.4411 + ['foo[]bar', 'fontsize', 'forwarddelete'], 1.4412 + ['foo[]bar', 'fontsize', 'forwarddelete', 'inserttext'], 1.4413 + ['foo[]bar', 'fontsize', 'indent'], 1.4414 + ['foo[]bar', 'fontsize', 'indent', 'inserttext'], 1.4415 + ['foo[]bar', 'fontsize', 'inserthorizontalrule'], 1.4416 + ['foo[]bar', 'fontsize', 'inserthorizontalrule', 'inserttext'], 1.4417 + ['foo[]bar', 'fontsize', 'inserthtml'], 1.4418 + ['foo[]bar', 'fontsize', 'inserthtml', 'inserttext'], 1.4419 + ['foo[]bar', 'fontsize', 'insertimage'], 1.4420 + ['foo[]bar', 'fontsize', 'insertimage', 'inserttext'], 1.4421 + ['foo[]bar', 'fontsize', 'insertlinebreak'], 1.4422 + ['foo[]bar', 'fontsize', 'insertlinebreak', 'inserttext'], 1.4423 + ['foo[]bar', 'fontsize', 'insertorderedlist'], 1.4424 + ['foo[]bar', 'fontsize', 'insertorderedlist', 'inserttext'], 1.4425 + ['foo[]bar', 'fontsize', 'insertparagraph'], 1.4426 + ['foo[]bar', 'fontsize', 'insertparagraph', 'inserttext'], 1.4427 + ['foo[]bar', 'fontsize', 'insertunorderedlist'], 1.4428 + ['foo[]bar', 'fontsize', 'insertunorderedlist', 'inserttext'], 1.4429 + ['foo[]bar', 'fontsize', 'justifycenter'], 1.4430 + ['foo[]bar', 'fontsize', 'justifycenter', 'inserttext'], 1.4431 + ['foo[]bar', 'fontsize', 'justifyfull'], 1.4432 + ['foo[]bar', 'fontsize', 'justifyfull', 'inserttext'], 1.4433 + ['foo[]bar', 'fontsize', 'justifyleft'], 1.4434 + ['foo[]bar', 'fontsize', 'justifyleft', 'inserttext'], 1.4435 + ['foo[]bar', 'fontsize', 'justifyright'], 1.4436 + ['foo[]bar', 'fontsize', 'justifyright', 'inserttext'], 1.4437 + ['foo[]bar', 'fontsize', 'outdent'], 1.4438 + ['foo[]bar', 'fontsize', 'outdent', 'inserttext'], 1.4439 + 1.4440 + ['foo[]bar', 'forecolor', 'inserttext'], 1.4441 + ['foo[]bar', 'forecolor', 'delete'], 1.4442 + ['foo[]bar', 'forecolor', 'delete', 'inserttext'], 1.4443 + ['foo[]bar', 'forecolor', 'formatblock'], 1.4444 + ['foo[]bar', 'forecolor', 'formatblock', 'inserttext'], 1.4445 + ['foo[]bar', 'forecolor', 'forwarddelete'], 1.4446 + ['foo[]bar', 'forecolor', 'forwarddelete', 'inserttext'], 1.4447 + ['foo[]bar', 'forecolor', 'indent'], 1.4448 + ['foo[]bar', 'forecolor', 'indent', 'inserttext'], 1.4449 + ['foo[]bar', 'forecolor', 'inserthorizontalrule'], 1.4450 + ['foo[]bar', 'forecolor', 'inserthorizontalrule', 'inserttext'], 1.4451 + ['foo[]bar', 'forecolor', 'inserthtml'], 1.4452 + ['foo[]bar', 'forecolor', 'inserthtml', 'inserttext'], 1.4453 + ['foo[]bar', 'forecolor', 'insertimage'], 1.4454 + ['foo[]bar', 'forecolor', 'insertimage', 'inserttext'], 1.4455 + ['foo[]bar', 'forecolor', 'insertlinebreak'], 1.4456 + ['foo[]bar', 'forecolor', 'insertlinebreak', 'inserttext'], 1.4457 + ['foo[]bar', 'forecolor', 'insertorderedlist'], 1.4458 + ['foo[]bar', 'forecolor', 'insertorderedlist', 'inserttext'], 1.4459 + ['foo[]bar', 'forecolor', 'insertparagraph'], 1.4460 + ['foo[]bar', 'forecolor', 'insertparagraph', 'inserttext'], 1.4461 + ['foo[]bar', 'forecolor', 'insertunorderedlist'], 1.4462 + ['foo[]bar', 'forecolor', 'insertunorderedlist', 'inserttext'], 1.4463 + ['foo[]bar', 'forecolor', 'justifycenter'], 1.4464 + ['foo[]bar', 'forecolor', 'justifycenter', 'inserttext'], 1.4465 + ['foo[]bar', 'forecolor', 'justifyfull'], 1.4466 + ['foo[]bar', 'forecolor', 'justifyfull', 'inserttext'], 1.4467 + ['foo[]bar', 'forecolor', 'justifyleft'], 1.4468 + ['foo[]bar', 'forecolor', 'justifyleft', 'inserttext'], 1.4469 + ['foo[]bar', 'forecolor', 'justifyright'], 1.4470 + ['foo[]bar', 'forecolor', 'justifyright', 'inserttext'], 1.4471 + ['foo[]bar', 'forecolor', 'outdent'], 1.4472 + ['foo[]bar', 'forecolor', 'outdent', 'inserttext'], 1.4473 + 1.4474 + ['foo[]bar', 'hilitecolor', 'inserttext'], 1.4475 + ['foo[]bar', 'hilitecolor', 'delete'], 1.4476 + ['foo[]bar', 'hilitecolor', 'delete', 'inserttext'], 1.4477 + ['foo[]bar', 'hilitecolor', 'formatblock'], 1.4478 + ['foo[]bar', 'hilitecolor', 'formatblock', 'inserttext'], 1.4479 + ['foo[]bar', 'hilitecolor', 'forwarddelete'], 1.4480 + ['foo[]bar', 'hilitecolor', 'forwarddelete', 'inserttext'], 1.4481 + ['foo[]bar', 'hilitecolor', 'indent'], 1.4482 + ['foo[]bar', 'hilitecolor', 'indent', 'inserttext'], 1.4483 + ['foo[]bar', 'hilitecolor', 'inserthorizontalrule'], 1.4484 + ['foo[]bar', 'hilitecolor', 'inserthorizontalrule', 'inserttext'], 1.4485 + ['foo[]bar', 'hilitecolor', 'inserthtml'], 1.4486 + ['foo[]bar', 'hilitecolor', 'inserthtml', 'inserttext'], 1.4487 + ['foo[]bar', 'hilitecolor', 'insertimage'], 1.4488 + ['foo[]bar', 'hilitecolor', 'insertimage', 'inserttext'], 1.4489 + ['foo[]bar', 'hilitecolor', 'insertlinebreak'], 1.4490 + ['foo[]bar', 'hilitecolor', 'insertlinebreak', 'inserttext'], 1.4491 + ['foo[]bar', 'hilitecolor', 'insertorderedlist'], 1.4492 + ['foo[]bar', 'hilitecolor', 'insertorderedlist', 'inserttext'], 1.4493 + ['foo[]bar', 'hilitecolor', 'insertparagraph'], 1.4494 + ['foo[]bar', 'hilitecolor', 'insertparagraph', 'inserttext'], 1.4495 + ['foo[]bar', 'hilitecolor', 'insertunorderedlist'], 1.4496 + ['foo[]bar', 'hilitecolor', 'insertunorderedlist', 'inserttext'], 1.4497 + ['foo[]bar', 'hilitecolor', 'justifycenter'], 1.4498 + ['foo[]bar', 'hilitecolor', 'justifycenter', 'inserttext'], 1.4499 + ['foo[]bar', 'hilitecolor', 'justifyfull'], 1.4500 + ['foo[]bar', 'hilitecolor', 'justifyfull', 'inserttext'], 1.4501 + ['foo[]bar', 'hilitecolor', 'justifyleft'], 1.4502 + ['foo[]bar', 'hilitecolor', 'justifyleft', 'inserttext'], 1.4503 + ['foo[]bar', 'hilitecolor', 'justifyright'], 1.4504 + ['foo[]bar', 'hilitecolor', 'justifyright', 'inserttext'], 1.4505 + ['foo[]bar', 'hilitecolor', 'outdent'], 1.4506 + ['foo[]bar', 'hilitecolor', 'outdent', 'inserttext'], 1.4507 + 1.4508 + // Test things that interfere with each other 1.4509 + ['foo[]bar', 'superscript', 'subscript', 'inserttext'], 1.4510 + ['foo[]bar', 'subscript', 'superscript', 'inserttext'], 1.4511 + 1.4512 + ['foo[]bar', 'createlink', ['forecolor', '#0000FF'], 'inserttext'], 1.4513 + ['foo[]bar', ['forecolor', '#0000FF'], 'createlink', 'inserttext'], 1.4514 + ['foo[]bar', 'createlink', ['forecolor', 'blue'], 'inserttext'], 1.4515 + ['foo[]bar', ['forecolor', 'blue'], 'createlink', 'inserttext'], 1.4516 + ['foo[]bar', 'createlink', ['forecolor', 'brown'], 'inserttext'], 1.4517 + ['foo[]bar', ['forecolor', 'brown'], 'createlink', 'inserttext'], 1.4518 + ['foo[]bar', 'createlink', ['forecolor', 'black'], 'inserttext'], 1.4519 + ['foo[]bar', ['forecolor', 'black'], 'createlink', 'inserttext'], 1.4520 + ['foo[]bar', 'createlink', 'underline', 'inserttext'], 1.4521 + ['foo[]bar', 'underline', 'createlink', 'inserttext'], 1.4522 + ['foo[]bar', 'createlink', 'underline', 'underline', 'inserttext'], 1.4523 + ['foo[]bar', 'underline', 'underline', 'createlink', 'inserttext'], 1.4524 + 1.4525 + ['foo[]bar', 'subscript', ['fontsize', '2'], 'inserttext'], 1.4526 + ['foo[]bar', ['fontsize', '2'], 'subscript', 'inserttext'], 1.4527 + ['foo[]bar', 'subscript', ['fontsize', '3'], 'inserttext'], 1.4528 + ['foo[]bar', ['fontsize', '3'], 'subscript', 'inserttext'], 1.4529 + 1.4530 + ['foo[]bar', ['hilitecolor', 'aqua'], ['backcolor', 'tan'], 'inserttext'], 1.4531 + ['foo[]bar', ['backcolor', 'tan'], ['hilitecolor', 'aqua'], 'inserttext'], 1.4532 + 1.4533 + 1.4534 + // The following are all just inserttext tests that we took from there, 1.4535 + // but we first backspace the selected text instead of letting 1.4536 + // inserttext handle it. This tests that deletion correctly sets 1.4537 + // overrides. 1.4538 + ['foo<b>[bar]</b>baz', 'delete', 'inserttext'], 1.4539 + ['foo<i>[bar]</i>baz', 'delete', 'inserttext'], 1.4540 + ['foo<s>[bar]</s>baz', 'delete', 'inserttext'], 1.4541 + ['foo<sub>[bar]</sub>baz', 'delete', 'inserttext'], 1.4542 + ['foo<sup>[bar]</sup>baz', 'delete', 'inserttext'], 1.4543 + ['foo<u>[bar]</u>baz', 'delete', 'inserttext'], 1.4544 + ['foo<a href=http://www.google.com>[bar]</a>baz', 'delete', 'inserttext'], 1.4545 + ['foo<font face=sans-serif>[bar]</font>baz', 'delete', 'inserttext'], 1.4546 + ['foo<font size=4>[bar]</font>baz', 'delete', 'inserttext'], 1.4547 + ['foo<font color=#0000FF>[bar]</font>baz', 'delete', 'inserttext'], 1.4548 + ['foo<span style=background-color:#00FFFF>[bar]</span>baz', 'delete', 'inserttext'], 1.4549 + ['foo<a href=http://www.google.com><font color=blue>[bar]</font></a>baz', 'delete', 'inserttext'], 1.4550 + ['foo<font color=blue><a href=http://www.google.com>[bar]</a></font>baz', 'delete', 'inserttext'], 1.4551 + ['foo<a href=http://www.google.com><font color=brown>[bar]</font></a>baz', 'delete', 'inserttext'], 1.4552 + ['foo<font color=brown><a href=http://www.google.com>[bar]</a></font>baz', 'delete', 'inserttext'], 1.4553 + ['foo<a href=http://www.google.com><font color=black>[bar]</font></a>baz', 'delete', 'inserttext'], 1.4554 + ['foo<a href=http://www.google.com><u>[bar]</u></a>baz', 'delete', 'inserttext'], 1.4555 + ['foo<u><a href=http://www.google.com>[bar]</a></u>baz', 'delete', 'inserttext'], 1.4556 + ['foo<sub><font size=2>[bar]</font></sub>baz', 'delete', 'inserttext'], 1.4557 + ['foo<font size=2><sub>[bar]</sub></font>baz', 'delete', 'inserttext'], 1.4558 + ['foo<sub><font size=3>[bar]</font></sub>baz', 'delete', 'inserttext'], 1.4559 + ['foo<font size=3><sub>[bar]</sub></font>baz', 'delete', 'inserttext'], 1.4560 + 1.4561 + // Now repeat but with different selections. 1.4562 + ['[foo<b>bar]</b>baz', 'delete', 'inserttext'], 1.4563 + ['[foo<i>bar]</i>baz', 'delete', 'inserttext'], 1.4564 + ['[foo<s>bar]</s>baz', 'delete', 'inserttext'], 1.4565 + ['[foo<sub>bar]</sub>baz', 'delete', 'inserttext'], 1.4566 + ['[foo<sup>bar]</sup>baz', 'delete', 'inserttext'], 1.4567 + ['[foo<u>bar]</u>baz', 'delete', 'inserttext'], 1.4568 + ['[foo<a href=http://www.google.com>bar]</a>baz', 'delete', 'inserttext'], 1.4569 + ['[foo<font face=sans-serif>bar]</font>baz', 'delete', 'inserttext'], 1.4570 + ['[foo<font size=4>bar]</font>baz', 'delete', 'inserttext'], 1.4571 + ['[foo<font color=#0000FF>bar]</font>baz', 'delete', 'inserttext'], 1.4572 + ['[foo<span style=background-color:#00FFFF>bar]</span>baz', 'delete', 'inserttext'], 1.4573 + ['[foo<a href=http://www.google.com><font color=blue>bar]</font></a>baz', 'delete', 'inserttext'], 1.4574 + ['[foo<font color=blue><a href=http://www.google.com>bar]</a></font>baz', 'delete', 'inserttext'], 1.4575 + ['[foo<a href=http://www.google.com><font color=brown>bar]</font></a>baz', 'delete', 'inserttext'], 1.4576 + ['[foo<font color=brown><a href=http://www.google.com>bar]</a></font>baz', 'delete', 'inserttext'], 1.4577 + ['[foo<a href=http://www.google.com><font color=black>bar]</font></a>baz', 'delete', 'inserttext'], 1.4578 + ['[foo<a href=http://www.google.com><u>bar]</u></a>baz', 'delete', 'inserttext'], 1.4579 + ['[foo<u><a href=http://www.google.com>bar]</a></u>baz', 'delete', 'inserttext'], 1.4580 + ['[foo<sub><font size=2>bar]</font></sub>baz', 'delete', 'inserttext'], 1.4581 + ['[foo<font size=2><sub>bar]</sub></font>baz', 'delete', 'inserttext'], 1.4582 + ['[foo<sub><font size=3>bar]</font></sub>baz', 'delete', 'inserttext'], 1.4583 + ['[foo<font size=3><sub>bar]</sub></font>baz', 'delete', 'inserttext'], 1.4584 + 1.4585 + ['foo<b>[bar</b>baz]', 'delete', 'inserttext'], 1.4586 + ['foo<i>[bar</i>baz]', 'delete', 'inserttext'], 1.4587 + ['foo<s>[bar</s>baz]', 'delete', 'inserttext'], 1.4588 + ['foo<sub>[bar</sub>baz]', 'delete', 'inserttext'], 1.4589 + ['foo<sup>[bar</sup>baz]', 'delete', 'inserttext'], 1.4590 + ['foo<u>[bar</u>baz]', 'delete', 'inserttext'], 1.4591 + ['foo<a href=http://www.google.com>[bar</a>baz]', 'delete', 'inserttext'], 1.4592 + ['foo<font face=sans-serif>[bar</font>baz]', 'delete', 'inserttext'], 1.4593 + ['foo<font size=4>[bar</font>baz]', 'delete', 'inserttext'], 1.4594 + ['foo<font color=#0000FF>[bar</font>baz]', 'delete', 'inserttext'], 1.4595 + ['foo<span style=background-color:#00FFFF>[bar</span>baz]', 'delete', 'inserttext'], 1.4596 + ['foo<a href=http://www.google.com><font color=blue>[bar</font></a>baz]', 'delete', 'inserttext'], 1.4597 + ['foo<font color=blue><a href=http://www.google.com>[bar</a></font>baz]', 'delete', 'inserttext'], 1.4598 + ['foo<a href=http://www.google.com><font color=brown>[bar</font></a>baz]', 'delete', 'inserttext'], 1.4599 + ['foo<font color=brown><a href=http://www.google.com>[bar</a></font>baz]', 'delete', 'inserttext'], 1.4600 + ['foo<a href=http://www.google.com><font color=black>[bar</font></a>baz]', 'delete', 'inserttext'], 1.4601 + ['foo<a href=http://www.google.com><u>[bar</u></a>baz]', 'delete', 'inserttext'], 1.4602 + ['foo<u><a href=http://www.google.com>[bar</a></u>baz]', 'delete', 'inserttext'], 1.4603 + ['foo<sub><font size=2>[bar</font></sub>baz]', 'delete', 'inserttext'], 1.4604 + ['foo<font size=2><sub>[bar</sub></font>baz]', 'delete', 'inserttext'], 1.4605 + ['foo<sub><font size=3>[bar</font></sub>baz]', 'delete', 'inserttext'], 1.4606 + ['foo<font size=3><sub>[bar</sub></font>baz]', 'delete', 'inserttext'], 1.4607 + 1.4608 + // https://bugs.webkit.org/show_bug.cgi?id=19702 1.4609 + ['<blockquote><font color=blue>[foo]</font></blockquote>', 'delete', 'inserttext'], 1.4610 + ], 1.4611 + //@} 1.4612 +}; 1.4613 +tests.backcolor = tests.hilitecolor; 1.4614 +tests.insertlinebreak = tests.insertparagraph; 1.4615 + 1.4616 +// Tests that start with "!" are believed to have bogus results and should be 1.4617 +// skipped until the relevant bugs are fixed. 1.4618 +var badTests = {}; 1.4619 +(function(){ 1.4620 + for (var command in tests) { 1.4621 + badTests[command] = []; 1.4622 + for (var i = 0; i < tests[command].length; i++) { 1.4623 + var test = tests[command][i]; 1.4624 + if (typeof test == "string" && test[0] == "!") { 1.4625 + test = test.slice(1); 1.4626 + tests[command][i] = test; 1.4627 + badTests[command].push(test); 1.4628 + } 1.4629 + if (typeof test == "object" && test[0][0] == "!") { 1.4630 + test = [test[0].slice(1)].concat(test.slice(1)); 1.4631 + tests[command][i] = test; 1.4632 + badTests[command].push(test); 1.4633 + } 1.4634 + } 1.4635 + } 1.4636 +})(); 1.4637 + 1.4638 +var defaultValues = { 1.4639 +//@{ 1.4640 + backcolor: "#00FFFF", 1.4641 + createlink: "http://www.google.com/", 1.4642 + fontname: "sans-serif", 1.4643 + fontsize: "4", 1.4644 + forecolor: "#0000FF", 1.4645 + formatblock: "<div>", 1.4646 + hilitecolor: "#00FFFF", 1.4647 + inserthorizontalrule: "", 1.4648 + inserthtml: "ab<b>c</b>d", 1.4649 + insertimage: "/img/lion.svg", 1.4650 + inserttext: "a", 1.4651 + defaultparagraphseparator: "p", 1.4652 + stylewithcss: "true", 1.4653 + usecss: "true", 1.4654 +}; 1.4655 +//@} 1.4656 + 1.4657 +var notes = { 1.4658 +//@{ 1.4659 + fontname: 'Note that the body\'s font-family is "serif".', 1.4660 +}; 1.4661 +//@} 1.4662 + 1.4663 +var doubleTestingCommands = [ 1.4664 +//@{ 1.4665 + "backcolor", 1.4666 + "bold", 1.4667 + "fontname", 1.4668 + "fontsize", 1.4669 + "forecolor", 1.4670 + "italic", 1.4671 + "justifycenter", 1.4672 + "justifyfull", 1.4673 + "justifyleft", 1.4674 + "justifyright", 1.4675 + "strikethrough", 1.4676 + "stylewithcss", 1.4677 + "subscript", 1.4678 + "superscript", 1.4679 + "underline", 1.4680 + "usecss", 1.4681 +]; 1.4682 +//@} 1.4683 + 1.4684 +function prettyPrint(value) { 1.4685 +//@{ 1.4686 + // Partly stolen from testharness.js 1.4687 + if (typeof value != "string") { 1.4688 + return String(value); 1.4689 + } 1.4690 + 1.4691 + value = value.replace(/\\/g, "\\\\") 1.4692 + .replace(/"/g, '\\"'); 1.4693 + 1.4694 + for (var i = 0; i < 32; i++) { 1.4695 + var replace = "\\"; 1.4696 + switch (i) { 1.4697 + case 0: replace += "0"; break; 1.4698 + case 1: replace += "x01"; break; 1.4699 + case 2: replace += "x02"; break; 1.4700 + case 3: replace += "x03"; break; 1.4701 + case 4: replace += "x04"; break; 1.4702 + case 5: replace += "x05"; break; 1.4703 + case 6: replace += "x06"; break; 1.4704 + case 7: replace += "x07"; break; 1.4705 + case 8: replace += "b"; break; 1.4706 + case 9: replace += "t"; break; 1.4707 + case 10: replace += "n"; break; 1.4708 + case 11: replace += "v"; break; 1.4709 + case 12: replace += "f"; break; 1.4710 + case 13: replace += "r"; break; 1.4711 + case 14: replace += "x0e"; break; 1.4712 + case 15: replace += "x0f"; break; 1.4713 + case 16: replace += "x10"; break; 1.4714 + case 17: replace += "x11"; break; 1.4715 + case 18: replace += "x12"; break; 1.4716 + case 19: replace += "x13"; break; 1.4717 + case 20: replace += "x14"; break; 1.4718 + case 21: replace += "x15"; break; 1.4719 + case 22: replace += "x16"; break; 1.4720 + case 23: replace += "x17"; break; 1.4721 + case 24: replace += "x18"; break; 1.4722 + case 25: replace += "x19"; break; 1.4723 + case 26: replace += "x1a"; break; 1.4724 + case 27: replace += "x1b"; break; 1.4725 + case 28: replace += "x1c"; break; 1.4726 + case 29: replace += "x1d"; break; 1.4727 + case 30: replace += "x1e"; break; 1.4728 + case 31: replace += "x1f"; break; 1.4729 + } 1.4730 + value = value.replace(new RegExp(String.fromCharCode(i), "g"), replace); 1.4731 + } 1.4732 + return '"' + value + '"'; 1.4733 +} 1.4734 +//@} 1.4735 + 1.4736 +function doSetup(selector, idx) { 1.4737 +//@{ 1.4738 + var table = document.querySelectorAll(selector)[idx]; 1.4739 + 1.4740 + var tr = document.createElement("tr"); 1.4741 + table.firstChild.appendChild(tr); 1.4742 + tr.className = (tr.className + " active").trim(); 1.4743 + 1.4744 + return tr; 1.4745 +} 1.4746 +//@} 1.4747 + 1.4748 +function queryOutputHelper(beforeIndeterm, beforeState, beforeValue, 1.4749 + afterIndeterm, afterState, afterValue, 1.4750 + command, value) { 1.4751 +//@{ 1.4752 + var frag = document.createDocumentFragment(); 1.4753 + var beforeDiv = document.createElement("div"); 1.4754 + var afterDiv = document.createElement("div"); 1.4755 + frag.appendChild(beforeDiv); 1.4756 + frag.appendChild(afterDiv); 1.4757 + beforeDiv.className = afterDiv.className = "extra-results"; 1.4758 + beforeDiv.textContent = "Before: "; 1.4759 + afterDiv.textContent = "After: "; 1.4760 + 1.4761 + beforeDiv.appendChild(document.createElement("span")); 1.4762 + afterDiv.appendChild(document.createElement("span")); 1.4763 + if ("indeterm" in commands[command]) { 1.4764 + // We only know it has to be either true or false. 1.4765 + if (beforeIndeterm !== true && beforeIndeterm !== false) { 1.4766 + beforeDiv.lastChild.className = "bad-result"; 1.4767 + } 1.4768 + } else { 1.4769 + // It always has to be false. 1.4770 + beforeDiv.lastChild.className = beforeIndeterm === false 1.4771 + ? "good-result" 1.4772 + : "bad-result"; 1.4773 + } 1.4774 + // After running the command, indeterminate must always be false, except if 1.4775 + // it's an exception, or if it's insert*list and the state was true to 1.4776 + // begin with. And we can't help strikethrough/underline. 1.4777 + if ((/^insert(un)?orderedlist$/.test(command) && beforeState) 1.4778 + || command == "strikethrough" 1.4779 + || command == "underline") { 1.4780 + if (afterIndeterm !== true && afterIndeterm !== false) { 1.4781 + afterDiv.lastChild.className = "bad-result"; 1.4782 + } 1.4783 + } else { 1.4784 + afterDiv.lastChild.className = 1.4785 + afterIndeterm === false 1.4786 + ? "good-result" 1.4787 + : "bad-result"; 1.4788 + } 1.4789 + beforeDiv.lastChild.textContent = "indeterm " + prettyPrint(beforeIndeterm); 1.4790 + afterDiv.lastChild.textContent = "indeterm " + prettyPrint(afterIndeterm); 1.4791 + 1.4792 + beforeDiv.appendChild(document.createTextNode(", ")); 1.4793 + afterDiv.appendChild(document.createTextNode(", ")); 1.4794 + 1.4795 + beforeDiv.appendChild(document.createElement("span")); 1.4796 + afterDiv.appendChild(document.createElement("span")); 1.4797 + if (/^insert(un)?orderedlist$/.test(command)) { 1.4798 + // If the before state is true, the after state could be either true or 1.4799 + // false. But if the before state is false, the after state has to be 1.4800 + // true. 1.4801 + if (beforeState !== true && beforeState !== false) { 1.4802 + beforeDiv.lastChild.className = "bad-result"; 1.4803 + } 1.4804 + if (!beforeState) { 1.4805 + afterDiv.lastChild.className = afterState === true 1.4806 + ? "good-result" 1.4807 + : "bad-result"; 1.4808 + } else if (afterState !== true && afterState !== false) { 1.4809 + afterDiv.lastChild.className = "bad-result"; 1.4810 + } 1.4811 + } else if (/^justify(center|full|left|right)$/.test(command)) { 1.4812 + // We don't know about the before state, but the after state is always 1.4813 + // supposed to be true. 1.4814 + if (beforeState !== true && beforeState !== false) { 1.4815 + beforeDiv.lastChild.className = "bad-result"; 1.4816 + } 1.4817 + afterDiv.lastChild.className = afterState === true 1.4818 + ? "good-result" 1.4819 + : "bad-result"; 1.4820 + } else if (command == "strikethrough" || command == "underline") { 1.4821 + // The only thing we can say is the before/after states need to be 1.4822 + // either true or false. 1.4823 + if (beforeState !== true && beforeState !== false) { 1.4824 + beforeDiv.lastChild.className = "bad-result"; 1.4825 + } 1.4826 + if (afterState !== true && afterState !== false) { 1.4827 + afterDiv.lastChild.className = "bad-result"; 1.4828 + } 1.4829 + } else { 1.4830 + // The general rule is it must flip the state, unless there's no state 1.4831 + // defined, in which case it should always be false. 1.4832 + beforeDiv.lastChild.className = 1.4833 + afterDiv.lastChild.className = 1.4834 + ("state" in commands[command] && typeof beforeState == "boolean" && typeof afterState == "boolean" && beforeState === !afterState) 1.4835 + || (!("state" in commands[command]) && beforeState === false && afterState === false) 1.4836 + ? "good-result" 1.4837 + : "bad-result"; 1.4838 + } 1.4839 + beforeDiv.lastChild.textContent = "state " + prettyPrint(beforeState); 1.4840 + afterDiv.lastChild.textContent = "state " + prettyPrint(afterState); 1.4841 + 1.4842 + beforeDiv.appendChild(document.createTextNode(", ")); 1.4843 + afterDiv.appendChild(document.createTextNode(", ")); 1.4844 + 1.4845 + beforeDiv.appendChild(document.createElement("span")); 1.4846 + afterDiv.appendChild(document.createElement("span")); 1.4847 + 1.4848 + // Direct equality comparison doesn't make sense in a bunch of cases. 1.4849 + if (command == "backcolor" || command == "forecolor" || command == "hilitecolor") { 1.4850 + if (/^([0-9a-fA-F]{3}){1,2}$/.test(value)) { 1.4851 + value = "#" + value; 1.4852 + } 1.4853 + } else if (command == "fontsize") { 1.4854 + value = normalizeFontSize(value); 1.4855 + if (value !== null) { 1.4856 + value = String(cssSizeToLegacy(value)); 1.4857 + } 1.4858 + } else if (command == "formatblock") { 1.4859 + value = value.replace(/^<(.*)>$/, "$1").toLowerCase(); 1.4860 + } else if (command == "defaultparagraphseparator") { 1.4861 + value = value.toLowerCase(); 1.4862 + if (value != "p" && value != "div") { 1.4863 + value = ""; 1.4864 + } 1.4865 + } 1.4866 + 1.4867 + if (((command == "backcolor" || command == "forecolor" || command == "hilitecolor") && value.toLowerCase() == "currentcolor") 1.4868 + || (command == "fontsize" && value === null) 1.4869 + || (command == "formatblock" && formattableBlockNames.indexOf(value.replace(/^<(.*)>$/, "$1").trim()) == -1) 1.4870 + || (command == "defaultparagraphseparator" && value == "")) { 1.4871 + afterDiv.lastChild.className = beforeValue === afterValue 1.4872 + ? "good-result" 1.4873 + : "bad-result"; 1.4874 + } else if (/^justify(center|full|left|right)$/.test(command)) { 1.4875 + // We know there are only four correct values beforehand, and afterward 1.4876 + // the value has to be the one we set. 1.4877 + if (!/^(center|justify|left|right)$/.test(beforeValue)) { 1.4878 + beforeDiv.lastChild.className = "bad-result"; 1.4879 + } 1.4880 + var expectedValue = command == "justifyfull" 1.4881 + ? "justify" 1.4882 + : command.replace("justify", ""); 1.4883 + afterDiv.lastChild.className = afterValue === expectedValue 1.4884 + ? "good-result" 1.4885 + : "bad-result"; 1.4886 + } else if (!("value" in commands[command])) { 1.4887 + // If it's not defined we want "". 1.4888 + beforeDiv.lastChild.className = beforeValue === "" 1.4889 + ? "good-result" 1.4890 + : "bad-result"; 1.4891 + afterDiv.lastChild.className = afterValue === "" 1.4892 + ? "good-result" 1.4893 + : "bad-result"; 1.4894 + } else { 1.4895 + // And in all other cases, the value afterwards has to be the one we 1.4896 + // set. 1.4897 + afterDiv.lastChild.className = 1.4898 + areEquivalentValues(command, afterValue, value) 1.4899 + ? "good-result" 1.4900 + : "bad-result"; 1.4901 + } 1.4902 + beforeDiv.lastChild.textContent = "value " + prettyPrint(beforeValue); 1.4903 + afterDiv.lastChild.textContent = "value " + prettyPrint(afterValue); 1.4904 + 1.4905 + return frag; 1.4906 +} 1.4907 +//@} 1.4908 + 1.4909 +function normalizeTest(command, test, styleWithCss) { 1.4910 +//@{ 1.4911 + // Our standard format for test processing is: 1.4912 + // [input HTML, [command1, value1], [command2, value2], ...] 1.4913 + // But this is verbose, so we actually use three different formats in the 1.4914 + // tests and multiTests arrays: 1.4915 + // 1.4916 + // 1) Plain string giving the input HTML. The command is implicit from the 1.4917 + // key of the tests array. If the command takes values, the value is given 1.4918 + // by defaultValues, otherwise it's "". Has to be converted to 1.4919 + // [input HTML, [command, value]. 1.4920 + // 1.4921 + // 2) Two-element array [value, input HTML]. Has to be converted to 1.4922 + // [input HTML, [command, value]]. 1.4923 + // 1.4924 + // 3) An element of multiTests. This just has to have values filled in. 1.4925 + // 1.4926 + // Optionally, a styleWithCss argument can be passed, either true or false. 1.4927 + // If it is, we'll prepend a styleWithCss invocation. 1.4928 + if (command == "multitest") { 1.4929 + if (typeof test == "string") { 1.4930 + test = JSON.parse(test); 1.4931 + } 1.4932 + for (var i = 1; i < test.length; i++) { 1.4933 + if (typeof test[i] == "string" 1.4934 + && test[i] in defaultValues) { 1.4935 + test[i] = [test[i], defaultValues[test[i]]]; 1.4936 + } else if (typeof test[i] == "string") { 1.4937 + test[i] = [test[i], ""]; 1.4938 + } 1.4939 + } 1.4940 + return test; 1.4941 + } 1.4942 + 1.4943 + if (typeof test == "string") { 1.4944 + if (command in defaultValues) { 1.4945 + test = [test, [command, defaultValues[command]]]; 1.4946 + } else { 1.4947 + test = [test, [command, ""]]; 1.4948 + } 1.4949 + } else if (test.length == 2) { 1.4950 + test = [test[1], [command, String(test[0])]]; 1.4951 + } 1.4952 + 1.4953 + if (styleWithCss !== undefined) { 1.4954 + test.splice(1, 0, ["stylewithcss", String(styleWithCss)]); 1.4955 + } 1.4956 + 1.4957 + return test; 1.4958 +} 1.4959 +//@} 1.4960 + 1.4961 +function doInputCell(tr, test, command) { 1.4962 +//@{ 1.4963 + var testHtml = test[0]; 1.4964 + 1.4965 + var msg = null; 1.4966 + if (command in defaultValues) { 1.4967 + // Single command with a value, possibly with a styleWithCss stuck 1.4968 + // before. We don't need to specify the command itself, since this 1.4969 + // presumably isn't in multiTests, so the command is already given by 1.4970 + // the section header. 1.4971 + msg = 'value: ' + prettyPrint(test[test.length - 1][1]); 1.4972 + } else if (command == "multitest") { 1.4973 + // Uses a different input format 1.4974 + msg = JSON.stringify(test); 1.4975 + } 1.4976 + var inputCell = document.createElement("td"); 1.4977 + inputCell.innerHTML = "<div></div><div></div>"; 1.4978 + inputCell.firstChild.innerHTML = testHtml; 1.4979 + inputCell.lastChild.textContent = inputCell.firstChild.innerHTML; 1.4980 + if (msg !== null) { 1.4981 + inputCell.lastChild.textContent += " (" + msg + ")"; 1.4982 + } 1.4983 + 1.4984 + tr.appendChild(inputCell); 1.4985 +} 1.4986 +//@} 1.4987 + 1.4988 +function doSpecCell(tr, test, command) { 1.4989 +//@{ 1.4990 + var specCell = document.createElement("td"); 1.4991 + tr.appendChild(specCell); 1.4992 + try { 1.4993 + var points = setupCell(specCell, test[0]); 1.4994 + var range = document.createRange(); 1.4995 + range.setStart(points[0], points[1]); 1.4996 + range.setEnd(points[2], points[3]); 1.4997 + // The points might be backwards 1.4998 + if (range.collapsed) { 1.4999 + range.setEnd(points[0], points[1]); 1.5000 + } 1.5001 + specCell.firstChild.contentEditable = "true"; 1.5002 + specCell.firstChild.spellcheck = false; 1.5003 + 1.5004 + if (command != "multitest") { 1.5005 + try { var beforeIndeterm = myQueryCommandIndeterm(command, range) } 1.5006 + catch(e) { beforeIndeterm = "Exception" } 1.5007 + try { var beforeState = myQueryCommandState(command, range) } 1.5008 + catch(e) { beforeState = "Exception" } 1.5009 + try { var beforeValue = myQueryCommandValue(command, range) } 1.5010 + catch(e) { beforeValue = "Exception" } 1.5011 + } 1.5012 + 1.5013 + for (var i = 1; i < test.length; i++) { 1.5014 + myExecCommand(test[i][0], false, test[i][1], range); 1.5015 + } 1.5016 + 1.5017 + if (command != "multitest") { 1.5018 + try { var afterIndeterm = myQueryCommandIndeterm(command, range) } 1.5019 + catch(e) { afterIndeterm = "Exception" } 1.5020 + try { var afterState = myQueryCommandState(command, range) } 1.5021 + catch(e) { afterState = "Exception" } 1.5022 + try { var afterValue = myQueryCommandValue(command, range) } 1.5023 + catch(e) { afterValue = "Exception" } 1.5024 + } 1.5025 + 1.5026 + specCell.firstChild.contentEditable = "inherit"; 1.5027 + specCell.firstChild.removeAttribute("spellcheck"); 1.5028 + var compareDiv1 = specCell.firstChild.cloneNode(true); 1.5029 + 1.5030 + // Now do various sanity checks, and throw if they're violated. First 1.5031 + // just count children: 1.5032 + if (specCell.childNodes.length != 2) { 1.5033 + throw "The cell didn't have two children. Did something spill outside the test div?"; 1.5034 + } 1.5035 + 1.5036 + // Now verify that the DOM serializes. 1.5037 + compareDiv1.normalize(); 1.5038 + var compareDiv2 = compareDiv1.cloneNode(false); 1.5039 + compareDiv2.innerHTML = compareDiv1.innerHTML; 1.5040 + // Oddly, IE9 sometimes produces two nodes that return true for 1.5041 + // isEqualNode but have different innerHTML (omitting closing tags vs. 1.5042 + // not). 1.5043 + if (!compareDiv1.isEqualNode(compareDiv2) 1.5044 + && compareDiv1.innerHTML != compareDiv2.innerHTML) { 1.5045 + throw "DOM does not round-trip through serialization! " 1.5046 + + compareDiv1.innerHTML + " vs. " + compareDiv2.innerHTML; 1.5047 + } 1.5048 + if (!compareDiv1.isEqualNode(compareDiv2)) { 1.5049 + throw "DOM does not round-trip through serialization (although innerHTML is the same)! " 1.5050 + + compareDiv1.innerHTML; 1.5051 + } 1.5052 + 1.5053 + // Check for attributes 1.5054 + if (specCell.firstChild.attributes.length) { 1.5055 + throw "Wrapper div has attributes! " + 1.5056 + specCell.innerHTML.replace(/<div><\/div>$/, ""); 1.5057 + } 1.5058 + 1.5059 + // Final sanity check: make sure everything isAllowedChild() of its 1.5060 + // parent. 1.5061 + getDescendants(specCell.firstChild).forEach(function(descendant) { 1.5062 + if (!isAllowedChild(descendant, descendant.parentNode)) { 1.5063 + throw "Something here is not an allowed child of its parent: " + descendant; 1.5064 + } 1.5065 + }); 1.5066 + 1.5067 + addBrackets(range); 1.5068 + 1.5069 + specCell.lastChild.textContent = specCell.firstChild.innerHTML; 1.5070 + if (command != "multitest") { 1.5071 + specCell.lastChild.appendChild(queryOutputHelper( 1.5072 + beforeIndeterm, beforeState, beforeValue, 1.5073 + afterIndeterm, afterState, afterValue, 1.5074 + command, test[test.length - 1][1])); 1.5075 + if (specCell.querySelector(".bad-result")) { 1.5076 + specCell.parentNode.className = "alert"; 1.5077 + } 1.5078 + } 1.5079 + } catch (e) { 1.5080 + specCell.firstChild.contentEditable = "inherit"; 1.5081 + specCell.firstChild.removeAttribute("spellcheck"); 1.5082 + specCell.lastChild.textContent = "Exception: " + formatException(e); 1.5083 + 1.5084 + specCell.parentNode.className = "alert"; 1.5085 + specCell.lastChild.className = "alert"; 1.5086 + 1.5087 + // Don't bother comparing to localStorage, this is always wrong no 1.5088 + // matter what. 1.5089 + return; 1.5090 + } 1.5091 + 1.5092 + if (command != "multitest") { 1.5093 + // Old storage format 1.5094 + var key = "execcommand-" + command 1.5095 + + "-" + (test.length == 2 || test[1][1] == "false" ? "0" : "1") 1.5096 + + "-" + tr.firstChild.lastChild.textContent; 1.5097 + } else { 1.5098 + var key = "execcommand-" + JSON.stringify(test); 1.5099 + } 1.5100 + 1.5101 + // Use getItem() instead of direct property access to work around Firefox 1.5102 + // bug: https://bugzilla.mozilla.org/show_bug.cgi?id=532062 1.5103 + var oldValue = localStorage.getItem(key); 1.5104 + var newValue = specCell.lastChild.firstChild.textContent; 1.5105 + 1.5106 + // Ignore differences between {} and []. 1.5107 + if (oldValue === null 1.5108 + || oldValue.replace("{}", "[]") !== newValue.replace("{}", "[]")) { 1.5109 + specCell.parentNode.className = "alert"; 1.5110 + var alertDiv = document.createElement("div"); 1.5111 + specCell.lastChild.appendChild(alertDiv); 1.5112 + alertDiv.className = "alert"; 1.5113 + if (oldValue === null) { 1.5114 + alertDiv.textContent = "Newly added test result"; 1.5115 + } else if (oldValue.replace(/[\[\]{}]/g, "") == newValue.replace(/[\[\]{}]/g, "")) { 1.5116 + alertDiv.textContent = "Last run produced a different selection: " + oldValue; 1.5117 + } else { 1.5118 + alertDiv.textContent = "Last run produced different markup: " + oldValue; 1.5119 + } 1.5120 + 1.5121 + var button = document.createElement("button"); 1.5122 + alertDiv.appendChild(button); 1.5123 + button.textContent = "Store new result"; 1.5124 + button.className = "store-new-result"; 1.5125 + button.onclick = (function(key, val, alertDiv) { return function() { 1.5126 + localStorage[key] = val; 1.5127 + // Make it easier to do mass updates, and also to jump to the next 1.5128 + // new result 1.5129 + var buttons = document.getElementsByClassName("store-new-result"); 1.5130 + for (var i = 0; i < buttons.length; i++) { 1.5131 + if (isDescendant(buttons[i], alertDiv) 1.5132 + && i + 1 < buttons.length) { 1.5133 + buttons[i + 1].focus(); 1.5134 + break; 1.5135 + } 1.5136 + } 1.5137 + var td = alertDiv; 1.5138 + while (td.tagName != "TD") { 1.5139 + td = td.parentNode; 1.5140 + } 1.5141 + alertDiv.parentNode.removeChild(alertDiv); 1.5142 + if (!td.querySelector(".alert")) { 1.5143 + td.parentNode.className = (" " + td.parentNode.className + " ") 1.5144 + .replace(/ alert /g, "") 1.5145 + .replace(/^ | $/g, ""); 1.5146 + } 1.5147 + } })(key, newValue, alertDiv); 1.5148 + } 1.5149 +} 1.5150 +//@} 1.5151 + 1.5152 +function browserCellException(e, testDiv, browserCell) { 1.5153 +//@{ 1.5154 + if (testDiv) { 1.5155 + testDiv.contenteditable = "inherit"; 1.5156 + testDiv.removeAttribute("spellcheck"); 1.5157 + } 1.5158 + browserCell.lastChild.className = "alert"; 1.5159 + browserCell.lastChild.textContent = "Exception: " + formatException(e); 1.5160 + if (testDiv && testDiv.parentNode != browserCell) { 1.5161 + browserCell.insertBefore(testDiv, browserCell.firstChild); 1.5162 + } 1.5163 +} 1.5164 +//@} 1.5165 + 1.5166 +function formatException(e) { 1.5167 +//@{ 1.5168 + if (typeof e == "object" && "stack" in e) { 1.5169 + return e + " (stack: " + e.stack + ")"; 1.5170 + } 1.5171 + return String(e); 1.5172 +} 1.5173 +//@} 1.5174 + 1.5175 +function doSameCell(tr) { 1.5176 +//@{ 1.5177 + tr.className = (" " + tr.className + " ").replace(" active ", "").trim(); 1.5178 + if (tr.className == "") { 1.5179 + tr.removeAttribute("class"); 1.5180 + } 1.5181 + 1.5182 + var sameCell = document.createElement("td"); 1.5183 + if (!document.querySelector("#browser-checkbox").checked) { 1.5184 + sameCell.className = "maybe"; 1.5185 + sameCell.textContent = "?"; 1.5186 + } else { 1.5187 + var exception = false; 1.5188 + try { 1.5189 + // Ad hoc normalization to avoid basically spurious mismatches. For 1.5190 + // now this includes ignoring where the selection goes. 1.5191 + var normalizedSpecCell = tr.childNodes[1].lastChild.firstChild.textContent 1.5192 + .replace(/[[\]{}]/g, "") 1.5193 + .replace(/ style="margin: 0 0 0 40px; border: none; padding: 0px;"/g, '') 1.5194 + .replace(/ style="margin-right: 0px;" dir="ltr"/g, '') 1.5195 + .replace(/ style="margin-left: 0px;" dir="rtl"/g, '') 1.5196 + .replace(/ style="margin-(left|right): 40px;"/g, '') 1.5197 + .replace(/: /g, ":") 1.5198 + .replace(/;? ?"/g, '"') 1.5199 + .replace(/<(\/?)strong/g, '<$1b') 1.5200 + .replace(/<(\/?)strike/g, '<$1s') 1.5201 + .replace(/<(\/?)em/g, '<$1i') 1.5202 + .replace(/#[0-9a-fA-F]{6}/g, function(match) { return match.toUpperCase(); }); 1.5203 + var normalizedBrowserCell = tr.childNodes[2].lastChild.firstChild.textContent 1.5204 + .replace(/[[\]{}]/g, "") 1.5205 + .replace(/ style="margin: 0 0 0 40px; border: none; padding: 0px;"/g, '') 1.5206 + .replace(/ style="margin-right: 0px;" dir="ltr"/g, '') 1.5207 + .replace(/ style="margin-left: 0px;" dir="rtl"/g, '') 1.5208 + .replace(/ style="margin-(left|right): 40px;"/g, '') 1.5209 + .replace(/: /g, ":") 1.5210 + .replace(/;? ?"/g, '"') 1.5211 + .replace(/<(\/?)strong/g, '<$1b') 1.5212 + .replace(/<(\/?)strike/g, '<$1s') 1.5213 + .replace(/<(\/?)em/g, '<$1i') 1.5214 + .replace(/#[0-9a-fA-F]{6}/g, function(match) { return match.toUpperCase(); }) 1.5215 + .replace(/ size="2" width="100%"/g, ''); 1.5216 + if (navigator.userAgent.indexOf("MSIE") != -1) { 1.5217 + // IE produces <font style> instead of <span style>, so let's 1.5218 + // translate all <span>s to <font>s. 1.5219 + normalizedSpecCell = normalizedSpecCell 1.5220 + .replace(/<(\/?)span/g, '<$1font'); 1.5221 + normalizedBrowserCell = normalizedBrowserCell 1.5222 + .replace(/<(\/?)span/g, '<$1font'); 1.5223 + } 1.5224 + } catch (e) { 1.5225 + exception = true; 1.5226 + } 1.5227 + if (!exception && normalizedSpecCell == normalizedBrowserCell) { 1.5228 + sameCell.className = "yes"; 1.5229 + sameCell.textContent = "\u2713"; 1.5230 + } else { 1.5231 + sameCell.className = "no"; 1.5232 + sameCell.textContent = "\u2717"; 1.5233 + } 1.5234 + } 1.5235 + tr.appendChild(sameCell); 1.5236 + 1.5237 + for (var i = 0; i <= 2; i++) { 1.5238 + // Insert <wbr> so IE doesn't stretch the screen. This is considerably 1.5239 + // more complicated than it has to be, thanks to Firefox's lack of 1.5240 + // support for outerHTML. 1.5241 + var div = tr.childNodes[i].lastChild; 1.5242 + if (div.firstChild) { 1.5243 + var text = div.firstChild.textContent; 1.5244 + div.removeChild(div.firstChild); 1.5245 + div.insertBefore(document.createElement("div"), div.firstChild); 1.5246 + div.firstChild.innerHTML = text 1.5247 + .replace(/&/g, "&") 1.5248 + .replace(/</g, "<") 1.5249 + .replace(/>/g, "><wbr>") 1.5250 + .replace(/</g, "<wbr><"); 1.5251 + while (div.firstChild.hasChildNodes()) { 1.5252 + div.insertBefore(div.firstChild.lastChild, div.firstChild.nextSibling); 1.5253 + } 1.5254 + div.removeChild(div.firstChild); 1.5255 + } 1.5256 + 1.5257 + // Add position: absolute span to not affect vertical layout 1.5258 + getDescendants(tr.childNodes[i].firstChild) 1.5259 + .filter(function(node) { 1.5260 + return node.nodeType == Node.TEXT_NODE 1.5261 + && /^(\{\}?|\})$/.test(node.data); 1.5262 + }).forEach(function(node) { 1.5263 + var span = document.createElement("span"); 1.5264 + span.style.position = "absolute"; 1.5265 + span.textContent = node.data; 1.5266 + node.parentNode.insertBefore(span, node); 1.5267 + node.parentNode.removeChild(node); 1.5268 + }); 1.5269 + } 1.5270 +} 1.5271 +//@} 1.5272 + 1.5273 +function doTearDown(command) { 1.5274 +//@{ 1.5275 + getSelection().removeAllRanges(); 1.5276 +} 1.5277 +//@} 1.5278 + 1.5279 +function setupCell(cell, html) { 1.5280 +//@{ 1.5281 + cell.innerHTML = "<div></div><div></div>"; 1.5282 + 1.5283 + return setupDiv(cell.firstChild, html); 1.5284 +} 1.5285 +//@} 1.5286 + 1.5287 +function setupDiv(node, html) { 1.5288 +//@{ 1.5289 + // A variety of checks to avoid simple errors. Not foolproof, of course. 1.5290 + var re = /\{|\[|data-start/g; 1.5291 + var markers = []; 1.5292 + var marker; 1.5293 + while (marker = re.exec(html)) { 1.5294 + markers.push(marker); 1.5295 + } 1.5296 + if (markers.length != 1) { 1.5297 + throw "Need exactly one start marker ([ or { or data-start), found " + markers.length; 1.5298 + } 1.5299 + 1.5300 + var re = /\}|\]|data-end/g; 1.5301 + var markers = []; 1.5302 + var marker; 1.5303 + while (marker = re.exec(html)) { 1.5304 + markers.push(marker); 1.5305 + } 1.5306 + if (markers.length != 1) { 1.5307 + throw "Need exactly one end marker (] or } or data-end), found " + markers.length; 1.5308 + } 1.5309 + 1.5310 + node.innerHTML = html; 1.5311 + 1.5312 + var startNode, startOffset, endNode, endOffset; 1.5313 + 1.5314 + // For braces that don't lie inside text nodes, we can't just set 1.5315 + // innerHTML, because that might disturb the DOM. For instance, if the 1.5316 + // brace is right before a <tr>, it could get moved outside the table 1.5317 + // entirely, which messes everything up pretty badly. So we instead 1.5318 + // allow using data attributes: data-start and data-end on the start and 1.5319 + // end nodes, with a numeric value indicating the offset. This format 1.5320 + // doesn't allow the parent div to be a start or end node, but in that case 1.5321 + // you can always use the curly braces. 1.5322 + if (node.querySelector("[data-start]")) { 1.5323 + startNode = node.querySelector("[data-start]"); 1.5324 + startOffset = startNode.getAttribute("data-start"); 1.5325 + startNode.removeAttribute("data-start"); 1.5326 + } 1.5327 + if (node.querySelector("[data-end]")) { 1.5328 + endNode = node.querySelector("[data-end]"); 1.5329 + endOffset = endNode.getAttribute("data-end"); 1.5330 + endNode.removeAttribute("data-end"); 1.5331 + } 1.5332 + 1.5333 + var cur = node; 1.5334 + while (true) { 1.5335 + if (!cur || (cur != node && !(cur.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINS))) { 1.5336 + break; 1.5337 + } 1.5338 + 1.5339 + if (cur.nodeType != Node.TEXT_NODE) { 1.5340 + cur = nextNode(cur); 1.5341 + continue; 1.5342 + } 1.5343 + 1.5344 + var data = cur.data.replace(/\]/g, ""); 1.5345 + var startIdx = data.indexOf("["); 1.5346 + 1.5347 + data = cur.data.replace(/\[/g, ""); 1.5348 + var endIdx = data.indexOf("]"); 1.5349 + 1.5350 + cur.data = cur.data.replace(/[\[\]]/g, ""); 1.5351 + 1.5352 + if (startIdx != -1) { 1.5353 + startNode = cur; 1.5354 + startOffset = startIdx; 1.5355 + } 1.5356 + 1.5357 + if (endIdx != -1) { 1.5358 + endNode = cur; 1.5359 + endOffset = endIdx; 1.5360 + } 1.5361 + 1.5362 + // These are only legal as the first or last 1.5363 + data = cur.data.replace(/\}/g, ""); 1.5364 + var elStartIdx = data.indexOf("{"); 1.5365 + 1.5366 + data = cur.data.replace(/\{/g, ""); 1.5367 + var elEndIdx = data.indexOf("}"); 1.5368 + 1.5369 + if (elStartIdx == 0) { 1.5370 + startNode = cur.parentNode; 1.5371 + startOffset = getNodeIndex(cur); 1.5372 + } else if (elStartIdx != -1) { 1.5373 + startNode = cur.parentNode; 1.5374 + startOffset = getNodeIndex(cur) + 1; 1.5375 + } 1.5376 + if (elEndIdx == 0) { 1.5377 + endNode = cur.parentNode; 1.5378 + endOffset = getNodeIndex(cur); 1.5379 + } else if (elEndIdx != -1) { 1.5380 + endNode = cur.parentNode; 1.5381 + endOffset = getNodeIndex(cur) + 1; 1.5382 + } 1.5383 + 1.5384 + cur.data = cur.data.replace(/[{}]/g, ""); 1.5385 + if (!cur.data.length) { 1.5386 + if (cur == startNode || cur == endNode) { 1.5387 + throw "You put a square bracket where there was no text node . . ."; 1.5388 + } 1.5389 + var oldCur = cur; 1.5390 + cur = nextNode(cur); 1.5391 + oldCur.parentNode.removeChild(oldCur); 1.5392 + } else { 1.5393 + cur = nextNode(cur); 1.5394 + } 1.5395 + } 1.5396 + 1.5397 + return [startNode, startOffset, endNode, endOffset]; 1.5398 +} 1.5399 +//@} 1.5400 + 1.5401 +function setSelection(startNode, startOffset, endNode, endOffset) { 1.5402 +//@{ 1.5403 + if (navigator.userAgent.indexOf("Opera") != -1) { 1.5404 + // Yes, browser sniffing is evil, but I can't be bothered to debug 1.5405 + // Opera. 1.5406 + var range = document.createRange(); 1.5407 + range.setStart(startNode, startOffset); 1.5408 + range.setEnd(endNode, endOffset); 1.5409 + if (range.collapsed) { 1.5410 + range.setEnd(startNode, startOffset); 1.5411 + } 1.5412 + getSelection().removeAllRanges(); 1.5413 + getSelection().addRange(range); 1.5414 + } else if ("extend" in getSelection()) { 1.5415 + // WebKit behaves unreasonably for collapse(), so do that manually. 1.5416 + /* 1.5417 + var range = document.createRange(); 1.5418 + range.setStart(startNode, startOffset); 1.5419 + getSelection().removeAllRanges(); 1.5420 + getSelection().addRange(range); 1.5421 + */ 1.5422 + getSelection().collapse(startNode, startOffset); 1.5423 + getSelection().extend(endNode, endOffset); 1.5424 + } else { 1.5425 + // IE9. Selections have no direction, so we just make the selection 1.5426 + // always forwards. 1.5427 + var range; 1.5428 + if (getSelection().rangeCount) { 1.5429 + range = getSelection().getRangeAt(0); 1.5430 + } else { 1.5431 + range = document.createRange(); 1.5432 + } 1.5433 + range.setStart(startNode, startOffset); 1.5434 + range.setEnd(endNode, endOffset); 1.5435 + if (range.collapsed) { 1.5436 + // Phooey, we got them backwards. 1.5437 + range.setEnd(startNode, startOffset); 1.5438 + } 1.5439 + if (!getSelection().rangeCount) { 1.5440 + getSelection().addRange(range); 1.5441 + } 1.5442 + } 1.5443 +} 1.5444 +//@} 1.5445 + 1.5446 +/** 1.5447 + * Add brackets at the start and end points of the given range, so that they're 1.5448 + * visible. 1.5449 + */ 1.5450 +function addBrackets(range) { 1.5451 +//@{ 1.5452 + // Handle the collapsed case specially, to avoid confusingly getting the 1.5453 + // markers backwards in some cases 1.5454 + if (range.startContainer.nodeType == Node.TEXT_NODE 1.5455 + || range.startContainer.nodeType == Node.COMMENT_NODE) { 1.5456 + if (range.collapsed) { 1.5457 + range.startContainer.insertData(range.startOffset, "[]"); 1.5458 + } else { 1.5459 + range.startContainer.insertData(range.startOffset, "["); 1.5460 + } 1.5461 + } else { 1.5462 + var marker = range.collapsed ? "{}" : "{"; 1.5463 + if (range.startOffset != range.startContainer.childNodes.length 1.5464 + && range.startContainer.childNodes[range.startOffset].nodeType == Node.TEXT_NODE) { 1.5465 + range.startContainer.childNodes[range.startOffset].insertData(0, marker); 1.5466 + } else if (range.startOffset != 0 1.5467 + && range.startContainer.childNodes[range.startOffset - 1].nodeType == Node.TEXT_NODE) { 1.5468 + range.startContainer.childNodes[range.startOffset - 1].appendData(marker); 1.5469 + } else { 1.5470 + // Seems to serialize as I'd want even for tables . . . IE doesn't 1.5471 + // allow undefined to be passed as the second argument (it throws 1.5472 + // an exception), so we have to explicitly check the number of 1.5473 + // children and pass null. 1.5474 + range.startContainer.insertBefore(document.createTextNode(marker), 1.5475 + range.startContainer.childNodes.length == range.startOffset 1.5476 + ? null 1.5477 + : range.startContainer.childNodes[range.startOffset]); 1.5478 + } 1.5479 + } 1.5480 + if (range.collapsed) { 1.5481 + return; 1.5482 + } 1.5483 + if (range.endContainer.nodeType == Node.TEXT_NODE 1.5484 + || range.endContainer.nodeType == Node.COMMENT_NODE) { 1.5485 + range.endContainer.insertData(range.endOffset, "]"); 1.5486 + } else { 1.5487 + if (range.endOffset != range.endContainer.childNodes.length 1.5488 + && range.endContainer.childNodes[range.endOffset].nodeType == Node.TEXT_NODE) { 1.5489 + range.endContainer.childNodes[range.endOffset].insertData(0, "}"); 1.5490 + } else if (range.endOffset != 0 1.5491 + && range.endContainer.childNodes[range.endOffset - 1].nodeType == Node.TEXT_NODE) { 1.5492 + range.endContainer.childNodes[range.endOffset - 1].appendData("}"); 1.5493 + } else { 1.5494 + range.endContainer.insertBefore(document.createTextNode("}"), 1.5495 + range.endContainer.childNodes.length == range.endOffset 1.5496 + ? null 1.5497 + : range.endContainer.childNodes[range.endOffset]); 1.5498 + } 1.5499 + } 1.5500 +} 1.5501 +//@} 1.5502 + 1.5503 +function normalizeSerializedStyle(wrapper) { 1.5504 +//@{ 1.5505 + // Inline CSS attribute serialization has terrible interop, so we fix 1.5506 + // things up a bit to avoid spurious mismatches. This needs to be removed 1.5507 + // once CSSOM defines this stuff properly, but for now there's just no 1.5508 + // standard for any of it. This only normalizes descendants of wrapper, 1.5509 + // not wrapper itself. 1.5510 + [].forEach.call(wrapper.querySelectorAll("[style]"), function(node) { 1.5511 + if (node.style.color != "") { 1.5512 + var newColor = normalizeColor(node.style.color); 1.5513 + node.style.color = ""; 1.5514 + node.style.color = newColor; 1.5515 + } 1.5516 + if (node.style.backgroundColor != "") { 1.5517 + var newBackgroundColor = normalizeColor(node.style.backgroundColor); 1.5518 + node.style.backgroundColor = ""; 1.5519 + node.style.backgroundColor = newBackgroundColor; 1.5520 + } 1.5521 + node.setAttribute("style", node.getAttribute("style") 1.5522 + // Random spacing differences 1.5523 + .replace(/; ?$/, "") 1.5524 + .replace(/: /g, ":") 1.5525 + // Gecko likes "transparent" 1.5526 + .replace(/transparent/g, "rgba(0, 0, 0, 0)") 1.5527 + // WebKit likes to look overly precise 1.5528 + .replace(/, 0.496094\)/g, ", 0.5)") 1.5529 + // Gecko converts anything with full alpha to "transparent" which 1.5530 + // then becomes "rgba(0, 0, 0, 0)", so we have to make other 1.5531 + // browsers match 1.5532 + .replace(/rgba\([0-9]+, [0-9]+, [0-9]+, 0\)/g, "rgba(0, 0, 0, 0)") 1.5533 + ); 1.5534 + }); 1.5535 +} 1.5536 +//@} 1.5537 + 1.5538 +/** 1.5539 + * Input is the same format as output of generateTest in gentest.html. 1.5540 + */ 1.5541 +function runConformanceTest(browserTest) { 1.5542 +//@{ 1.5543 + document.getElementById("test-container").innerHTML = "<div contenteditable></div><p>test"; 1.5544 + var testName = JSON.stringify(browserTest[1]) + " " + format_value(browserTest[0]); 1.5545 + var testDiv = document.querySelector("div[contenteditable]"); 1.5546 + var originalRootElement, newRootElement; 1.5547 + var exception = null; 1.5548 + var expectedExecCommandReturnValues = browserTest[3]; 1.5549 + var expectedQueryResults = browserTest[4]; 1.5550 + var actualQueryResults = {}; 1.5551 + var actualQueryExceptions = {}; 1.5552 + 1.5553 + try { 1.5554 + var points = setupDiv(testDiv, browserTest[0]); 1.5555 + 1.5556 + var range = document.createRange(); 1.5557 + range.setStart(points[0], points[1]); 1.5558 + range.setEnd(points[2], points[3]); 1.5559 + // The points might be backwards 1.5560 + if (range.collapsed) { 1.5561 + range.setEnd(points[0], points[1]); 1.5562 + } 1.5563 + getSelection().removeAllRanges(); 1.5564 + getSelection().addRange(range); 1.5565 + 1.5566 + var originalRootElement = document.documentElement.cloneNode(true); 1.5567 + originalRootElement.querySelector("[contenteditable]").parentNode 1.5568 + .removeChild(originalRootElement.querySelector("[contenteditable]")); 1.5569 + originalRootElement.querySelector("#log").parentNode 1.5570 + .removeChild(originalRootElement.querySelector("#log")); 1.5571 + 1.5572 + for (var command in expectedQueryResults) { 1.5573 + var results = []; 1.5574 + var exceptions = {}; 1.5575 + try { results[0] = document.queryCommandIndeterm(command) } 1.5576 + catch(e) { exceptions[0] = e } 1.5577 + try { results[1] = document.queryCommandState(command) } 1.5578 + catch(e) { exceptions[1] = e } 1.5579 + try { results[2] = document.queryCommandValue(command) } 1.5580 + catch(e) { exceptions[2] = e } 1.5581 + actualQueryResults[command] = results; 1.5582 + actualQueryExceptions[command] = exceptions; 1.5583 + } 1.5584 + } catch(e) { 1.5585 + exception = e; 1.5586 + } 1.5587 + 1.5588 + for (var i = 0; i < browserTest[1].length; i++) { 1.5589 + test(function() { 1.5590 + assert_equals(exception, null, "Setup must not throw an exception"); 1.5591 + 1.5592 + assert_equals(document.execCommand(browserTest[1][i][0], false, browserTest[1][i][1]), 1.5593 + expectedExecCommandReturnValues[i]); 1.5594 + }, testName + ": execCommand(" + format_value(browserTest[1][i][0]) + ", false, " + format_value(browserTest[1][i][1]) + ") return value"); 1.5595 + } 1.5596 + 1.5597 + if (exception === null) { 1.5598 + try { 1.5599 + for (var command in expectedQueryResults) { 1.5600 + var results = actualQueryResults[command]; 1.5601 + var exceptions = actualQueryExceptions[command]; 1.5602 + try { results[3] = document.queryCommandIndeterm(command) } 1.5603 + catch(e) { exceptions[3] = e } 1.5604 + try { results[4] = document.queryCommandState(command) } 1.5605 + catch(e) { exceptions[4] = e } 1.5606 + try { results[5] = document.queryCommandValue(command) } 1.5607 + catch(e) { exceptions[5] = e } 1.5608 + } 1.5609 + 1.5610 + var newRootElement = document.documentElement.cloneNode(true); 1.5611 + newRootElement.querySelector("[contenteditable]").parentNode 1.5612 + .removeChild(newRootElement.querySelector("[contenteditable]")); 1.5613 + newRootElement.querySelector("#log").parentNode 1.5614 + .removeChild(newRootElement.querySelector("#log")); 1.5615 + 1.5616 + normalizeSerializedStyle(testDiv); 1.5617 + } catch(e) { 1.5618 + exception = e; 1.5619 + } 1.5620 + } 1.5621 + 1.5622 + test(function() { 1.5623 + assert_equals(exception, null, "Setup must not throw an exception"); 1.5624 + 1.5625 + // Now test for modifications to non-editable content. First just 1.5626 + // count children: 1.5627 + assert_equals(testDiv.parentNode.childNodes.length, 2, 1.5628 + "The parent div must have two children. Did something spill outside the test div?"); 1.5629 + 1.5630 + // Check for attributes 1.5631 + assert_equals(testDiv.attributes.length, 1, 1.5632 + 'Wrapper div must have only one attribute (<div contenteditable="">), but has more (' + 1.5633 + formatStartTag(testDiv) + ")"); 1.5634 + 1.5635 + assert_equals(document.body.attributes.length, 0, 1.5636 + "Body element must have no attributes (<body>), but has more (" + 1.5637 + formatStartTag(document.body) + ")"); 1.5638 + 1.5639 + // Check that in general, nothing outside the test div was modified. 1.5640 + // TODO: Less verbose error reporting, the way some of the range tests 1.5641 + // do? 1.5642 + assert_equals(newRootElement.innerHTML, originalRootElement.innerHTML, 1.5643 + "Everything outside the editable div must be unchanged, but some change did occur"); 1.5644 + }, testName + " checks for modifications to non-editable content"); 1.5645 + 1.5646 + test(function() { 1.5647 + assert_equals(exception, null, "Setup must not throw an exception"); 1.5648 + 1.5649 + assert_equals(testDiv.innerHTML, 1.5650 + browserTest[2].replace(/[\[\]{}]/g, ""), 1.5651 + "Unexpected innerHTML (after normalizing inline style)"); 1.5652 + }, testName + " compare innerHTML"); 1.5653 + 1.5654 + for (var command in expectedQueryResults) { 1.5655 + var descriptions = [ 1.5656 + 'queryCommandIndeterm("' + command + '") before', 1.5657 + 'queryCommandState("' + command + '") before', 1.5658 + 'queryCommandValue("' + command + '") before', 1.5659 + 'queryCommandIndeterm("' + command + '") after', 1.5660 + 'queryCommandState("' + command + '") after', 1.5661 + 'queryCommandValue("' + command + '") after', 1.5662 + ]; 1.5663 + for (var i = 0; i < 6; i++) { 1.5664 + test(function() { 1.5665 + assert_equals(exception, null, "Setup must not throw an exception"); 1.5666 + 1.5667 + if (expectedQueryResults[command][i] === null) { 1.5668 + // Some ad hoc tests to verify that we have a real 1.5669 + // DOMException. FIXME: This should be made more rigorous, 1.5670 + // with clear steps specified for checking that something 1.5671 + // is really a DOMException. 1.5672 + assert_true(i in actualQueryExceptions[command], 1.5673 + "An exception must be thrown in this case"); 1.5674 + var e = actualQueryExceptions[command][i]; 1.5675 + assert_equals(typeof e, "object", 1.5676 + "typeof thrown object"); 1.5677 + assert_idl_attribute(e, "code", 1.5678 + "Thrown object must be a DOMException"); 1.5679 + assert_idl_attribute(e, "INVALID_ACCESS_ERR", 1.5680 + "Thrown object must be a DOMException"); 1.5681 + assert_equals(e.code, e.INVALID_ACCESS_ERR, 1.5682 + "Thrown object must be an INVALID_ACCESS_ERR, so its .code and .INVALID_ACCESS_ERR attributes must be equal"); 1.5683 + } else if ((i == 2 || i == 5) 1.5684 + && (command == "backcolor" || command == "forecolor" || command == "hilitecolor") 1.5685 + && typeof actualQueryResults[command][i] == "string") { 1.5686 + assert_false(i in actualQueryExceptions[command], 1.5687 + "An exception must not be thrown in this case"); 1.5688 + // We don't return the format that the color should be in: 1.5689 + // that's up to CSSOM. Thus we normalize before comparing. 1.5690 + assert_equals(normalizeColor(actualQueryResults[command][i]), 1.5691 + expectedQueryResults[command][i], 1.5692 + "Wrong result returned (after color normalization)"); 1.5693 + } else { 1.5694 + assert_false(i in actualQueryExceptions[command], 1.5695 + "An exception must not be thrown in this case"); 1.5696 + assert_equals(actualQueryResults[command][i], 1.5697 + expectedQueryResults[command][i], 1.5698 + "Wrong result returned"); 1.5699 + } 1.5700 + }, testName + " " + descriptions[i]); 1.5701 + } 1.5702 + } 1.5703 + 1.5704 + // Silly Firefox 1.5705 + document.body.removeAttribute("bgcolor"); 1.5706 +} 1.5707 +//@} 1.5708 + 1.5709 +/** 1.5710 + * Return a string like '<body bgcolor="#FFFFFF">'. 1.5711 + */ 1.5712 +function formatStartTag(el) { 1.5713 +//@{ 1.5714 + var ret = "<" + el.tagName.toLowerCase(); 1.5715 + for (var i = 0; i < el.attributes.length; i++) { 1.5716 + ret += " " + el.attributes[i].name + '="'; 1.5717 + ret += el.attributes[i].value.replace(/\&/g, "&") 1.5718 + .replace(/"/g, """); 1.5719 + ret += '"'; 1.5720 + } 1.5721 + return ret + ">"; 1.5722 +} 1.5723 +//@} 1.5724 + 1.5725 +// vim: foldmarker=@{,@} foldmethod=marker