tor-browser

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

unicode-bidi-ua-rules.html (5440B)


      1 <!DOCTYPE html>
      2 <title>unicode-bidi UA stylesheet rules</title>
      3 <link rel="author" href="masonf@chromium.org">
      4 <link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#bidi-rendering">
      5 <script src=/resources/testharness.js></script>
      6 <script src=/resources/testharnessreport.js></script>
      7 <script src='../../resources/common.js'></script>
      8 
      9 <body>
     10 <script>
     11  function getUnicodeBidi(el) {
     12    return window.getComputedStyle(el, "").unicodeBidi;
     13  }
     14 
     15  // These elements should have `unicode-bidi: isolate` in the UA stylesheet:
     16  const isolateElements = ['address', 'blockquote', 'center', 'div', 'figure',
     17      'figcaption', 'footer', 'form', 'header', 'hr', 'legend', 'listing',
     18      'main', 'p', 'plaintext', 'pre', 'summary', 'xmp', 'article', 'aside',
     19      'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'nav', 'section', 'search',
     20      'table', 'caption', 'colgroup', 'col', 'thead', 'tbody', 'tfoot', 'tr',
     21      'td', 'th', 'dir', 'dd', 'dl', 'dt', 'menu', 'ol', 'ul', 'li', 'bdi',
     22      'output'];
     23  const allButSeparateTests = HTML5_ELEMENTS.filter(el => (!['bdo','input','textarea','pre'].includes(el)));
     24  for(let tagname of allButSeparateTests) {
     25    test((t) => {
     26      const element = document.createElement(tagname);
     27      t.add_cleanup(() => element.remove());
     28      document.body.appendChild(element);
     29      const expectation = isolateElements.includes(tagname) ? 'isolate' : 'normal';
     30      assert_equals(getUnicodeBidi(element),expectation);
     31 
     32      element.setAttribute('dir','ltr');
     33      assert_equals(getUnicodeBidi(element),'isolate','with dir=ltr');
     34      element.setAttribute('dir','LtR');
     35      assert_equals(getUnicodeBidi(element),'isolate','with dir=LtR (case insensitive)');
     36      element.setAttribute('dir','rtl');
     37      assert_equals(getUnicodeBidi(element),'isolate','with dir=rtl');
     38      element.setAttribute('dir','auto');
     39      assert_equals(getUnicodeBidi(element),'isolate','with dir=auto');
     40      element.setAttribute('dir','INVALID');
     41      assert_equals(getUnicodeBidi(element),expectation,'invalid dir value goes back to normal defaults');
     42    },`UA stylesheet rule for unicode-bidi, for <${tagname}>`);
     43  }
     44 
     45  test((t) => {
     46    const element = document.createElement('bdo');
     47    t.add_cleanup(() => element.remove());
     48    document.body.appendChild(element);
     49    assert_equals(getUnicodeBidi(element),'isolate-override');
     50    element.setAttribute('dir','ltr');
     51    assert_equals(getUnicodeBidi(element),'isolate-override','with dir=ltr');
     52    element.setAttribute('dir','LtR');
     53    assert_equals(getUnicodeBidi(element),'isolate-override','with dir=LtR (case insensitive)');
     54    element.setAttribute('dir','rtl');
     55    assert_equals(getUnicodeBidi(element),'isolate-override','with dir=rtl');
     56    element.setAttribute('dir','auto');
     57    assert_equals(getUnicodeBidi(element),'isolate-override','with dir=auto');
     58    element.setAttribute('dir','INVALID');
     59    assert_equals(getUnicodeBidi(element),'isolate-override','invalid dir value');
     60  },`UA stylesheet rule for unicode-bidi, for <bdo>`);
     61 
     62  const shouldBePlaintext = ['search','tel','url','email'];
     63  for(let type of HTML5_INPUT_TYPES) {
     64    test((t) => {
     65      const element = document.createElement('input');
     66      t.add_cleanup(() => element.remove());
     67      element.type = type;
     68      document.body.appendChild(element);
     69      const autoExpectation = shouldBePlaintext.includes(type) ? 'plaintext' : 'isolate';
     70      assert_equals(getUnicodeBidi(element),'normal');
     71      element.setAttribute('dir','ltr');
     72      assert_equals(getUnicodeBidi(element),'isolate','with dir=ltr');
     73      element.setAttribute('dir','LtR');
     74      assert_equals(getUnicodeBidi(element),'isolate','with dir=LtR (case insensitive)');
     75      element.setAttribute('dir','rtl');
     76      assert_equals(getUnicodeBidi(element),'isolate','with dir=rtl');
     77      element.setAttribute('dir','auto');
     78      assert_equals(getUnicodeBidi(element),autoExpectation,'with dir=auto');
     79      element.setAttribute('dir','AuTo');
     80      assert_equals(getUnicodeBidi(element),autoExpectation,'with dir=auto (case insensitive)');
     81      element.setAttribute('dir','INVALID');
     82      assert_equals(getUnicodeBidi(element),'normal','invalid dir value');
     83    },`UA stylesheet rule for unicode-bidi, for <input type=${type}>`);
     84  }
     85 
     86  for(let tagname of ['textarea','pre']) {
     87    test((t) => {
     88      const element = document.createElement(tagname);
     89      t.add_cleanup(() => element.remove());
     90      document.body.appendChild(element);
     91      const expectation = tagname === 'textarea' ? 'normal' : 'isolate';
     92      assert_equals(getUnicodeBidi(element),expectation);
     93      element.setAttribute('dir','ltr');
     94      assert_equals(getUnicodeBidi(element),'isolate','with dir=ltr');
     95      element.setAttribute('dir','LtR');
     96      assert_equals(getUnicodeBidi(element),'isolate','with dir=LtR (case insensitive)');
     97      element.setAttribute('dir','rtl');
     98      assert_equals(getUnicodeBidi(element),'isolate','with dir=rtl');
     99      element.setAttribute('dir','auto');
    100      assert_equals(getUnicodeBidi(element),'plaintext','with dir=auto');
    101      element.setAttribute('dir','AuTo');
    102      assert_equals(getUnicodeBidi(element),'plaintext','with dir=auto (case insensitive)');
    103      element.setAttribute('dir','INVALID');
    104      assert_equals(getUnicodeBidi(element),expectation,'invalid dir value');
    105    },`UA stylesheet rule for unicode-bidi, for <${tagname}>`);
    106  }
    107 </script>