3 <style type="text/css">
4 .pass { color: green; }
10 var console = document.getElementById("console");
11 var span = document.createElement('span');
12 span.innerHTML = msg + '<br>';
13 console.appendChild(span);
16 function resultStringifier(result)
19 return "<b>the empty string</b>";
20 else if (result === null)
22 else if (result === undefined)
23 return "<b>undefined</b>";
24 return "the string '" + result + "'";
27 function nullTestElementAttribute(elementType, element, attr, expected)
36 if (exceptionThrown) {
37 if (expected === 'exception')
38 result = "<span class='pass'>TEST SUCCEEDED:</span> Exception (" + exceptionThrown + ") was thrown as expected.";
40 result = "<span class='fail'>TEST FAILED:</span> An exception was thrown unexpectedly.";
42 if (expected === 'exception')
43 result = "<span class='fail'>TEST FAILED:</span> An exception should have been thrown.";
44 else if (element[attr] === expected)
45 result = "<span class='pass'>TEST SUCCEEDED:</span> The value was " + resultStringifier(expected) + ".";
47 result = "<span class='fail'>TEST FAILED:</span> The value should have been " + resultStringifier(expected) + " but was " + resultStringifier(element[attr]) + ".";
49 result += " [tested " + elementType + "." + attr + "]";
55 if (window.layoutTestController)
56 layoutTestController.dumpAsText();
60 // Attr.value (expected: null)
62 // ProcessingInstruction.data
68 elementToUse: document.createElement('div'),
70 {name: 'nodeValue', expectedNull: null},
71 // 'prefix' only works because this is an HTMLElement type node, if it were an
72 // XML node (created using createElementNS()) this would throw an exception. We
73 // should test this further as Firefox has a different behavior.
74 {name: 'prefix', expectedNull: null},
75 {name: 'textContent', expectedNull: ''}
80 elementToUse: document.createElement('div'),
82 {name: 'title', expectedNull: ''},
83 {name: 'id', expectedNull: ''},
84 {name: 'lang', expectedNull: ''},
85 {name: 'dir', expectedNull: ''},
86 {name: 'className', expectedNull: ''},
87 {name: 'innerHTML', expectedNull: ''},
88 {name: 'innerText', expectedNull: ''},
90 // {name: 'outerHTML', expectedNull: ''},
91 // {name: 'outerText', expectedNull: ''},
92 {name: 'contentEditable', expectedNull: 'exception'}
96 type: 'HTMLAnchorElement',
97 elementToUse: document.createElement('a'),
99 {name: 'accessKey', expectedNull: ''},
100 {name: 'charset', expectedNull: ''},
101 {name: 'coords', expectedNull: ''},
102 {name: 'href', expectedNull: ''},
103 {name: 'hreflang', expectedNull: ''},
104 {name: 'name', expectedNull: ''},
105 {name: 'rel', expectedNull: ''},
106 {name: 'rev', expectedNull: ''},
107 {name: 'shape', expectedNull: ''},
108 {name: 'target', expectedNull: ''},
109 {name: 'type', expectedNull: ''}
113 type: 'HTMLAppletElement',
114 elementToUse: document.createElement('applet'),
116 {name: 'align', expectedNull: ''},
117 {name: 'alt', expectedNull: ''},
118 {name: 'archive', expectedNull: ''},
119 {name: 'code', expectedNull: ''},
120 {name: 'codeBase', expectedNull: ''},
121 {name: 'height', expectedNull: ''},
122 {name: 'hspace', expectedNull: ''},
123 {name: 'name', expectedNull: ''},
124 {name: 'object', expectedNull: ''},
125 {name: 'vspace', expectedNull: ''},
126 {name: 'width', expectedNull: ''}
130 type: 'HTMLAreaElement',
131 elementToUse: document.createElement('area'),
133 {name: 'accessKey', expectedNull: ''},
134 {name: 'alt', expectedNull: ''},
135 {name: 'coords', expectedNull: ''},
136 {name: 'href', expectedNull: ''},
137 {name: 'shape', expectedNull: ''},
138 {name: 'target', expectedNull: ''}
142 type: 'HTMLBaseElement',
143 elementToUse: document.createElement('base'),
145 {name: 'href', expectedNull: ''},
146 {name: 'target', expectedNull: ''}
150 type: 'HTMLBaseFontElement',
151 elementToUse: document.createElement('basefont'),
153 {name: 'color', expectedNull: ''},
154 {name: 'face', expectedNull: ''}
158 type: 'HTMLBlockquoteElement',
159 elementToUse: document.createElement('blockquote'),
161 {name: 'cite', expectedNull: ''}
165 type: 'HTMLBodyElement',
166 elementToUse: document.createElement('body'),
168 {name: 'aLink', expectedNull: ''},
169 {name: 'background', expectedNull: ''},
170 {name: 'bgColor', expectedNull: ''},
171 {name: 'link', expectedNull: ''},
172 {name: 'text', expectedNull: ''},
173 {name: 'vLink', expectedNull: ''}
177 type: 'HTMLBRElement',
178 elementToUse: document.createElement('br'),
180 {name: 'clear', expectedNull: ''}
184 type: 'HTMLButtonElement',
185 elementToUse: document.createElement('button'),
187 {name: 'accessKey', expectedNull: ''},
188 {name: 'name', expectedNull: ''},
189 {name: 'value', expectedNull: ''}
193 type: 'HTMLDivElement',
194 elementToUse: document.createElement('div'),
196 {name: 'align', expectedNull: ''}
204 type: 'HTMLEmbedElement',
205 elementToUse: document.createElement('embed'),
207 {name: 'align', expectedNull: ''},
208 {name: 'name', expectedNull: ''},
209 {name: 'src', expectedNull: ''},
210 {name: 'type', expectedNull: ''}
214 // HTMLFieldSetElement
218 type: 'HTMLFontElement',
219 elementToUse: document.createElement('font'),
221 {name: 'color', expectedNull: ''},
222 {name: 'face', expectedNull: ''},
223 {name: 'size', expectedNull: ''}
227 type: 'HTMLFormElement',
228 elementToUse: document.createElement('form'),
230 {name: 'name', expectedNull: ''},
231 {name: 'acceptCharset', expectedNull: ''},
232 {name: 'action', expectedNull: ''},
233 {name: 'encoding', expectedNull: 'application/x-www-form-urlencoded'},
234 {name: 'enctype', expectedNull: 'application/x-www-form-urlencoded'},
235 {name: 'method', expectedNull: 'get'},
236 {name: 'target', expectedNull: ''}
240 type: 'HTMLFrameElement',
241 elementToUse: document.createElement('frame'),
243 {name: 'frameBorder', expectedNull: ''},
244 {name: 'longDesc', expectedNull: ''},
245 {name: 'marginHeight', expectedNull: ''},
246 {name: 'marginWidth', expectedNull: ''},
247 {name: 'name', expectedNull: ''},
248 {name: 'scrolling', expectedNull: ''},
249 {name: 'src', expectedNull: ''},
250 {name: 'location', expectedNull: ''} // not a documented attribute
254 type: 'HTMLFrameSetElement',
255 elementToUse: document.createElement('frameset'),
257 {name: 'cols', expectedNull: ''},
258 {name: 'rows', expectedNull: ''}
262 type: 'HTMLHeadElement',
263 elementToUse: document.createElement('head'),
265 {name: 'profile', expectedNull: ''}
269 type: 'HTMLHeadingElement',
270 // no need to test h2-h6
271 elementToUse: document.createElement('h1'),
273 {name: 'align', expectedNull: ''}
277 type: 'HTMLHRElement',
278 elementToUse: document.createElement('hr'), // no need to test h2-h6
280 {name: 'align', expectedNull: ''},
281 {name: 'size', expectedNull: ''},
282 {name: 'width', expectedNull: ''}
286 type: 'HTMLHtmlElement',
287 elementToUse: document.createElement('html'),
289 {name: 'version', expectedNull: ''}
293 type: 'HTMLIFrameElement',
294 elementToUse: document.createElement('iframe'),
296 {name: 'align', expectedNull: ''},
297 {name: 'frameBorder', expectedNull: ''},
298 {name: 'height', expectedNull: ''},
299 {name: 'longDesc', expectedNull: ''},
300 {name: 'marginHeight', expectedNull: ''},
301 {name: 'marginWidth', expectedNull: ''},
302 {name: 'name', expectedNull: ''},
303 {name: 'scrolling', expectedNull: ''},
304 {name: 'src', expectedNull: ''},
305 {name: 'width', expectedNull: ''}
309 type: 'HTMLImageElement',
310 elementToUse: document.createElement('img'),
312 {name: 'name', expectedNull: ''},
313 {name: 'align', expectedNull: ''},
314 {name: 'alt', expectedNull: ''},
315 {name: 'border', expectedNull: ''},
316 {name: 'longDesc', expectedNull: ''},
317 {name: 'src', expectedNull: ''},
318 {name: 'useMap', expectedNull: ''},
319 {name: 'lowsrc', expectedNull: ''}
323 type: 'HTMLInputElement',
324 elementToUse: document.createElement('input'),
326 {name: 'accept', expectedNull: ''},
327 {name: 'accessKey', expectedNull: ''},
328 {name: 'align', expectedNull: ''},
329 {name: 'alt', expectedNull: ''},
330 {name: 'defaultValue', expectedNull: ''},
331 {name: 'name', expectedNull: ''},
332 {name: 'src', expectedNull: ''},
333 {name: 'type', expectedNull: 'text'},
334 {name: 'useMap', expectedNull: ''},
335 {name: 'value', expectedNull: ''},
339 type: 'HTMLIsIndexElement',
340 elementToUse: document.createElement('isindex'),
342 {name: 'prompt', expectedNull: ''}
346 type: 'HTMLLabelElement',
347 elementToUse: document.createElement('label'),
349 {name: 'accessKey', expectedNull: ''},
350 {name: 'htmlFor', expectedNull: ''}
354 type: 'HTMLLegendElement',
355 elementToUse: document.createElement('legend'),
357 {name: 'accessKey', expectedNull: ''},
358 {name: 'align', expectedNull: ''}
362 type: 'HTMLLIElement',
363 elementToUse: document.createElement('li'),
365 {name: 'type', expectedNull: ''}
369 type: 'HTMLLinkElement',
370 elementToUse: document.createElement('link'),
372 {name: 'charset', expectedNull: ''},
373 {name: 'href', expectedNull: ''},
374 {name: 'hreflang', expectedNull: ''},
375 {name: 'media', expectedNull: ''},
376 {name: 'rel', expectedNull: ''},
377 {name: 'rev', expectedNull: ''},
378 {name: 'target', expectedNull: ''},
379 {name: 'type', expectedNull: ''}
383 type: 'HTMLMapElement',
384 elementToUse: document.createElement('map'),
386 {name: 'name', expectedNull: ''}
394 type: 'HTMLMetaElement',
395 elementToUse: document.createElement('meta'),
397 {name: 'content', expectedNull: ''},
398 {name: 'httpEquiv', expectedNull: ''},
399 {name: 'name', expectedNull: ''},
400 {name: 'scheme', expectedNull: ''}
404 type: 'HTMLModElement',
405 elementToUse: document.createElement('ins'), // same as 'del'
407 {name: 'cite', expectedNull: ''},
408 {name: 'dateTime', expectedNull: ''}
412 type: 'HTMLObjectElement',
413 elementToUse: document.createElement('object'),
415 {name: 'code', expectedNull: ''},
416 {name: 'align', expectedNull: ''},
417 {name: 'archive', expectedNull: ''},
418 {name: 'border', expectedNull: ''},
419 {name: 'codeBase', expectedNull: ''},
420 {name: 'codeType', expectedNull: ''},
421 {name: 'data', expectedNull: ''},
422 {name: 'height', expectedNull: ''},
423 {name: 'name', expectedNull: ''},
424 {name: 'standby', expectedNull: ''},
425 {name: 'type', expectedNull: ''},
426 {name: 'useMap', expectedNull: ''},
427 {name: 'width', expectedNull: ''}
431 type: 'HTMLOListElement',
432 elementToUse: document.createElement('ol'),
434 {name: 'type', expectedNull: ''}
438 type: 'HTMLOptGroupElement',
439 elementToUse: document.createElement('optgroup'),
441 {name: 'label', expectedNull: ''}
445 type: 'HTMLOptionElement',
446 elementToUse: document.createElement('option'),
448 {name: 'text', expectedNull: ''},
449 {name: 'label', expectedNull: ''},
450 {name: 'value', expectedNull: ''}
454 type: 'HTMLParagraphElement',
455 elementToUse: document.createElement('p'),
457 {name: 'align', expectedNull: ''}
461 type: 'HTMLParamElement',
462 elementToUse: document.createElement('param'),
464 {name: 'name', expectedNull: ''},
465 {name: 'type', expectedNull: ''},
466 {name: 'value', expectedNull: ''},
467 {name: 'valueType', expectedNull: ''}
475 type: 'HTMLQuoteElement',
476 elementToUse: document.createElement('q'),
478 {name: 'cite', expectedNull: ''}
482 type: 'HTMLScriptElement',
483 elementToUse: document.createElement('script'),
485 {name: 'text', expectedNull: ''},
486 {name: 'htmlFor', expectedNull: ''},
487 {name: 'event', expectedNull: ''},
488 {name: 'charset', expectedNull: ''},
489 {name: 'src', expectedNull: ''},
490 {name: 'type', expectedNull: ''}
494 type: 'HTMLSelectElement',
495 elementToUse: document.createElement('select'),
497 {name: 'value', expectedNull: ''},
498 {name: 'name', expectedNull: ''}
502 type: 'HTMLStyleElement',
503 elementToUse: document.createElement('style'),
505 {name: 'media', expectedNull: ''},
506 {name: 'type', expectedNull: ''}
510 type: 'HTMLTableCaptionElement',
511 elementToUse: document.createElement('caption'),
513 {name: 'align', expectedNull: ''}
517 type: 'HTMLTableCellElement',
518 elementToUse: document.createElement('td'),
520 {name: 'abbr', expectedNull: ''},
521 {name: 'align', expectedNull: ''},
522 {name: 'axis', expectedNull: ''},
523 {name: 'bgColor', expectedNull: ''},
524 {name: 'ch', expectedNull: ''},
525 {name: 'chOff', expectedNull: ''},
526 {name: 'headers', expectedNull: ''},
527 {name: 'height', expectedNull: ''},
528 {name: 'scope', expectedNull: ''},
529 {name: 'vAlign', expectedNull: ''},
530 {name: 'width', expectedNull: ''}
534 type: 'HTMLTableColElement',
535 elementToUse: document.createElement('col'),
537 {name: 'align', expectedNull: ''},
538 {name: 'ch', expectedNull: ''},
539 {name: 'chOff', expectedNull: ''},
540 {name: 'vAlign', expectedNull: ''},
541 {name: 'width', expectedNull: ''}
545 type: 'HTMLTableElement',
546 elementToUse: document.createElement('table'),
548 {name: 'align', expectedNull: ''},
549 {name: 'bgColor', expectedNull: ''},
550 {name: 'border', expectedNull: ''},
551 {name: 'cellPadding', expectedNull: ''},
552 {name: 'cellSpacing', expectedNull: ''},
553 {name: 'frame', expectedNull: ''},
554 {name: 'rules', expectedNull: ''},
555 {name: 'summary', expectedNull: ''},
556 {name: 'width', expectedNull: ''}
560 type: 'HTMLTableRowElement',
561 elementToUse: document.createElement('tr'),
563 {name: 'align', expectedNull: ''},
564 {name: 'bgColor', expectedNull: ''},
565 {name: 'ch', expectedNull: ''},
566 {name: 'chOff', expectedNull: ''},
567 {name: 'vAlign', expectedNull: ''}
571 type: 'HTMLTableSectionElement',
572 elementToUse: document.createElement('tbody'),
574 {name: 'align', expectedNull: ''},
575 {name: 'ch', expectedNull: ''},
576 {name: 'chOff', expectedNull: ''},
577 {name: 'vAlign', expectedNull: ''}
581 type: 'HTMLTextAreaElement',
582 elementToUse: document.createElement('textarea'),
584 {name: 'defaultValue', expectedNull: ''},
585 {name: 'accessKey', expectedNull: ''},
586 {name: 'name', expectedNull: ''},
587 {name: 'value', expectedNull: ''}
591 type: 'HTMLTitleElement',
592 elementToUse: document.createElement('title'),
594 {name: 'text', expectedNull: ''}
598 type: 'HTMLUListElement',
599 elementToUse: document.createElement('ul'),
601 {name: 'type', expectedNull: ''}
606 for (element in listing) {
607 var type = listing[element].type;
608 var elementToUse = listing[element].elementToUse;
609 var attrs = listing[element].attributes;
610 for (attr in attrs) {
611 nullTestElementAttribute(type, elementToUse, attrs[attr].name, attrs[attr].expectedNull);
618 <body onload="runTests()">
619 <p>This test setting various attributes of a elements to JavaScript null.</p>
620 <div id="console"></div>