| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | |
| <html> | |
| <head> | |
| <script src="../../resources/js-test-pre.js"></script> | |
| </head> | |
| <body> | |
| <p id="description"></p> | |
| <div id="console"></div> | |
| <script> | |
| description("Test to make sure queryCommandState returns correct values.") | |
| var testContainer = document.createElement("div"); | |
| testContainer.contentEditable = true; | |
| document.body.appendChild(testContainer); | |
| function testQueryCommandState(command, contents, selector, expectedState) | |
| { | |
| testContainer.innerHTML = contents; | |
| var selected = selector(testContainer); | |
| var actualState = document.queryCommandState(command); | |
| var actualValue = document.queryCommandValue(command); | |
| var action = 'queryCommandState("' + command + '") returns ' + actualState + ' when selecting ' + selected + ' of "' + contents + '"'; | |
| if (actualState != expectedState) | |
| testFailed(action + ', expected ' + expectedState + ''); | |
| else if (actualValue != actualState.toString()) | |
| testFailed(action + ' but queryCommandValue returned ' + actualValue); | |
| else | |
| testPassed(action); | |
| } | |
| function selectAll(container) { | |
| window.getSelection().selectAllChildren(container); | |
| return 'all'; | |
| } | |
| function selectSecondWord(container) { | |
| window.getSelection().setPosition(container, 0); | |
| window.getSelection().modify('move', 'forward', 'word'); | |
| window.getSelection().modify('move', 'forward', 'word'); | |
| window.getSelection().modify('move', 'backward', 'word'); | |
| window.getSelection().modify('extend', 'forward', 'word'); | |
| return 'second word'; | |
| } | |
| function selectFirstTwoWords(container) { | |
| window.getSelection().setPosition(container, 0); | |
| window.getSelection().modify('move', 'forward', 'word'); | |
| window.getSelection().modify('extend', 'forward', 'word'); | |
| window.getSelection().modify('extend', 'forward', 'word'); | |
| return 'first two words'; | |
| } | |
| function runTests(editingBehavior) { | |
| if (window.internals) | |
| internals.settings.setEditingBehavior(editingBehavior); | |
| debug('Tests for ' + editingBehavior) | |
| testQueryCommandState("bold", 'hello', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<i>hello</i>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<b>hello</b>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("bold", 'hello <b>world</b>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<b>hello</b> world', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", 'hello <b>world</b> WebKit', selectSecondWord, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<b>hello</b> world <b>WebKit</b>', selectSecondWord, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<i>hello <b>hello</b> WebKit</i>', selectSecondWord, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<b>hello <i>hello</i> WebKit</b>', selectSecondWord, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("bold", '<b><div>hello <i>hello</i> WebKit</div></b>', selectSecondWord, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("bold", '<b style="font-weight: normal;">hello</b>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<i style="font-weight: bold;">hello</i>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("bold", '<b>hello</b> world <b>WebKit</b>', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("bold", '<b>hello</b><b> world</b>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("bold", '<div><b>hello</b></div><p><b> WebKit</b></p>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("italic", 'hello', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("italic", '<b>hello</b>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("italic", '<i>hello</i>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("italic", '<i>hello</i> world', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("italic", 'hello <i>world</i>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("italic", '<i><div>hello world</div></i>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("italic", '<div style="font-style: italic">hello <span style="font-style: normal;">hello</span></div>', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("subscript", 'hello', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("subscript", '<sup>hello</sup>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("subscript", '<sub>hello</sub>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("subscript", '<sub>hello</sub> world', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("subscript", 'hello <sub>world</sub>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("subscript", 'hello <span style="vertical-align: sub;">world</span> WebKit', selectSecondWord, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("superscript", 'hello', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("superscript", '<sub>hello</sub>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("superscript", '<sup>hello</sup>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("superscript", '<sup>hello</sup> world', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("superscript", 'hello <sup>world</sup>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("superscript", '<span style="vertical-align: super;">hello</span><span style="vertical-align: sub;">world</span>', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("superscript", 'hello<span style="vertical-align: super;">world</span>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", 'hello', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", '<s>hello</s>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", '<u>hello</u>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("underline", '<u>hello</u> world', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", 'hello <u>world</u>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", '<u><div>hello world</div></u>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("underline", '<u><s><div>hello world WebKit</div></s></u>', selectSecondWord, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("underline", '<s><u>hello</u> world</s> WebKit', selectSecondWord, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", '<u><s>hello</s> world</u> WebKit', selectSecondWord, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("underline", '<s>hello <u>world</s> WebKit</u>', selectSecondWord, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", 'hello', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", '<u>hello</u>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", '<s>hello</s>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", '<s>hello</s> world', selectAll, {'mac': true, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", 'hello <s>world</s>', selectAll, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", '<s><div>hello world</div></s>', selectAll, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", '<s><u><div>hello world WebKit</div></u></s>', selectSecondWord, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", '<u><s>hello</s> world</u> WebKit', selectSecondWord, {'mac': false, 'windows': false}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", 'hello <s>world WebKit</s>', selectSecondWord, {'mac': true, 'windows': true}[editingBehavior]); | |
| testQueryCommandState("strikeThrough", 'hello <s>world WebKit</s>', selectFirstTwoWords, {'mac': false, 'windows': true}[editingBehavior]); | |
| } | |
| runTests('windows'); | |
| debug('') | |
| runTests('mac'); | |
| //document.body.removeChild(testContainer); | |
| var successfullyParsed = true; | |
| </script> | |
| <script src="../../resources/js-test-post.js"></script> | |
| </body> | |
| </html> |