tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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();