This tests moving a node with labels property from one document to another. The labels node list should be updated when labels are modified in the new document.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


The input element initially have two label elements #label1 and #label2.
PASS labels = input.labels; labels.length is 2
PASS label0 = labels[0]; label1 = labels[1]; iframe.contentDocument.body.appendChild(form); labels.length; label1.parentNode.removeChild(label1); labels.length is 1
PASS labels[0] is label0
PASS label0.parentNode.appendChild(label1); labels.length is 2
PASS labels[0] is label0
PASS labels[1] is label1

