viewpoint-cdp 0.4.3

Low-level Chrome DevTools Protocol implementation over WebSocket
Documentation
use crate::transport::{CdpEvent, CdpMessage, CdpRequest, CdpResponse};

#[test]
fn test_cdp_request_serialization() {
    let request = CdpRequest {
        id: 1,
        method: "Target.createTarget".to_string(),
        params: Some(serde_json::json!({"url": "about:blank"})),
        session_id: None,
    };

    let json = serde_json::to_string(&request).unwrap();
    assert!(json.contains("\"id\":1"));
    assert!(json.contains("\"method\":\"Target.createTarget\""));
    assert!(json.contains("\"url\":\"about:blank\""));
    assert!(!json.contains("sessionId"));
}

#[test]
fn test_cdp_response_deserialization() {
    let json = r#"{"id": 1, "result": {"targetId": "abc123"}}"#;
    let response: CdpResponse = serde_json::from_str(json).unwrap();

    assert_eq!(response.id, 1);
    assert!(response.result.is_some());
    assert!(response.error.is_none());
}

#[test]
fn test_cdp_event_deserialization() {
    let json = r#"{"method": "Page.loadEventFired", "params": {"timestamp": 123.456}}"#;
    let event: CdpEvent = serde_json::from_str(json).unwrap();

    assert_eq!(event.method, "Page.loadEventFired");
    assert!(event.params.is_some());
}

#[test]
fn test_cdp_message_discrimination() {
    let resp_json = r#"{"id": 1, "result": {}}"#;
    let event_json = r#"{"method": "Page.loadEventFired", "params": {}}"#;

    let resp: CdpMessage = serde_json::from_str(resp_json).unwrap();
    let event: CdpMessage = serde_json::from_str(event_json).unwrap();

    assert!(resp.is_response_for(1));
    assert!(!resp.is_response_for(2));
    assert!(resp.into_response().is_some());
    assert!(event.into_event().is_some());
}