browser_tester 1.5.0

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

#[test]
fn dispatch_dragover_exposes_data_transfer_object() -> Result<()> {
    let html = r#"
      <div id='drop'></div>
      <p id='out'></p>
      <script>
        const drop = document.getElementById('drop');
        drop.addEventListener('dragover', (event) => {
          event.preventDefault();
          event.dataTransfer.dropEffect = 'copy';
          drop.classList.add('dragging');
          document.getElementById('out').textContent = [
            drop.classList.contains('dragging'),
            event.dataTransfer.dropEffect
          ].join(':');
        });
      </script>
    "#;

    let mut h = Harness::from_html(html)?;
    h.dispatch("#drop", "dragover")?;
    h.assert_text("#out", "true:copy")?;
    Ok(())
}

#[test]
fn drag_event_reuses_data_transfer_wrapper_across_listeners_work() -> Result<()> {
    let html = r#"
      <div id='drop'></div>
      <p id='out'></p>
      <script>
        const drop = document.getElementById('drop');
        let firstRef;

        drop.addEventListener('dragover', (event) => {
          event.preventDefault();
          firstRef = event.dataTransfer;
          event.dataTransfer.dropEffect = 'copy';
          event.dataTransfer.customFlag = 'persisted';
          event.dataTransfer.getData = () => 'shadow-data';
        });

        drop.addEventListener('dragover', (event) => {
          document.getElementById('out').textContent = [
            String(firstRef === event.dataTransfer),
            event.dataTransfer.dropEffect,
            event.dataTransfer.customFlag,
            event.dataTransfer.getData('text/plain')
          ].join(':');
        });
      </script>
    "#;

    let mut h = Harness::from_html(html)?;
    h.dispatch("#drop", "dragover")?;
    h.assert_text("#out", "true:copy:persisted:shadow-data")?;
    Ok(())
}