1 description("This test examines the order of the elements attribute of a form element with form-associated elements with form attribute or witout form attibute.");
3 var container = document.createElement('div');
4 document.body.appendChild(container);
7 debug('- Test for the case where some elements have form attribute but some others not.');
8 container.innerHTML = '<form id=owner>' +
9 ' <input id=input1 name=victim />' +
10 ' <input id=input2 name=victim form=owner />' +
11 ' <input id=input3 name=victim />' +
13 var owner = document.getElementById('owner');
14 var input1 = document.getElementById('input1');
15 var input2 = document.getElementById('input2');
16 var input3 = document.getElementById('input3');
17 shouldBe('owner.elements.length', '3');
18 shouldBe('owner.elements[0]', 'input1');
19 shouldBe('owner.elements[1]', 'input2');
20 shouldBe('owner.elements[2]', 'input3');
22 container.innerHTML = '<form id=owner>' +
23 ' <input id=input1 name=victim form=owner />' +
24 ' <input id=input2 name=victim />' +
25 ' <input id=input3 name=victim form=owner />' +
27 owner = document.getElementById('owner');
28 input1 = document.getElementById('input1');
29 input2 = document.getElementById('input2');
30 input3 = document.getElementById('input3');
31 shouldBe('owner.elements.length', '3');
32 shouldBe('owner.elements[0]', 'input1');
33 shouldBe('owner.elements[1]', 'input2');
34 shouldBe('owner.elements[2]', 'input3');
37 debug('- Test for inserting/removing a form-associated element without form attribute.');
38 container.innerHTML = '<input name=victim id=before form=owner />' +
39 '<form id=owner action= method=GET>' +
40 ' <input name=victim id=inner />' +
42 '<input name=victim id=after form=owner />';
43 owner = document.getElementById('owner');
44 var before = document.getElementById('before');
45 var inner = document.getElementById('inner');
46 var after = document.getElementById('after');
48 var inner2 = document.createElement('input');
49 inner2.name = 'victim';
51 owner.appendChild(inner2);
52 shouldBe('owner.elements.length', '4');
53 shouldBe('owner.elements[0]', 'before');
54 shouldBe('owner.elements[1]', 'inner');
55 shouldBe('owner.elements[2]', 'inner2');
56 shouldBe('owner.elements[3]', 'after');
58 owner.removeChild(inner);
59 owner.insertBefore(inner, inner2);
60 shouldBe('owner.elements.length', '4');
61 shouldBe('owner.elements[0]', 'before');
62 shouldBe('owner.elements[1]', 'inner');
63 shouldBe('owner.elements[2]', 'inner2');
64 shouldBe('owner.elements[3]', 'after');
67 debug('- Test for inserting/removing a form-associated element with form attribute.');
68 var before2 = document.createElement('input');
69 before2.name = 'victim';
70 before2.id = 'before2';
71 before2.setAttribute('form', 'owner');
72 container.insertBefore(before2, owner);
73 var after2 = document.createElement('input');
74 after2.name = 'victim';
76 after2.setAttribute('form', 'owner');
77 container.appendChild(after2);
78 shouldBe('owner.elements.length', '6');
79 shouldBe('owner.elements[0]', 'before');
80 shouldBe('owner.elements[1]', 'before2');
81 shouldBe('owner.elements[2]', 'inner');
82 shouldBe('owner.elements[3]', 'inner2');
83 shouldBe('owner.elements[4]', 'after');
84 shouldBe('owner.elements[5]', 'after2');
86 container.removeChild(before);
87 container.removeChild(after);
88 container.insertBefore(before, before2);
89 container.insertBefore(after, after2);
90 shouldBe('owner.elements.length', '6');
91 shouldBe('owner.elements[0]', 'before');
92 shouldBe('owner.elements[1]', 'before2');
93 shouldBe('owner.elements[2]', 'inner');
94 shouldBe('owner.elements[3]', 'inner2');
95 shouldBe('owner.elements[4]', 'after');
96 shouldBe('owner.elements[5]', 'after2');