test_attributes.html (2050B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test L10nOverlays Top-level attributes</title> 6 <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 7 <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"> 8 <script type="application/javascript"> 9 /* global L10nOverlays */ 10 "use strict"; 11 12 function elem(name) { 13 return function(str) { 14 const element = document.createElement(name); 15 element.innerHTML = str; 16 return element; 17 }; 18 } 19 20 const { translateElement } = L10nOverlays; 21 22 { 23 // Allowed attribute 24 const element = elem("div")``; 25 const translation = { 26 value: null, 27 attributes: [ 28 {name: "title", value: "FOO"}, 29 ], 30 }; 31 translateElement(element, translation); 32 is(element.outerHTML, '<div title="FOO"></div>'); 33 } 34 35 { 36 // Forbidden attribute 37 const element = elem("input")``; 38 const translation = { 39 value: null, 40 attributes: [ 41 {name: "disabled", value: "DISABLED"}, 42 ], 43 }; 44 translateElement(element, translation); 45 is(element.outerHTML, "<input>"); 46 } 47 48 { 49 // Attributes do not leak on first translation 50 const element = elem("div")`Foo`; 51 element.setAttribute("title", "Title"); 52 53 const translation = { 54 value: "FOO", 55 attributes: null, 56 }; 57 translateElement(element, translation); 58 is(element.outerHTML, "<div>FOO</div>"); 59 } 60 61 { 62 // Attributes do not leak on retranslation 63 const element = elem("div")`Foo`; 64 65 const translationA = { 66 value: "FOO A", 67 attributes: [ 68 {name: "title", value: "TITLE A"}, 69 ], 70 }; 71 72 const translationB = { 73 value: "FOO B", 74 attributes: null, 75 }; 76 translateElement(element, translationA); 77 is(element.outerHTML, '<div title="TITLE A">FOO A</div>'); 78 translateElement(element, translationB); 79 is(element.outerHTML, "<div>FOO B</div>"); 80 } 81 </script> 82 </head> 83 <body> 84 </body> 85 </html>