test_extra_text_markup.html (3166B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test L10nOverlays Localized text markup</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 // Localized text markup 23 { 24 // allowed element 25 const element = elem("div")`Foo`; 26 const translation = { 27 value: "FOO <em>BAR</em> BAZ", 28 attributes: null, 29 }; 30 31 translateElement(element, translation); 32 is(element.innerHTML, "FOO <em>BAR</em> BAZ"); 33 } 34 35 { 36 // forbidden element 37 const element = elem("div")`Foo`; 38 const translation = { 39 value: 'FOO <img src="img.png" />', 40 attributes: null, 41 }; 42 43 translateElement(element, translation); 44 is(element.innerHTML, "FOO "); 45 } 46 47 { 48 // forbiden element with text 49 const element = elem("div")`Foo`; 50 const translation = { 51 value: "FOO <a>a</a>", 52 attributes: null, 53 }; 54 55 translateElement(element, translation); 56 is(element.innerHTML, "FOO a"); 57 } 58 59 { 60 // nested HTML is forbidden 61 const element = elem("div")`Foo`; 62 const translation = { 63 value: "FOO <em><strong>BAR</strong></em> BAZ", 64 attributes: null, 65 }; 66 67 translateElement(element, translation); 68 is(element.innerHTML, "FOO <em>BAR</em> BAZ"); 69 } 70 71 // Attributes of localized text markup 72 { 73 // allowed attribute 74 const element = elem("div")`Foo Bar`; 75 const translation = { 76 value: 'FOO <em title="BAR">BAR</em>', 77 attributes: null, 78 }; 79 80 translateElement(element, translation); 81 is(element.innerHTML, 82 'FOO <em title="BAR">BAR</em>'); 83 } 84 85 { 86 // forbidden attribute 87 const element = elem("div")`Foo Bar`; 88 const translation = { 89 value: 'FOO <em class="BAR" title="BAR">BAR</em>', 90 attributes: null, 91 }; 92 93 translateElement(element, translation); 94 is(element.innerHTML, 95 'FOO <em title="BAR">BAR</em>'); 96 } 97 98 { 99 // attributes do not leak on first translation 100 const element = elem("div")` 101 <em title="Foo">Foo</a>`; 102 const translation = { 103 value: "<em>FOO</em>", 104 attributes: null, 105 }; 106 107 translateElement(element, translation); 108 is(element.innerHTML, 109 "<em>FOO</em>"); 110 } 111 112 { 113 // attributes do not leak on retranslation 114 const element = elem("div")``; 115 const translationA = { 116 value: '<em title="FOO A">FOO A</em>', 117 attributes: null, 118 }; 119 const translationB = { 120 value: "<em>FOO B</em>", 121 attributes: null, 122 }; 123 124 translateElement(element, translationA); 125 is(element.innerHTML, 126 '<em title="FOO A">FOO A</em>'); 127 translateElement(element, translationB); 128 is(element.innerHTML, 129 "<em>FOO B</em>"); 130 } 131 </script> 132 </head> 133 <body> 134 </body> 135 </html>