| OLD | NEW |
| 1 <html> | 1 <html> |
| 2 <head> | 2 <head> |
| 3 <style type="text/css"> | 3 <style type="text/css"> |
| 4 .pass { color: green; } | 4 .pass { color: green; } |
| 5 .fail { color: red; } | 5 .fail { color: red; } |
| 6 </style> | 6 </style> |
| 7 <script> | 7 <script> |
| 8 function printOut(msg) | 8 function printOut(msg) |
| 9 { | 9 { |
| 10 var console = document.getElementById("console"); | 10 var console = document.getElementById("console"); |
| 11 var span = document.createElement('span'); | 11 var span = document.createElement('span'); |
| 12 span.innerHTML = msg + '<br>'; | 12 span.innerHTML = msg + '<br>'; |
| 13 console.appendChild(span); | 13 console.appendChild(span); |
| 14 } | 14 } |
| 15 | 15 |
| 16 function resultStringifier(result) | 16 function resultStringifier(result) |
| 17 { | 17 { |
| 18 if (result === "") | 18 if (result === "") |
| 19 return "<b>the empty string</b>"; | 19 return "<b>the empty string</b>"; |
| 20 else if (result === null) | 20 else if (result === null) |
| 21 return "<b>null</b>"; | 21 return "<b>null</b>"; |
| 22 else if (result === undefined) | 22 else if (result === undefined) |
| 23 return "<b>undefined</b>"; | 23 return "<b>undefined</b>"; |
| 24 return "the string '" + result + "'"; | 24 return "the string '" + result + "'"; |
| 25 } | 25 } |
| 26 | 26 |
| 27 function nullTestElementAttribute(elementType, element, attr, expected) | 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) |
| 28 { | 35 { |
| 29 var exceptionThrown; | 36 var exceptionThrown; |
| 30 try { | 37 try { |
| 31 element[attr] = null; | 38 element[attr] = null; |
| 32 } catch (ec) { | 39 } catch (ec) { |
| 33 exceptionThrown = ec; | 40 exceptionThrown = ec; |
| 34 } | 41 } |
| 35 var result; | 42 var result; |
| 36 if (exceptionThrown) { | 43 if (exceptionThrown) { |
| 37 if (expected === 'exception') | 44 if (expected === 'exception') |
| 38 result = "<span class='pass'>TEST SUCCEEDED:</span> Exceptio
n (" + exceptionThrown + ") was thrown as expected."; | 45 result = "<span class='pass'>TEST SUCCEEDED:</span> Exceptio
n (" + exceptionThrown + ") was thrown as expected."; |
| 39 else | 46 else |
| 40 result = "<span class='fail'>TEST FAILED:</span> An exceptio
n was thrown unexpectedly."; | 47 result = "<span class='fail'>TEST FAILED:</span> An exceptio
n was thrown unexpectedly."; |
| 41 } else { | 48 } else { |
| 42 if (expected === 'exception') | 49 if (expected === 'exception') |
| 43 result = "<span class='fail'>TEST FAILED:</span> An exceptio
n should have been thrown."; | 50 result = "<span class='fail'>TEST FAILED:</span> An exceptio
n should have been thrown."; |
| 51 else if (isUrl && element[attr] === resolve(expected)) |
| 52 result = "<span class='pass'>TEST SUCCEEDED:</span> The valu
e was " + resultStringifier(expected) + " resolved as a URL."; |
| 44 else if (element[attr] === expected) | 53 else if (element[attr] === expected) |
| 45 result = "<span class='pass'>TEST SUCCEEDED:</span> The valu
e was " + resultStringifier(expected) + "."; | 54 result = "<span class='pass'>TEST SUCCEEDED:</span> The valu
e was " + resultStringifier(expected) + "."; |
| 46 else | 55 else |
| 47 result = "<span class='fail'>TEST FAILED:</span> The value s
hould have been " + resultStringifier(expected) + " but was " + resultStringifie
r(element[attr]) + "."; | 56 result = "<span class='fail'>TEST FAILED:</span> The value s
hould have been " + resultStringifier(expected) + " but was " + resultStringifie
r(element[attr]) + "."; |
| 48 } | 57 } |
| 49 result += " [tested " + elementType + "." + attr + "]"; | 58 result += " [tested " + elementType + "." + attr + "]"; |
| 50 printOut(result); | 59 printOut(result); |
| 51 } | 60 } |
| 52 | 61 |
| 53 function runTests() | 62 function runTests() |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 {name: 'coords', expectedNull: ''}, | 144 {name: 'coords', expectedNull: ''}, |
| 136 {name: 'href', expectedNull: ''}, | 145 {name: 'href', expectedNull: ''}, |
| 137 {name: 'shape', expectedNull: ''}, | 146 {name: 'shape', expectedNull: ''}, |
| 138 {name: 'target', expectedNull: ''} | 147 {name: 'target', expectedNull: ''} |
| 139 ] | 148 ] |
| 140 }, | 149 }, |
| 141 { | 150 { |
| 142 type: 'HTMLAudioElement', | 151 type: 'HTMLAudioElement', |
| 143 elementToUse: document.createElement('audio'), | 152 elementToUse: document.createElement('audio'), |
| 144 attributes: [ | 153 attributes: [ |
| 145 {name: 'mediaGroup', expectedNull: ''}, | 154 {name: 'mediaGroup', expectedNull: 'null'}, |
| 146 {name: 'preload', expectedNull: 'auto'}, | 155 {name: 'preload', expectedNull: 'auto'}, |
| 147 {name: 'src', expectedNull: ''} | 156 {name: 'src', expectedNull: 'null', isUrl: true} |
| 148 ] | 157 ] |
| 149 }, | 158 }, |
| 150 { | 159 { |
| 151 type: 'HTMLBaseElement', | 160 type: 'HTMLBaseElement', |
| 152 elementToUse: document.createElement('base'), | 161 elementToUse: document.createElement('base'), |
| 153 attributes: [ | 162 attributes: [ |
| 154 {name: 'target', expectedNull: ''} | 163 {name: 'target', expectedNull: ''} |
| 155 ] | 164 ] |
| 156 }, | 165 }, |
| 157 { | 166 { |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 attributes: [ | 498 attributes: [ |
| 490 {name: 'value', expectedNull: ''}, | 499 {name: 'value', expectedNull: ''}, |
| 491 {name: 'name', expectedNull: ''} | 500 {name: 'name', expectedNull: ''} |
| 492 ] | 501 ] |
| 493 }, | 502 }, |
| 494 { | 503 { |
| 495 type: 'HTMLSourceElement', | 504 type: 'HTMLSourceElement', |
| 496 elementToUse: document.createElement('source'), | 505 elementToUse: document.createElement('source'), |
| 497 attributes: [ | 506 attributes: [ |
| 498 {name: 'media', expectedNull: 'null'}, | 507 {name: 'media', expectedNull: 'null'}, |
| 499 {name: 'src', expectedNull: ''}, | 508 {name: 'src', expectedNull: 'null', isUrl:true}, |
| 500 {name: 'type', expectedNull: 'null'} | 509 {name: 'type', expectedNull: 'null'} |
| 501 ] | 510 ] |
| 502 }, | 511 }, |
| 503 { | 512 { |
| 504 type: 'HTMLStyleElement', | 513 type: 'HTMLStyleElement', |
| 505 elementToUse: document.createElement('style'), | 514 elementToUse: document.createElement('style'), |
| 506 attributes: [ | 515 attributes: [ |
| 507 {name: 'media', expectedNull: ''}, | 516 {name: 'media', expectedNull: ''}, |
| 508 {name: 'type', expectedNull: ''} | 517 {name: 'type', expectedNull: ''} |
| 509 ] | 518 ] |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 attributes: [ | 604 attributes: [ |
| 596 {name: 'text', expectedNull: ''} | 605 {name: 'text', expectedNull: ''} |
| 597 ] | 606 ] |
| 598 }, | 607 }, |
| 599 { | 608 { |
| 600 type: 'HTMLTrackElement', | 609 type: 'HTMLTrackElement', |
| 601 elementToUse: document.createElement('track'), | 610 elementToUse: document.createElement('track'), |
| 602 attributes: [ | 611 attributes: [ |
| 603 {name: 'kind', expectedNull: 'subtitles'}, | 612 {name: 'kind', expectedNull: 'subtitles'}, |
| 604 {name: 'label', expectedNull: 'null'}, | 613 {name: 'label', expectedNull: 'null'}, |
| 605 {name: 'src', expectedNull: ''}, | 614 {name: 'src', expectedNull: 'null', isUrl:true}, |
| 606 {name: 'srclang', expectedNull: 'null'} | 615 {name: 'srclang', expectedNull: 'null'} |
| 607 ] | 616 ] |
| 608 }, | 617 }, |
| 609 { | 618 { |
| 610 type: 'HTMLUListElement', | 619 type: 'HTMLUListElement', |
| 611 elementToUse: document.createElement('ul'), | 620 elementToUse: document.createElement('ul'), |
| 612 attributes: [ | 621 attributes: [ |
| 613 {name: 'type', expectedNull: ''} | 622 {name: 'type', expectedNull: ''} |
| 614 ] | 623 ] |
| 615 }, | 624 }, |
| 616 { | 625 { |
| 617 type: 'HTMLVideoElement', | 626 type: 'HTMLVideoElement', |
| 618 elementToUse: document.createElement('video'), | 627 elementToUse: document.createElement('video'), |
| 619 attributes: [ | 628 attributes: [ |
| 620 {name: 'mediaGroup', expectedNull: ''}, | 629 {name: 'mediaGroup', expectedNull: 'null'}, |
| 621 {name: 'poster', expectedNull: ''}, | 630 {name: 'poster', expectedNull: 'null', isUrl:true}, |
| 622 {name: 'preload', expectedNull: 'auto'}, | 631 {name: 'preload', expectedNull: 'auto'}, |
| 623 {name: 'src', expectedNull: ''} | 632 {name: 'src', expectedNull: 'null', isUrl: true} |
| 624 ] | 633 ] |
| 625 } | 634 } |
| 626 ]; | 635 ]; |
| 627 | 636 |
| 628 for (element in listing) { | 637 for (element in listing) { |
| 629 var type = listing[element].type; | 638 var type = listing[element].type; |
| 630 var elementToUse = listing[element].elementToUse; | 639 var elementToUse = listing[element].elementToUse; |
| 631 var attrs = listing[element].attributes; | 640 var attrs = listing[element].attributes; |
| 632 for (attr in attrs) { | 641 for (attr in attrs) { |
| 633 nullTestElementAttribute(type, elementToUse, attrs[attr].nam
e, attrs[attr].expectedNull); | 642 nullTestElementAttribute(type, elementToUse, attrs[attr].nam
e, attrs[attr].expectedNull, attrs[attr].isUrl); |
| 634 } | 643 } |
| 635 printOut(''); | 644 printOut(''); |
| 636 } | 645 } |
| 637 } | 646 } |
| 638 </script> | 647 </script> |
| 639 </head> | 648 </head> |
| 640 <body onload="runTests()"> | 649 <body onload="runTests()"> |
| 641 <p>This test setting various attributes of a elements to JavaScript null.</p
> | 650 <p>This test setting various attributes of a elements to JavaScript null.</p
> |
| 642 <div id="console"></div> | 651 <div id="console"></div> |
| 643 </body> | 652 </body> |
| 644 </html> | 653 </html> |
| OLD | NEW |