neomacs 0.0.2

Standalone Rust binary for Neomacs (no C dependency)
use super::*;

#[test]
fn key_release_is_dropped_by_core_transport_owner() {
    let event = convert_display_event(DisplayEvent::Key {
        keysym: keyboard::XK_RETURN,
        modifiers: 0,
        pressed: false,
        emacs_frame_id: 0,
    });
    assert!(event.is_none());
}

#[test]
fn key_transport_preserves_source_frame_identity() {
    let event = convert_display_event(DisplayEvent::Key {
        keysym: 'a' as u32,
        modifiers: keyboard::RENDER_CTRL_MASK,
        pressed: true,
        emacs_frame_id: 42,
    });

    match event {
        Some(KbInputEvent::KeyPress {
            key,
            emacs_frame_id,
        }) => {
            assert_eq!(
                key,
                keyboard::KeyEvent::char_with_mods('a', keyboard::Modifiers::ctrl())
            );
            assert_eq!(emacs_frame_id, 42);
        }
        other => panic!("unexpected event: {other:?}"),
    }
}

#[test]
fn mouse_modifiers_use_core_transport_mapping() {
    let event = convert_display_event(DisplayEvent::MouseMove {
        x: 1.0,
        y: 2.0,
        modifiers: keyboard::RENDER_SHIFT_MASK | keyboard::RENDER_CTRL_MASK,
        target_frame_id: 7,
    });

    match event {
        Some(KbInputEvent::MouseMove {
            modifiers,
            target_frame_id,
            ..
        }) => {
            assert!(modifiers.shift);
            assert!(modifiers.ctrl);
            assert!(!modifiers.meta);
            assert_eq!(target_frame_id, 7);
        }
        other => panic!("unexpected event: {other:?}"),
    }
}

#[test]
fn mouse_button_preserves_target_frame_for_keyboard_owner() {
    let event = convert_display_event(DisplayEvent::MouseButton {
        button: 1,
        x: 10.0,
        y: 20.0,
        pressed: true,
        modifiers: 0,
        target_frame_id: 42,
        webkit_id: 0,
        webkit_rel_x: 0,
        webkit_rel_y: 0,
    });

    match event {
        Some(KbInputEvent::MousePress {
            target_frame_id: 42,
            ..
        }) => {}
        other => panic!("unexpected event: {other:?}"),
    }
}

#[test]
fn window_focus_preserves_frame_id_for_keyboard_owner() {
    let event = convert_display_event(DisplayEvent::WindowFocus {
        focused: true,
        emacs_frame_id: 42,
    });

    match event {
        Some(KbInputEvent::Focus {
            focused: true,
            emacs_frame_id: 42,
        }) => {}
        other => panic!("unexpected event: {other:?}"),
    }
}

#[test]
fn window_close_preserves_frame_id_for_keyboard_owner() {
    let event = convert_display_event(DisplayEvent::WindowClose { emacs_frame_id: 42 });

    match event {
        Some(KbInputEvent::WindowClose { emacs_frame_id: 42 }) => {}
        other => panic!("unexpected event: {other:?}"),
    }
}

#[test]
fn monitor_changes_convert_to_core_monitor_snapshot() {
    let event = convert_display_event(DisplayEvent::MonitorsChanged {
        monitors: vec![DisplayMonitorInfo {
            x: 10,
            y: 20,
            width: 1920,
            height: 1080,
            scale: 1.5,
            width_mm: 510,
            height_mm: 290,
            name: Some("DP-1".to_string()),
        }],
    });

    match event {
        Some(KbInputEvent::MonitorsChanged { monitors }) => {
            assert_eq!(monitors.len(), 1);
            assert_eq!(monitors[0].name.as_deref(), Some("DP-1"));
            assert_eq!(monitors[0].width, 1920);
            assert_eq!(monitors[0].height, 1080);
            assert_eq!(monitors[0].scale, 1.5);
        }
        other => panic!("unexpected event: {other:?}"),
    }
}