browser_tester 1.5.0

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

#[test]
fn element_prepend_prepending_element_matches_mdn_example() -> Result<()> {
    let html = r#"
        <button id='run'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const div = document.createElement('div');
            const p = document.createElement('p');
            const span = document.createElement('span');
            div.append(p);
            div.prepend(span);

            document.getElementById('result').textContent = [
              div.childNodes.length,
              div.childNodes[0].tagName,
              div.childNodes[1].tagName
            ].join(':');
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text("#result", "2:SPAN:P")?;
    Ok(())
}

#[test]
fn element_prepend_prepending_text_matches_mdn_example() -> Result<()> {
    let html = r#"
        <button id='run'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const div = document.createElement('div');
            div.append('Some text');
            div.prepend('Headline: ');

            document.getElementById('result').textContent = [
              div.textContent,
              div.childNodes.length,
              div.childNodes[0].nodeName,
              div.childNodes[1].nodeName
            ].join(':');
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text("#result", "Headline: Some text:2:#text:#text")?;
    Ok(())
}

#[test]
fn element_prepend_prepending_element_and_text_matches_mdn_example() -> Result<()> {
    let html = r#"
        <button id='run'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const div = document.createElement('div');
            const p = document.createElement('p');
            div.prepend('Some text', p);

            document.getElementById('result').textContent = [
              div.childNodes.length,
              div.childNodes[0].nodeName,
              div.childNodes[1].tagName,
              div.textContent
            ].join(':');
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text("#result", "2:#text:P:Some text")?;
    Ok(())
}

#[test]
fn element_prepend_returns_undefined_and_preserves_argument_order() -> Result<()> {
    let html = r#"
        <button id='run'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const div = document.createElement('div');
            const existing = document.createElement('p');
            existing.id = 'existing';
            div.append(existing);

            const a = document.createElement('a');
            const b = document.createElement('b');
            const returned = div.prepend(a, 'x', b);

            document.getElementById('result').textContent = [
              returned === undefined,
              div.childNodes.length,
              div.childNodes[0].tagName,
              div.childNodes[1].nodeName,
              div.childNodes[2].tagName,
              div.childNodes[3].id
            ].join(':');
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text("#result", "true:4:A:#text:B:existing")?;
    Ok(())
}