LayoutTests:
[WebKit-https.git] / LayoutTests / fast / forms / old-names.html
1 <html>
2 <head>
3 <link rel="stylesheet" type="text/css" href="../js/resources/js-test-style.css">
4 <script src="../js/resources/js-test-pre.js"></script>
5 <script>
6 function runTest()
7 {
8     description("This tests accessing form elements by name. "
9         + "IE only lets you look up names under the first name the element had and "
10         + "does not respond to name changes. Firefox remembers every name item has been "
11         + "accessed with, but forgets items that have not been accessed. "
12         + "This test has been written to expect the Firefox behavior.");
13
14     form = document.getElementById('form');
15     a = document.getElementById('a');
16     b = document.getElementById('b');
17
18     shouldBe('form.length', '2');
19     shouldBe('form.original', 'a');
20     shouldBe('form.originalB', 'b');
21     shouldBe('form.second', 'undefined');
22     shouldBe('form.third', 'undefined');
23     shouldBe('form.elements.original', 'a');
24     shouldBe('form.elements.originalB', 'b');
25     shouldBe('form.elements.second', 'undefined');
26     shouldBe('form.elements.third', 'undefined');
27
28     debug('');   
29     debug("change the form item a's name to thisWillBeRemembered");
30     debug('');   
31     a.name="thisWillBeRemembered";
32     debug("get the variable value through form element");
33     shouldBe('form.thisWillBeRemembered', 'a');
34     debug('');   
35     debug("now change the form item a's name to thisWillBeRememberedToo");
36     debug("access it in boolean context");
37     a.name="thisWillBeRememberedToo";
38     debug('');   
39     if (form.thisWillBeRememberedToo)
40         debug('accessed form.thisWillBeRememberedToo');
41     debug('');   
42     debug("now change the form item a's name to thisWillBeForgotten");
43     debug('');   
44     a.name="thisWillBeForgotten";
45     debug("get the variable value through collection");
46     shouldBe('form.elements.thisWillBeForgotten', 'a');
47     debug('');   
48     debug("now change the form item a's name to thisWillBeForgottenToo, but don't access it afterwards");
49     a.name="thisWillBeForgottenToo";
50         
51     debug('');    
52     debug("now change the form item a's name to second");
53     debug('');
54     a.name="second";
55     
56     shouldBe('form.length', '2');
57     shouldBe('form.original', 'a');
58     shouldBe('form.originalB', 'b');
59     shouldBe('form.second', 'a');
60     shouldBe('form.third', 'undefined');
61     shouldBe('form.elements.original', 'undefined');
62     shouldBe('form.elements.originalB', 'b');
63     shouldBe('form.elements.second', 'a');
64     shouldBe('form.elements.third', 'undefined');
65
66     debug('');
67     debug("now change the form item a's name to third");
68     debug('');
69
70     a.name="third";
71
72     shouldBe('form.length', '2');
73     shouldBe('form.original', 'a');
74     shouldBe('form.originalB', 'b');
75     shouldBe('form.second', 'a');
76     shouldBe('form.third', 'a');
77     shouldBe('form.elements.original', 'undefined');
78     shouldBe('form.elements.originalB', 'b');
79     shouldBe('form.elements.second', 'undefined');
80     shouldBe('form.elements.third', 'a');
81
82     debug('');
83     debug("now change form item b's name to second");
84     debug('');
85
86     b.name="second";
87
88     shouldBe('form.length', '2');
89     shouldBe('form.original', 'a');
90     shouldBe('form.originalB', 'b');
91     shouldBe('form.second', 'b');
92     shouldBe('form.elements.original', 'undefined');
93     shouldBe('form.elements.originalB', 'undefined');
94     shouldBe('form.elements.second', 'b');
95
96     debug('');
97     debug("now change a form item b's name to third");
98     debug('');
99
100     form.originalB.name="third";
101
102     shouldBe('form.length', '2');
103     shouldBe('form.original', 'a');
104     shouldBe('form.originalB', 'b');
105     shouldBe('form.second', 'b');
106     shouldBe('form.third.length', '2');
107     shouldBe('form.third[0]', 'a');
108     shouldBe('form.third[1]', 'b');
109     shouldBe('form.elements.original', 'undefined');
110     shouldBe('form.elements.originalB', 'undefined');
111     shouldBe('form.elements.second', 'undefined');
112     shouldBe('form.elements.third.length', '2');
113     shouldBe('form.elements.third[0]', 'a');
114     shouldBe('form.elements.third[1]', 'b');
115     
116     debug('');
117     debug("now change a form item b's name to fourth");
118     debug('');
119
120     form.originalB.name="fourth";
121     
122     shouldBe('form.third', 'a');
123     shouldBe('form.third.length', 'undefined');
124     shouldBe('form.elements.third', 'a');
125     shouldBe('form.elements.third.length', 'undefined');
126
127     debug('');
128     debug("now remove element a");
129     debug('');
130
131     form.removeChild(a);
132
133     shouldBe('form.length', '1');
134     shouldBe('form.original', 'a');
135     shouldBe('form.originalB', 'b');
136     shouldBe('form.second', 'b');
137     shouldBe('form.third', 'a');
138     shouldBe('form.fourth', 'b');
139     shouldBe('form.elements.original', 'undefined');
140     shouldBe('form.elements.originalB', 'undefined');
141     shouldBe('form.elements.second', 'undefined');
142     shouldBe('form.elements.third', 'undefined');
143     shouldBe('form.elements.fourth', 'b');
144  
145     debug('');
146     debug("check we still remember names we should");
147     debug('');
148
149     shouldBe('form.thisWillBeForgotten', 'undefined');
150     shouldBe('form.thisWillBeForgottenToo', 'undefined');
151     shouldBe('form.thisWillBeRemembered', 'a');
152     shouldBe('form.thisWillBeRememberedToo', 'a');
153     debug('');
154     successfullyParsed = true;
155 }
156 </script>
157 </head>
158 <body>
159 <form id='form'>
160 <input type='hidden' id='a' name='original'>
161 <input type='hidden' id='b' name='originalB'>
162 </form>
163 <p id="description"></p>
164 <div id="console"></div>
165 <script>runTest();</script>
166 <script src="../js/resources/js-test-post.js"></script>
167 </body>
168 </html>