rfheadless 0.1.0

A headless browsing engine API for Rust
Documentation
use rfheadless::platform::accessibility::NoopAccessibility;
use rfheadless::platform::device::NoopDeviceEmulation;
use rfheadless::platform::media::NoopMediaHooks;
use rfheadless::platform::service_worker::NoopServiceWorkerManager;
use rfheadless::platform::{
    AccessibilityProvider, DeviceEmulation, MediaHooks, ServiceWorkerManager,
};

#[test]
fn service_worker_noop_dispatch() {
    let m = NoopServiceWorkerManager::new();
    let ev = rfheadless::platform::FetchEvent {
        request_url: "https://example.com/".into(),
        method: "GET".into(),
        headers: Default::default(),
    };
    let res = m.dispatch_fetch(&ev).expect("dispatch should succeed");
    assert_eq!(res, b"noop".to_vec());
}

#[test]
fn device_emulation_metrics_roundtrip() {
    let d = NoopDeviceEmulation::new();
    let before = d.metrics();
    assert_eq!(before.width, 1280);
    d.set_metrics(rfheadless::platform::DeviceMetrics {
        width: 360,
        height: 640,
        dpr: 3.0,
        touch: true,
    });
    let after = d.metrics();
    assert_eq!(after.width, 360);
    assert!(after.touch);
}

#[test]
fn media_hooks_state_transitions() {
    let m = NoopMediaHooks::new();
    assert_eq!(m.state(), rfheadless::platform::MediaState::Paused);
    m.play();
    assert_eq!(m.state(), rfheadless::platform::MediaState::Playing);
    m.pause();
    assert_eq!(m.state(), rfheadless::platform::MediaState::Paused);
}

#[test]
fn accessibility_noop_exports_empty() {
    let a = NoopAccessibility::new();
    let t = a.export_tree();
    assert!(t.nodes.is_empty());
    assert!(t.root_id.is_none());
}