This test examines the order of the elements attribute of a form element with form-associated elements with form attribute or witout form attibute.

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



- Test for the case where some elements have form attribute but some others not.
PASS owner.elements.length is 3
PASS owner.elements[0] is input1
PASS owner.elements[1] is input2
PASS owner.elements[2] is input3
PASS owner.elements.length is 3
PASS owner.elements[0] is input1
PASS owner.elements[1] is input2
PASS owner.elements[2] is input3

- Test for inserting/removing a form-associated element without form attribute.
PASS owner.elements.length is 4
PASS owner.elements[0] is before
PASS owner.elements[1] is inner
PASS owner.elements[2] is inner2
PASS owner.elements[3] is after
PASS owner.elements.length is 4
PASS owner.elements[0] is before
PASS owner.elements[1] is inner
PASS owner.elements[2] is inner2
PASS owner.elements[3] is after

- Test for inserting/removing a form-associated element with form attribute.
PASS owner.elements.length is 6
PASS owner.elements[0] is before
PASS owner.elements[1] is before2
PASS owner.elements[2] is inner
PASS owner.elements[3] is inner2
PASS owner.elements[4] is after
PASS owner.elements[5] is after2
PASS owner.elements.length is 6
PASS owner.elements[0] is before
PASS owner.elements[1] is before2
PASS owner.elements[2] is inner
PASS owner.elements[3] is inner2
PASS owner.elements[4] is after
PASS owner.elements[5] is after2
PASS successfullyParsed is true

TEST COMPLETE



