f8c5c1ef07db53401cb5d9c89954cf44a719a3db
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / fast / dom / element-attribute-js-null.html
1 <html>
2 <head>
3     <style type="text/css">
4         .pass { color: green; }
5         .fail { color: red; }
6     </style>
7     <script>
8         function printOut(msg)
9         {
10             var console = document.getElementById("console");
11             var span = document.createElement('span');
12             span.innerHTML = msg + '<br>';
13             console.appendChild(span);
14         }
15
16         function resultStringifier(result)
17         {
18             if (result === "")
19                 return "<b>the empty string</b>";
20             else if (result === null)
21                 return "<b>null</b>";
22             else if (result === undefined)
23                 return "<b>undefined</b>";
24             return "the string '" + result + "'";
25         }
26
27         function resolve(url)
28         {
29             var a = document.createElement('a');
30             a.href = url;
31             return a.href;
32         }
33
34         function nullTestElementAttribute(elementType, element, attr, expected, isUrl)
35         {
36             var exceptionThrown;
37             try {
38                 element[attr] = null;
39             } catch (ec) {
40                 exceptionThrown = ec;
41             }
42             var result;
43             if (exceptionThrown) {
44                 if (expected === 'exception')
45                     result = "<span class='pass'>TEST SUCCEEDED:</span> Exception (" + exceptionThrown + ") was thrown as expected.";
46                 else
47                     result = "<span class='fail'>TEST FAILED:</span> An exception was thrown unexpectedly.";
48             } else {
49                 if (expected === 'exception')
50                     result = "<span class='fail'>TEST FAILED:</span> An exception should have been thrown.";
51                 else if (isUrl && element[attr] === resolve(expected))
52                     result = "<span class='pass'>TEST SUCCEEDED:</span> The value was " + resultStringifier(expected) + " resolved as a URL.";
53                 else if (!isUrl && element[attr] === expected)
54                     result = "<span class='pass'>TEST SUCCEEDED:</span> The value was " + resultStringifier(expected) + ".";
55                 else
56                     result = "<span class='fail'>TEST FAILED:</span> The value should have been " + resultStringifier(expected) + " but was " + resultStringifier(element[attr]) + ".";
57             }
58             result += " [tested " + elementType + "." + attr + "]";
59             printOut(result);
60         }
61
62         function runTests()
63         {
64             if (window.testRunner)
65                 testRunner.dumpAsText();
66
67             // Others to test:
68             //  Core DOM
69             //    Attr.value (expected: null)
70             //    CharacterData.data
71             //    ProcessingInstruction.data
72             //  Functions
73
74             var listing = [
75                 {
76                     type: 'Node',
77                     elementToUse: document.createElement('div'),
78                     attributes: [
79                         {name: 'nodeValue', expectedNull: null},
80                          // 'prefix' only works because this is an HTMLElement type node, if it were an
81                          // XML node (created using createElementNS()) this would throw an exception. We
82                          // should test this further as Firefox has a different behavior.
83                         {name: 'prefix', expectedNull: null},
84                         {name: 'textContent', expectedNull: ''}
85                     ]
86                 },
87                 {
88                     type: 'Element',
89                     elementToUse: document.createElementNS('http://example.com/', 'example'),
90                     attributes: [
91                         {name: 'id', expectedNull: 'null'},
92                         {name: 'className', expectedNull: 'null'},
93                         {name: 'innerHTML', expectedNull: ''},
94                         {name: 'outerHTML', expectedNull: 'exception'}
95                     ]
96                 },
97                 {
98                     type: 'HTMLElement',
99                     elementToUse: document.createElement('abbr'),
100                     attributes: [
101                         {name: 'accessKey', expectedNull: 'null'},
102                         {name: 'title', expectedNull: 'null'},
103                         {name: 'lang', expectedNull: 'null'},
104                         {name: 'dir', expectedNull: ''},
105                         {name: 'innerText', expectedNull: ''},
106                         {name: 'outerText', expectedNull: 'exception'},
107                         {name: 'contentEditable', expectedNull: 'exception'}
108                     ]
109                 },
110                 {
111                     type: 'HTMLAnchorElement',
112                     elementToUse: document.createElement('a'),
113                     attributes: [
114                         {name: 'charset', expectedNull: 'null'},
115                         {name: 'coords', expectedNull: 'null'},
116                         {name: 'download', expectedNull: 'null'},
117                         {name: 'href', expectedNull: 'null', isUrl: true},
118                         {name: 'hreflang', expectedNull: 'null'},
119                         {name: 'name', expectedNull: 'null'},
120                         {name: 'ping', expectedNull: 'null'},
121                         {name: 'rel', expectedNull: 'null'},
122                         {name: 'rev', expectedNull: 'null'},
123                         {name: 'shape', expectedNull: 'null'},
124                         {name: 'target', expectedNull: 'null'},
125                         {name: 'type', expectedNull: 'null'}
126                     ]
127                 },
128                 {
129                     type: 'HTMLAppletElement',
130                     elementToUse: document.createElement('applet'),
131                     attributes: [
132                         {name: 'align', expectedNull: 'null'},
133                         {name: 'alt', expectedNull: 'null'},
134                         {name: 'archive', expectedNull: 'null'},
135                         {name: 'code', expectedNull: 'null'},
136                         {name: 'codeBase', expectedNull: 'null', isUrl: true},
137                         {name: 'height', expectedNull: 'null'},
138                         {name: 'name', expectedNull: 'null'},
139                         {name: 'object', expectedNull: 'null', isUrl: true},
140                         {name: 'width', expectedNull: 'null'}
141                     ]
142                 },
143                 {
144                     type: 'HTMLAreaElement',
145                     elementToUse: document.createElement('area'),
146                     attributes: [
147                         {name: 'alt', expectedNull: 'null'},
148                         {name: 'coords', expectedNull: 'null'},
149                         {name: 'href', expectedNull: 'null', isUrl: true},
150                         {name: 'ping', expectedNull: 'null'},
151                         {name: 'shape', expectedNull: 'null'},
152                         {name: 'target', expectedNull: 'null'}
153                     ]
154                 },
155                 {
156                     type: 'HTMLAudioElement',
157                     elementToUse: document.createElement('audio'),
158                     attributes: [
159                         {name: 'mediaGroup', expectedNull: 'null'},
160                         {name: 'preload', expectedNull: 'auto'},
161                         {name: 'src', expectedNull: 'null', isUrl: true}
162                     ]
163                 },
164                 {
165                     type: 'HTMLBaseElement',
166                     elementToUse: document.createElement('base'),
167                     attributes: [
168                         {name: 'href', expectedNull: 'null', isUrl: true},
169                         {name: 'target', expectedNull: 'null'}
170                     ]
171                 },
172                 {
173                     type: 'HTMLBlockquoteElement',
174                     elementToUse: document.createElement('blockquote'),
175                     attributes: [
176                         {name: 'cite', expectedNull: 'null', isUrl: true}
177                     ]
178                 },
179                 {
180                     type: 'HTMLBodyElement',
181                     elementToUse: document.createElement('body'),
182                     attributes: [
183                         {name: 'aLink', expectedNull: ''},
184                         {name: 'background', expectedNull: 'null'},
185                         {name: 'bgColor', expectedNull: ''},
186                         {name: 'link', expectedNull: ''},
187                         {name: 'text', expectedNull: ''},
188                         {name: 'vLink', expectedNull: ''}
189                     ]
190                 },
191                 {
192                     type: 'HTMLBRElement',
193                     elementToUse: document.createElement('br'),
194                     attributes: [
195                         {name: 'clear', expectedNull: 'null'}
196                     ]
197                 },
198                 {
199                     type: 'HTMLButtonElement',
200                     elementToUse: document.createElement('button'),
201                     attributes: [
202                         {name: 'formAction', expectedNull: 'null', isUrl: true},
203                         {name: 'formEnctype', expectedNull: 'application/x-www-form-urlencoded'},
204                         {name: 'formMethod', expectedNull: 'get'},
205                         {name: 'formTarget', expectedNull: 'null'},
206                         {name: 'name', expectedNull: 'null'},
207                         {name: 'type', expectedNull: 'submit'},
208                         {name: 'value', expectedNull: 'null'}
209                     ]
210                 },
211                 {
212                     type: 'HTMLDivElement',
213                     elementToUse: document.createElement('div'),
214                     attributes: [
215                         {name: 'align', expectedNull: 'null'}
216                     ]
217                 },
218
219                 // HTMLDListElement
220                 // NONE
221
222                 {
223                     type: 'HTMLEmbedElement',
224                     elementToUse: document.createElement('embed'),
225                     attributes: [
226                         {name: 'align', expectedNull: 'null'},
227                         {name: 'height', expectedNull: 'null'},
228                         {name: 'name', expectedNull: 'null'},
229                         {name: 'src', expectedNull: 'null', isUrl: true},
230                         {name: 'type', expectedNull: 'null'},
231                         {name: 'width', expectedNull: 'null'}
232                     ]
233                 },
234                 {
235                     type: 'HTMLFieldSetElement',
236                     elementToUse: document.createElement('fieldset'),
237                     attributes: [
238                         {name: 'name', expectedNull: 'null'}
239                     ]
240                 },
241                 {
242                     type: 'HTMLFontElement',
243                     elementToUse: document.createElement('font'),
244                     attributes: [
245                         {name: 'color', expectedNull: ''},
246                         {name: 'face', expectedNull: 'null'},
247                         {name: 'size', expectedNull: 'null'}
248                     ]
249                 },
250                 {
251                     type: 'HTMLFormElement',
252                     elementToUse: document.createElement('form'),
253                     attributes: [
254                         {name: 'acceptCharset', expectedNull: 'null'},
255                         {name: 'action', expectedNull: 'null', isUrl: true},
256                         {name: 'autocomplete', expectedNull: 'on'},
257                         {name: 'enctype', expectedNull: 'application/x-www-form-urlencoded'},
258                         {name: 'encoding', expectedNull: 'application/x-www-form-urlencoded'},
259                         {name: 'method', expectedNull: 'get'},
260                         {name: 'name', expectedNull: 'null'},
261                         {name: 'target', expectedNull: 'null'}
262                     ]
263                 },
264                 {
265                     type: 'HTMLFrameElement',
266                     elementToUse: document.createElement('frame'),
267                     attributes: [
268                         {name: 'frameBorder', expectedNull: 'null'},
269                         {name: 'longDesc', expectedNull: 'null', isUrl: true},
270                         {name: 'marginHeight', expectedNull: ''},
271                         {name: 'marginWidth', expectedNull: ''},
272                         {name: 'name', expectedNull: 'null'},
273                         {name: 'scrolling', expectedNull: 'null'},
274                         {name: 'src', expectedNull: 'null', isUrl: true}
275                     ]
276                 },
277                 {
278                     type: 'HTMLFrameSetElement',
279                     elementToUse: document.createElement('frameset'),
280                     attributes: [
281                         {name: 'cols', expectedNull: 'null'},
282                         {name: 'rows', expectedNull: 'null'}
283                     ]
284                 },
285                 {
286                     type: 'HTMLHeadElement',
287                     elementToUse: document.createElement('head'),
288                     attributes: [
289                         {name: 'profile', expectedNull: ''}
290                     ]
291                 },
292                 {
293                     type: 'HTMLHeadingElement',
294                     // no need to test h2-h6
295                     elementToUse: document.createElement('h1'),
296                     attributes: [
297                         {name: 'align', expectedNull: 'null'}
298                     ]
299                 },
300                 {
301                     type: 'HTMLHRElement',
302                     elementToUse: document.createElement('hr'),
303                     attributes: [
304                         {name: 'align', expectedNull: 'null'},
305                         {name: 'color', expectedNull: 'null'},
306                         {name: 'size', expectedNull: 'null'},
307                         {name: 'width', expectedNull: 'null'}
308                     ]
309                 },
310                 {
311                     type: 'HTMLHtmlElement',
312                     elementToUse: document.createElement('html'),
313                     attributes: [
314                         {name: 'version', expectedNull: 'null'}
315                     ]
316                 },
317                 {
318                     type: 'HTMLIFrameElement',
319                     elementToUse: document.createElement('iframe'),
320                     attributes: [
321                         {name: 'align', expectedNull: 'null'},
322                         {name: 'frameBorder', expectedNull: 'null'},
323                         {name: 'height', expectedNull: 'null'},
324                         {name: 'longDesc', expectedNull: 'null', isUrl: true},
325                         {name: 'marginHeight', expectedNull: ''},
326                         {name: 'marginWidth', expectedNull: ''},
327                         {name: 'name', expectedNull: 'null'},
328                         {name: 'scrolling', expectedNull: 'null'},
329                         {name: 'src', expectedNull: 'null', isUrl: true},
330                         {name: 'srcdoc', expectedNull: 'null'},
331                         {name: 'width', expectedNull: 'null'}
332                     ]
333                 },
334                 {
335                     type: 'HTMLImageElement',
336                     elementToUse: document.createElement('img'),
337                     attributes: [
338                         {name: 'align', expectedNull: 'null'},
339                         {name: 'alt', expectedNull: 'null'},
340                         {name: 'border', expectedNull: ''},
341                         {name: 'crossOrigin', expectedNull: null},
342                         {name: 'longDesc', expectedNull: 'null', isUrl: true},
343                         {name: 'lowsrc', expectedNull: 'null', isUrl: true},
344                         {name: 'name', expectedNull: 'null'},
345                         {name: 'src', expectedNull: 'null', isUrl: true},
346                         {name: 'srcset', expectedNull: 'null'},
347                         {name: 'useMap', expectedNull: 'null'}
348                     ]
349                 },
350                 {
351                     type: 'HTMLInputElement',
352                     elementToUse: document.createElement('input'),
353                     attributes: [
354                         {name: 'accept', expectedNull: 'null'},
355                         {name: 'align', expectedNull: 'null'},
356                         {name: 'alt', expectedNull: 'null'},
357                         {name: 'autocomplete', expectedNull: 'null'},
358                         {name: 'defaultValue', expectedNull: 'null'},
359                         {name: 'dirName', expectedNull: 'null'},
360                         {name: 'formAction', expectedNull: 'null', isUrl: true},
361                         {name: 'formEnctype', expectedNull: 'application/x-www-form-urlencoded'},
362                         {name: 'formMethod', expectedNull: 'get'},
363                         {name: 'formTarget', expectedNull: 'null'},
364                         {name: 'max', expectedNull: 'null'},
365                         {name: 'min', expectedNull: 'null'},
366                         {name: 'name', expectedNull: 'null'},
367                         {name: 'pattern', expectedNull: 'null'},
368                         {name: 'placeholder', expectedNull: 'null'},
369                         {name: 'src', expectedNull: 'null', isUrl: true},
370                         {name: 'step', expectedNull: 'null'},
371                         {name: 'type', expectedNull: 'text'},
372                         {name: 'useMap', expectedNull: 'null'}
373                     ]
374                 },
375                 // [TreatNullAs=NullString] is not identical to [TreatNullAs=EmptyString] because
376                 // null and empty string can be distinguished. A side-effect is that setting
377                 // HTMLInputElement.value to null does clear the old value. This would be fixed by
378                 // using [TreatNullAs=EmptyString], but until then test value separately to avoid
379                 // interference from the defaultValue test.
380                 {
381                     type: 'HTMLInputElement',
382                     elementToUse: document.createElement('input'),
383                     attributes: [
384                         {name: 'value', expectedNull: ''}
385                     ]
386                 },
387                 {
388                     type: 'HTMLKeygenElement',
389                     elementToUse: document.createElement('keygen'),
390                     attributes: [
391                         {name: 'challenge', expectedNull: 'null'},
392                         {name: 'keytype', expectedNull: ''},
393                         {name: 'name', expectedNull: 'null'}
394                     ]
395                 },
396                 {
397                     type: 'HTMLLabelElement',
398                     elementToUse: document.createElement('label'),
399                     attributes: [
400                         {name: 'htmlFor', expectedNull: 'null'}
401                     ]
402                 },
403                 {
404                     type: 'HTMLLegendElement',
405                     elementToUse: document.createElement('legend'),
406                     attributes: [
407                         {name: 'align', expectedNull: 'null'}
408                     ]
409                 },
410                 {
411                     type: 'HTMLLIElement',
412                     elementToUse: document.createElement('li'),
413                     attributes: [
414                         {name: 'type', expectedNull: 'null'}
415                     ]
416                 },
417                 {
418                     type: 'HTMLLinkElement',
419                     elementToUse: document.createElement('link'),
420                     attributes: [
421                         {name: 'charset', expectedNull: 'null'},
422                         {name: 'href', expectedNull: 'null', isUrl: true},
423                         {name: 'hreflang', expectedNull: 'null'},
424                         {name: 'media', expectedNull: 'null'},
425                         {name: 'rel', expectedNull: 'null'},
426                         {name: 'rev', expectedNull: 'null'},
427                         {name: 'target', expectedNull: 'null'},
428                         {name: 'type', expectedNull: 'null'}
429                     ]
430                 },
431                 {
432                     type: 'HTMLMapElement',
433                     elementToUse: document.createElement('map'),
434                     attributes: [
435                         {name: 'name', expectedNull: 'null'}
436                     ]
437                 },
438                 {
439                     type: 'HTMLMarqueeElement',
440                     elementToUse: document.createElement('marquee'),
441                     attributes: [
442                         {name: 'behavior', expectedNull: 'null'},
443                         {name: 'bgColor', expectedNull: 'null'},
444                         {name: 'direction', expectedNull: 'null'},
445                         {name: 'height', expectedNull: 'null'},
446                         {name: 'width', expectedNull: 'null'}
447                     ]
448                 },
449
450                 // HTMLMenuElement
451                 // NONE
452
453                 {
454                     type: 'HTMLMetaElement',
455                     elementToUse: document.createElement('meta'),
456                     attributes: [
457                         {name: 'content', expectedNull: 'null'},
458                         {name: 'httpEquiv', expectedNull: 'null'},
459                         {name: 'name', expectedNull: 'null'},
460                         {name: 'scheme', expectedNull: 'null'}
461                     ]
462                 },
463                 {
464                     type: 'HTMLModElement',
465                     elementToUse: document.createElement('ins'), // same as 'del'
466                     attributes: [
467                         {name: 'cite', expectedNull: 'null', isUrl: true},
468                         {name: 'dateTime', expectedNull: 'null'}
469                     ]
470                 },
471                 {
472                     type: 'HTMLObjectElement',
473                     elementToUse: document.createElement('object'),
474                     attributes: [
475                         {name: 'code', expectedNull: 'null'},
476                         {name: 'align', expectedNull: 'null'},
477                         {name: 'archive', expectedNull: 'null'},
478                         {name: 'border', expectedNull: ''},
479                         {name: 'codeBase', expectedNull: 'null', isUrl: true},
480                         {name: 'codeType', expectedNull: 'null'},
481                         {name: 'data', expectedNull: 'null', isUrl: true},
482                         {name: 'height', expectedNull: 'null'},
483                         {name: 'name', expectedNull: 'null'},
484                         {name: 'standby', expectedNull: 'null'},
485                         {name: 'type', expectedNull: 'null'},
486                         {name: 'useMap', expectedNull: 'null'},
487                         {name: 'width', expectedNull: 'null'}
488                     ]
489                 },
490                 {
491                     type: 'HTMLOListElement',
492                     elementToUse: document.createElement('ol'),
493                     attributes: [
494                         {name: 'type', expectedNull: 'null'}
495                     ]
496                 },
497                 {
498                     type: 'HTMLOptGroupElement',
499                     elementToUse: document.createElement('optgroup'),
500                     attributes: [
501                         {name: 'label', expectedNull: 'null'}
502                     ]
503                 },
504                 {
505                     type: 'HTMLOptionElement',
506                     elementToUse: document.createElement('option'),
507                     attributes: [
508                         {name: 'text', expectedNull: 'null'},
509                         {name: 'label', expectedNull: 'null'},
510                         {name: 'value', expectedNull: 'null'}
511                     ]
512                 },
513                 {
514                     type: 'HTMLOutputElement',
515                     elementToUse: document.createElement('output'),
516                     attributes: [
517                         {name: 'name', expectedNull: 'null'},
518                         {name: 'defaultValue', expectedNull: 'null'},
519                         {name: 'value', expectedNull: 'null'}
520                     ]
521                 },
522                 {
523                     type: 'HTMLParagraphElement',
524                     elementToUse: document.createElement('p'),
525                     attributes: [
526                         {name: 'align', expectedNull: 'null'}
527                     ]
528                 },
529                 {
530                     type: 'HTMLParamElement',
531                     elementToUse: document.createElement('param'),
532                     attributes: [
533                         {name: 'name', expectedNull: 'null'},
534                         {name: 'type', expectedNull: 'null'},
535                         {name: 'value', expectedNull: 'null'},
536                         {name: 'valueType', expectedNull: 'null'}
537                     ]
538                 },
539
540                 // HTMLPreElement
541                 // NONE
542
543                 {
544                     type: 'HTMLQuoteElement',
545                     elementToUse: document.createElement('q'),
546                     attributes: [
547                         {name: 'cite', expectedNull: 'null', isUrl:true}
548                     ]
549                 },
550                 {
551                     type: 'HTMLScriptElement',
552                     elementToUse: document.createElement('script'),
553                     attributes: [
554                         {name: 'text', expectedNull: 'null'},
555                         {name: 'htmlFor', expectedNull: 'null'},
556                         {name: 'event', expectedNull: 'null'},
557                         {name: 'charset', expectedNull: 'null'},
558                         {name: 'src', expectedNull: 'null', isUrl: true},
559                         {name: 'type', expectedNull: 'null'},
560                         {name: 'crossOrigin', expectedNull: null},
561                         {name: 'nonce', expectedNull: 'null'}
562                     ]
563                 },
564                 {
565                     type: 'HTMLSelectElement',
566                     elementToUse: document.createElement('select'),
567                     attributes: [
568                         {name: 'value', expectedNull: ''},
569                         {name: 'name', expectedNull: 'null'}
570                     ]
571                 },
572                 {
573                     type: 'HTMLSourceElement',
574                     elementToUse: document.createElement('source'),
575                     attributes: [
576                         {name: 'src', expectedNull: 'null', isUrl: true},
577                         {name: 'type', expectedNull: 'null'}
578                     ]
579                 },
580                 {
581                     type: 'HTMLStyleElement',
582                     elementToUse: document.createElement('style'),
583                     attributes: [
584                         {name: 'media', expectedNull: 'null'},
585                         {name: 'type', expectedNull: 'null'}
586                     ]
587                 },
588                 {
589                     type: 'HTMLTableCaptionElement',
590                     elementToUse: document.createElement('caption'),
591                     attributes: [
592                         {name: 'align', expectedNull: 'null'}
593                     ]
594                 },
595                 {
596                     type: 'HTMLTableCellElement',
597                     elementToUse: document.createElement('td'),
598                     attributes: [
599                         {name: 'abbr', expectedNull: 'null'},
600                         {name: 'align', expectedNull: 'null'},
601                         {name: 'axis', expectedNull: 'null'},
602                         {name: 'bgColor', expectedNull: ''},
603                         {name: 'ch', expectedNull: 'null'},
604                         {name: 'chOff', expectedNull: 'null'},
605                         {name: 'headers', expectedNull: ''},
606                         {name: 'height', expectedNull: 'null'},
607                         {name: 'scope', expectedNull: 'null'},
608                         {name: 'vAlign', expectedNull: 'null'},
609                         {name: 'width', expectedNull: 'null'}
610                     ]
611                 },
612                 {
613                     type: 'HTMLTableColElement',
614                     elementToUse: document.createElement('col'),
615                     attributes: [
616                         {name: 'align', expectedNull: 'null'},
617                         {name: 'ch', expectedNull: 'null'},
618                         {name: 'chOff', expectedNull: 'null'},
619                         {name: 'vAlign', expectedNull: 'null'},
620                         {name: 'width', expectedNull: 'null'}
621                     ]
622                 },
623                 {
624                     type: 'HTMLTableElement',
625                     elementToUse: document.createElement('table'),
626                     attributes: [
627                         {name: 'align', expectedNull: 'null'},
628                         {name: 'bgColor', expectedNull: ''},
629                         {name: 'border', expectedNull: 'null'},
630                         {name: 'cellPadding', expectedNull: ''},
631                         {name: 'cellSpacing', expectedNull: ''},
632                         {name: 'frame', expectedNull: 'null'},
633                         {name: 'rules', expectedNull: 'null'},
634                         {name: 'summary', expectedNull: 'null'},
635                         {name: 'width', expectedNull: 'null'}
636                     ]
637                 },
638                 {
639                     type: 'HTMLTableRowElement',
640                     elementToUse: document.createElement('tr'),
641                     attributes: [
642                         {name: 'align', expectedNull: 'null'},
643                         {name: 'bgColor', expectedNull: ''},
644                         {name: 'ch', expectedNull: 'null'},
645                         {name: 'chOff', expectedNull: 'null'},
646                         {name: 'vAlign', expectedNull: 'null'}
647                     ]
648                 },
649                 {
650                     type: 'HTMLTableSectionElement',
651                     elementToUse: document.createElement('tbody'),
652                     attributes: [
653                         {name: 'align', expectedNull: 'null'},
654                         {name: 'ch', expectedNull: 'null'},
655                         {name: 'chOff', expectedNull: 'null'},
656                         {name: 'vAlign', expectedNull: 'null'}
657                     ]
658                 },
659                 {
660                     type: 'HTMLTextAreaElement',
661                     elementToUse: document.createElement('textarea'),
662                     attributes: [
663                         {name: 'defaultValue', expectedNull: 'null'},
664                         {name: 'dirName', expectedNull: 'null'},
665                         {name: 'inputMode', expectedNull: 'null'},
666                         {name: 'name', expectedNull: 'null'},
667                         {name: 'placeholder', expectedNull: 'null'},
668                         {name: 'value', expectedNull: ''},
669                         {name: 'wrap', expectedNull: 'null'}
670                     ]
671                 },
672                 {
673                     type: 'HTMLTitleElement',
674                     elementToUse: document.createElement('title'),
675                     attributes: [
676                         {name: 'text', expectedNull: 'null'}
677                     ]
678                 },
679                 {
680                     type: 'HTMLTrackElement',
681                     elementToUse: document.createElement('track'),
682                     attributes: [
683                         {name: 'kind', expectedNull: 'subtitles'},
684                         {name: 'label', expectedNull: 'null'},
685                         {name: 'src', expectedNull: 'null', isUrl: true},
686                         {name: 'srclang', expectedNull: 'null'}
687                     ]
688                 },
689                 {
690                     type: 'HTMLUListElement',
691                     elementToUse: document.createElement('ul'),
692                     attributes: [
693                         {name: 'type', expectedNull: 'null'}
694                     ]
695                 },
696                 {
697                     type: 'HTMLVideoElement',
698                     elementToUse: document.createElement('video'),
699                     attributes: [
700                         {name: 'mediaGroup', expectedNull: 'null'},
701                         {name: 'poster', expectedNull: 'null', isUrl: true},
702                         {name: 'preload', expectedNull: 'auto'},
703                         {name: 'src', expectedNull: 'null', isUrl: true}
704                     ]
705                 }
706             ];
707
708             for (element in listing) {
709                 var type = listing[element].type;
710                 var elementToUse = listing[element].elementToUse;
711                 var attrs = listing[element].attributes;
712                 for (attr in attrs) {
713                     nullTestElementAttribute(type, elementToUse, attrs[attr].name, attrs[attr].expectedNull, attrs[attr].isUrl);
714                 }
715                 printOut('');
716             }
717         }
718     </script>
719 </head>
720 <body onload="runTests()">
721     <p>This test setting various attributes of a elements to JavaScript null.</p>
722     <div id="console"></div>
723 </body>
724 </html>