browser_tester 1.5.0

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

#[test]
fn time_implicit_role_and_datetime_reflection_work() -> Result<()> {
    let html = r#"
        <p>
          The concert starts at
          <time id='start' datetime='2018-07-07T20:00:00'>20:00</time>
          and lasts for
          <time id='duration' datetime='PT2H30M'>2h 30m</time>.
        </p>
        <button id='run'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const start = document.getElementById('start');
            const duration = document.getElementById('duration');

            const initial =
              start.role + ':' +
              start.dateTime + ':' +
              start.getAttribute('datetime') + ':' +
              start.textContent.trim() + ':' +
              duration.dateTime + ':' +
              duration.textContent.trim();

            start.dateTime = '2018-07-07T21:15:00';
            duration.setAttribute('datetime', 'PT3H');
            const updated =
              start.dateTime + ':' +
              start.getAttribute('datetime') + ':' +
              duration.dateTime + ':' +
              duration.getAttribute('datetime');

            start.removeAttribute('datetime');
            const removed = start.dateTime + ':' + (start.getAttribute('datetime') === null);

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

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text(
        "#result",
        "time:2018-07-07T20:00:00:2018-07-07T20:00:00:20:00:PT2H30M:2h 30m|2018-07-07T21:15:00:2018-07-07T21:15:00:PT3H:PT3H|:true",
    )?;
    Ok(())
}

#[test]
fn time_role_override_and_datetime_roundtrip_work() -> Result<()> {
    let html = r#"
        <p>The event date is <time id='event'>July 7</time>.</p>
        <button id='run'>run</button>
        <p id='result'></p>
        <script>
          document.getElementById('run').addEventListener('click', () => {
            const eventTime = document.getElementById('event');
            const initial =
              eventTime.role + ':' +
              eventTime.dateTime + ':' +
              (eventTime.getAttribute('datetime') === null);

            eventTime.dateTime = '2018-07-07';
            const assignedDateTime =
              eventTime.dateTime + ':' + eventTime.getAttribute('datetime');

            eventTime.role = 'note';
            const assignedRole = eventTime.role + ':' + eventTime.getAttribute('role');
            eventTime.removeAttribute('role');
            const restoredRole = eventTime.role + ':' + (eventTime.getAttribute('role') === null);

            eventTime.removeAttribute('datetime');
            const removedDateTime =
              eventTime.dateTime + ':' + (eventTime.getAttribute('datetime') === null);

            document.getElementById('result').textContent =
              initial + '|' + assignedDateTime + '|' + assignedRole + '|' + restoredRole + '|' + removedDateTime + '|' + eventTime.tagName;
          });
        </script>
        "#;

    let mut h = Harness::from_html(html)?;
    h.click("#run")?;
    h.assert_text(
        "#result",
        "time::true|2018-07-07:2018-07-07|note:note|time:true|:true|TIME",
    )?;
    Ok(())
}