<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../../resources/js-test.js"></script>
<title></title>
</head>
<body>
<p id=description></p>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;
var mutations;
function testBasic() {
var observer;
function start() {
debug('Testing takeRecords.');
mutations = null;
div = document.createElement('div');
subDiv = div.appendChild(document.createElement('div'));
subDiv.innerHTML = 'hello, world';
observer = new MutationObserver(function(mutations) {
window.mutations = mutations;
});
observer.observe(div, {attributes: true, characterData: true, subtree: true});
subDiv.setAttribute('foo', 'bar');
subDiv.firstChild.textContent = 'goodbye!';
div.removeChild(subDiv);
mutations = observer.takeRecords();
debug('...records are taken synchronously.');
shouldBe('mutations.length', '2');
shouldBe('mutations[0].type', '"attributes"');
shouldBe('mutations[0].target', 'subDiv');
shouldBe('mutations[0].attributeName', '"foo"');
shouldBe('mutations[0].attributeNamespace', 'null');
shouldBe('mutations[1].type', '"characterData"');
shouldBe('mutations[1].target', 'subDiv.firstChild');
subDiv.setAttribute('foo', 'baz');
setTimeout(finish, 0);
}
function finish() {
debug('...takeRecord took records, but did not clear transient observers');
shouldBe('mutations.length', '1');
shouldBe('mutations[0].type', '"attributes"');
shouldBe('mutations[0].target', 'subDiv');
shouldBe('mutations[0].attributeName', '"foo"');
observer.disconnect();
debug('');
runNextTest();
}
start();
}
var tests = [testBasic];
var testIndex = 0;
function runNextTest() {
if (testIndex < tests.length)
tests[testIndex++]();
else
finishJSTest();
}
description('Testing WebKitMutationObserver.takeRecords');
runNextTest();
</script>
</body>
</html>