| <!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 styles toggle as expected and tag-based styles can be removed by editing commands.") | |
| // Note that editing commands insert <b> instead of | |
| // <span style="font-weight: bold"> when in quirks mode | |
| // so edits to this file should be aware of parse mode. | |
| // FIXME: This test could use iframe subdocuments to avoid | |
| // needing to depend on the compatMode of this document | |
| shouldBeEqualToString("document.compatMode", 'BackCompat'); | |
| function testToggleToRemove(toggleCommand, testContainer, testContent) | |
| { | |
| document.body.appendChild(testContainer); | |
| window.getSelection().selectAllChildren(testContainer); | |
| document.execCommand(toggleCommand, false, null); | |
| document.body.removeChild(testContainer); | |
| return (testContainer.firstChild == testContent); | |
| } | |
| function wrapInTag(tagName, content) | |
| { | |
| var element = document.createElement(tagName); | |
| element.appendChild(content); | |
| return element; | |
| } | |
| function wrapInEditableContainer(content) | |
| { | |
| var testContainer = wrapInTag('div', content); | |
| testContainer.contentEditable = true; | |
| return testContainer; | |
| } | |
| function wrapInCSSTag(testContent, cssProperty, cssValue) | |
| { | |
| var wrapperElement = wrapInTag('span', testContent); | |
| wrapperElement.style.setProperty(cssProperty, cssValue, ""); | |
| return wrapperElement; | |
| } | |
| function testCSSRemovalOnToggle(cssProperty, cssValue, toggleCommand) | |
| { | |
| var testContent = document.createTextNode("test"); | |
| var testWrapper = wrapInCSSTag(testContent, cssProperty, cssValue); | |
| var testContainer = wrapInEditableContainer(testWrapper); | |
| if (testToggleToRemove(toggleCommand, testContainer, testContent)) { | |
| testPassed(toggleCommand + " removing " + cssProperty + ": " + cssValue); | |
| } else { | |
| testFailed(toggleCommand + " removing " + cssProperty + ": " + cssValue + " -- " + testContainer.innerHTML); | |
| } | |
| } | |
| function testTagRemovalOnToggle(tagName, toggleCommand) | |
| { | |
| var testContent = document.createTextNode("test"); | |
| var testWrapper = wrapInTag(tagName, testContent); | |
| var testContainer = wrapInEditableContainer(testWrapper); | |
| if (testToggleToRemove(toggleCommand, testContainer, testContent)) { | |
| testPassed(toggleCommand + " removing " + tagName); | |
| } else { | |
| testFailed(toggleCommand + " removing " + tagName + " -- " + testContainer.innerHTML); | |
| } | |
| } | |
| function testBasicToggle(toggleCommand) | |
| { | |
| var testContent = document.createTextNode("test"); | |
| var testContainer = wrapInEditableContainer(testContent); | |
| document.body.appendChild(testContainer); | |
| window.getSelection().selectAllChildren(testContainer); | |
| document.execCommand(toggleCommand, false, null); | |
| document.execCommand(toggleCommand, false, null); | |
| if (testContainer.firstChild == testContent) { | |
| testPassed(toggleCommand + " toggle"); | |
| } else { | |
| testFailed(toggleCommand + " toggle: " + testContainer.innerHTML); | |
| } | |
| document.body.removeChild(testContainer); | |
| } | |
| function runTests(toggleCommand, tagName, cssProperty, cssValue) | |
| { | |
| testBasicToggle(toggleCommand); | |
| testTagRemovalOnToggle(tagName, toggleCommand); | |
| testCSSRemovalOnToggle(cssProperty, cssValue, toggleCommand); | |
| } | |
| runTests("bold", "b", "font-weight", "bold"); | |
| testTagRemovalOnToggle("strong", "bold"); // IE adds "strong" tags for bold, so we should remove them (even though FF doesn't) | |
| runTests("italic", "i", "font-style", "italic"); | |
| testTagRemovalOnToggle("em", "italic"); // IE adds "em" tags for italic, so we should remove them (even though FF doesn't) | |
| runTests("subscript", "sub", "vertical-align", "sub"); | |
| runTests("superscript", "sup", "vertical-align", "super"); | |
| runTests("strikethrough", "strike", "text-decoration", "line-through"); | |
| testTagRemovalOnToggle("s", "strikethrough"); | |
| runTests("underline", "u", "text-decoration", "underline"); | |
| var successfullyParsed = true; | |
| </script> | |
| <script src="../../resources/js-test-post.js"></script> | |
| </body> | |
| </html> |