172 lines
6.3 KiB
HTML
172 lines
6.3 KiB
HTML
<html>
|
|
|
|
<head>
|
|
|
|
<script>
|
|
|
|
var modified;
|
|
var oldElement;
|
|
var oldContent;
|
|
var failureCount = 0;
|
|
|
|
function setModifiedFlag()
|
|
{
|
|
modified = true;
|
|
}
|
|
|
|
function print(message)
|
|
{
|
|
var div = document.createElement("div");
|
|
div.appendChild(document.createTextNode(message));
|
|
document.getElementById("results").appendChild(div);
|
|
}
|
|
|
|
function summarizeResult()
|
|
{
|
|
if (!modified)
|
|
return "not modified";
|
|
var parent = document.getElementById("parent");
|
|
if (parent.firstChild !== oldElement)
|
|
return "replaced";
|
|
if (oldElement.firstChild !== oldContent)
|
|
return "modified";
|
|
return "modified, with same first child";
|
|
}
|
|
|
|
function runTest(markup, propertyName, newValue, expectedResult)
|
|
{
|
|
var parent = document.getElementById("parent");
|
|
parent.innerHTML = "<div>" + markup + "</div>";
|
|
modified = false;
|
|
oldElement = parent.firstChild;
|
|
oldContent = parent.firstChild.firstChild;
|
|
parent.firstChild[propertyName] = newValue;
|
|
var resultValue;
|
|
if (propertyName == "outerHTML")
|
|
resultValue = parent.innerHTML;
|
|
else
|
|
resultValue = parent.firstChild[propertyName];
|
|
var result = resultValue == newValue ? summarizeResult() : "modified incorrectly";
|
|
if (propertyName == "outerHTML")
|
|
markup = "<div>" + markup + "</div>";
|
|
testName = 'starting with "' + markup + '", setting ' + propertyName + ' to "' + newValue + '"';
|
|
if (result == expectedResult)
|
|
print("PASS: " + testName);
|
|
else {
|
|
print("FAIL: " + testName + " -- " + result + ", but expected " + expectedResult);
|
|
++failureCount;
|
|
}
|
|
if (result == "modified incorrectly")
|
|
print("value was " + resultValue);
|
|
}
|
|
|
|
function test()
|
|
{
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
var parent = document.getElementById("parent");
|
|
parent.addEventListener("DOMSubtreeModified", setModifiedFlag, true);
|
|
|
|
runTest('', 'innerHTML', '', 'not modified');
|
|
runTest('', 'innerHTML', 'text', 'modified');
|
|
runTest('', 'innerHTML', '<a></a>', 'modified');
|
|
runTest('', 'innerHTML', '<a></a><b></b>', 'modified');
|
|
|
|
runTest('text', 'innerHTML', '', 'modified');
|
|
runTest('text', 'innerHTML', 'different text', 'modified');
|
|
runTest('text', 'innerHTML', 'text', 'modified');
|
|
runTest('text', 'innerHTML', '<a></a>', 'modified');
|
|
runTest('text', 'innerHTML', '<a></a><b></b>', 'modified');
|
|
|
|
runTest('<a></a>', 'innerHTML', '', 'modified');
|
|
runTest('<a></a>', 'innerHTML', 'text', 'modified');
|
|
runTest('<a></a>', 'innerHTML', '<a></a>', 'modified');
|
|
runTest('<a></a>', 'innerHTML', '<a href=""></a>', 'modified');
|
|
runTest('<a></a>', 'innerHTML', '<a>text</a>', 'modified');
|
|
runTest('<a></a>', 'innerHTML', '<a></a><b></b>', 'modified');
|
|
|
|
runTest('<a>text</a>', 'innerHTML', '<a>text</a>', 'modified');
|
|
runTest('<a>text</a>', 'innerHTML', '<a>different text</a>', 'modified');
|
|
|
|
runTest('<a href="b"></a>', 'innerHTML', '<a name="c" href="b"></a>', 'modified');
|
|
runTest('<a href="b" name="c"></a>', 'innerHTML', '<a href="b" name="c"></a>', 'modified');
|
|
runTest('<a href="b" name="c"></a>', 'innerHTML', '<a name="c" href="b"></a>', 'modified');
|
|
|
|
runTest('', 'innerText', '', 'not modified');
|
|
runTest('', 'innerText', 'text', 'modified');
|
|
runTest('', 'innerText', '<a></a>', 'modified');
|
|
runTest('', 'innerText', '<a></a><b></b>', 'modified');
|
|
|
|
runTest('text', 'innerText', '', 'modified');
|
|
runTest('text', 'innerText', 'different text', 'modified');
|
|
runTest('text', 'innerText', 'text', 'modified');
|
|
|
|
runTest('<a></a>', 'innerText', '', 'modified');
|
|
runTest('<a></a>', 'innerText', 'text', 'modified');
|
|
|
|
runTest('', 'outerHTML', '', 'replaced');
|
|
runTest('', 'outerHTML', 'text', 'replaced');
|
|
runTest('', 'outerHTML', '<a></a>', 'replaced');
|
|
runTest('', 'outerHTML', '<a></a><b></b>', 'replaced');
|
|
runTest('', 'outerHTML', '<div></div>', 'replaced');
|
|
runTest('', 'outerHTML', '<div>text</div>', 'replaced');
|
|
runTest('', 'outerHTML', '<div><a></a></div>', 'replaced');
|
|
runTest('', 'outerHTML', '<div><a></a><b></b></div>', 'replaced');
|
|
|
|
runTest('text', 'outerHTML', '', 'replaced');
|
|
runTest('text', 'outerHTML', 'text', 'replaced');
|
|
runTest('text', 'outerHTML', '<a></a>', 'replaced');
|
|
runTest('text', 'outerHTML', '<a></a><b></b>', 'replaced');
|
|
runTest('text', 'outerHTML', '<div></div>', 'replaced');
|
|
runTest('text', 'outerHTML', '<div>text</div>', 'replaced');
|
|
runTest('text', 'outerHTML', '<div>different text</div>', 'replaced');
|
|
runTest('text', 'outerHTML', '<div><a></a></div>', 'replaced');
|
|
runTest('text', 'outerHTML', '<div><a></a><b></b></div>', 'replaced');
|
|
|
|
runTest('<a></a>', 'outerHTML', '', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', 'text', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<a></a>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<a href=""></a>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<a>text</a>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<a></a><b></b>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<div></div>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<div>text</div>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<div>different text</div>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<div><a></a></div>', 'replaced');
|
|
runTest('<a></a>', 'outerHTML', '<div><a></a><b></b></div>', 'replaced');
|
|
|
|
runTest('<a>text</a>', 'outerHTML', '<div><a>text</a></div>', 'replaced');
|
|
runTest('<a>text</a>', 'outerHTML', '<div><a>different text</a></div>', 'replaced');
|
|
|
|
runTest('<a href="b"></a>', 'outerHTML', '<div><a name="c" href="b"></a></div>', 'replaced');
|
|
runTest('<a href="b" name="c"></a>', 'outerHTML', '<div><a href="b" name="c"></a></div>', 'replaced');
|
|
runTest('<a href="b" name="c"></a>', 'outerHTML', '<div><a name="c" href="b"></a></div>', 'replaced');
|
|
|
|
parent.outerHTML = "";
|
|
|
|
if (failureCount == 0)
|
|
print("ALL TESTS PASSED");
|
|
else
|
|
print(failureCount + " TESTS FAILED");
|
|
}
|
|
|
|
</script>
|
|
|
|
</head>
|
|
|
|
<body onload="test()">
|
|
|
|
<p>
|
|
This tests calls to setInnerHTML, setInnerText, and setOuterHTML to see what kind of DOM modifications they cause.
|
|
The calls are optimized to not do any work in cases where the DOM would not change at all.
|
|
</p>
|
|
|
|
<p id="results"></p>
|
|
|
|
<div id="parent"></div>
|
|
|
|
</body>
|
|
|
|
</html>
|