lang-attribute-shadow.window.js (2526B)
1 const TESTS = [ 2 { 3 title: "lang only on slot", 4 light_tree: ` 5 <div id="host" data-expected="en-US"><span data-expected="en-US"></span></div> 6 `, 7 shadow_tree: ` 8 <slot lang="en-AU" data-expected="en-AU"></slot> 9 `, 10 }, 11 { 12 title: "lang only on host", 13 light_tree: ` 14 <div id="host" lang="en-AU" data-expected="en-AU"><span data-expected="en-AU"></span></div> 15 `, 16 shadow_tree: ` 17 <slot data-expected="en-AU"></slot> 18 `, 19 }, 20 { 21 title: "lang on host and slot", 22 light_tree: ` 23 <div id="host" lang="en-AU" data-expected="en-AU"><span data-expected="en-AU"></span></div> 24 `, 25 shadow_tree: ` 26 <slot lang="en-GB" data-expected="en-GB"></slot> 27 `, 28 }, 29 { 30 title: "lang on host and slotted element", 31 light_tree: ` 32 <div id="host" lang="en-AU" data-expected="en-AU"><span lang="en-GB" data-expected="en-GB"></span></div> 33 `, 34 shadow_tree: ` 35 <slot data-expected="en-AU"></slot> 36 `, 37 }, 38 { 39 title: "lang on host and slot and slotted element", 40 light_tree: ` 41 <div id="host" lang="en-AU" data-expected="en-AU"><span lang="en-GB" data-expected="en-GB"></span></div> 42 `, 43 shadow_tree: ` 44 <slot lang="en-NZ" data-expected="en-NZ"></slot> 45 `, 46 }, 47 { 48 title: "lang on slot inherits from parent", 49 light_tree: ` 50 <div id="host" lang="en-GB" data-expected="en-GB"><span lang="en-US" data-expected="en-US"></span></div> 51 `, 52 shadow_tree: ` 53 <div lang="en-CA" data-expected="en-CA"> 54 <slot data-expected="en-CA"></slot> 55 </div> 56 `, 57 }, 58 ]; 59 60 const container = document.createElement("div"); 61 document.body.append(container); 62 container.lang = "en-US"; 63 64 for (const obj of TESTS) { 65 test(() => { 66 container.innerHTML = obj.light_tree; 67 let shadow = container.querySelector("#host").attachShadow({mode: "open"}); 68 shadow.innerHTML = obj.shadow_tree; 69 for (const element of Array.from(container.querySelectorAll("[data-expected]")).concat(Array.from(shadow.querySelectorAll("[data-expected]")))) { 70 const expected = element.getAttribute("data-expected"); 71 assert_true(element.matches(`:lang(${expected})`), `element matches expected language ${expected}`); 72 for (const other_lang of ["en-US", "en-AU", "en-GB", "en-NZ", "en-CA"]) { 73 if (expected != other_lang) { 74 assert_false(element.matches(`:lang(${other_lang})`), `element does not match language ${other_lang}`); 75 } 76 } 77 } 78 }, obj.title); 79 } 80 81 container.remove();