browser_tester 1.5.0

Deterministic lightweight browser runtime for Rust tests
Documentation
use super::*;

#[test]
fn ul_has_implicit_list_role_and_nested_list_structure_works() -> Result<()> {
    let html = r#"
        <ul id='ingredients'>
          <li id='milk'>Milk</li>
          <li id='cheese'>
            Cheese
            <ul id='nested-cheese'>
              <li id='blue'>Blue cheese</li>
              <li id='feta'>Feta</li>
            </ul>
          </li>
        </ul>

        <button id='run' type='button'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const ingredients = document.getElementById('ingredients');
            const nested = document.getElementById('nested-cheese');
            const cheese = document.getElementById('cheese');

            document.getElementById('result').textContent =
              ingredients.role + ':' +
              ingredients.tagName + ':' +
              document.querySelectorAll('#ingredients > li').length + ':' +
              document.getElementById('milk').role + ':' +
              nested.role + ':' +
              document.querySelectorAll('#nested-cheese > li').length + ':' +
              cheese.textContent.replace(/\s+/g, ' ').trim().includes('Blue cheese') + ':' +
              document.getElementById('feta').textContent.trim();
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text("#result", "list:UL:2:listitem:list:2:true:Feta")?;
    Ok(())
}

#[test]
fn ul_type_compact_and_role_override_roundtrip_work() -> Result<()> {
    let html = r#"
        <ul id='foods' type='square' compact>
          <li>Apples</li>
          <li>Bananas</li>
          <li>Cherries</li>
        </ul>

        <button id='run' type='button'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const foods = document.getElementById('foods');
            const initial =
              foods.role + ':' +
              foods.getAttribute('type') + ':' +
              foods.getAttribute('compact') + ':' +
              foods.querySelectorAll('li').length;

            foods.role = 'menu';
            const assigned = foods.role + ':' + foods.getAttribute('role');

            foods.removeAttribute('role');
            const restored = foods.role + ':' + (foods.getAttribute('role') === null);

            foods.setAttribute('type', 'circle');
            foods.removeAttribute('compact');
            const attrs =
              foods.getAttribute('type') + ':' +
              (foods.getAttribute('compact') === null);

            document.getElementById('result').textContent =
              initial + '|' + assigned + '|' + restored + '|' + attrs;
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text(
        "#result",
        "list:square:true:3|menu:menu|list:true|circle:true",
    )?;
    Ok(())
}