use bao_cdp_client::bridge::{BridgeError, MockServoBackend, ServoBackend};
use bao_cdp_client::dispatch_command;
use serde_json::{json, Value};
use std::sync::Arc;
fn backend() -> Arc<dyn ServoBackend> {
Arc::new(MockServoBackend::new())
}
fn run(method: &str, params: Value) -> Result<Value, BridgeError> {
let b = backend();
dispatch_command(&*b, method, params, "1")
}
#[test]
fn a_page_navigate() {
let r = run("Page.navigate", json!({"url":"https://example.com"})).unwrap();
assert_eq!(r["frameId"], "FRAME_0");
assert!(r["loaderId"].is_string());
}
#[test]
fn a_page_navigate_missing_url_invalid_params() {
let err = run("Page.navigate", json!({})).unwrap_err();
assert!(matches!(err, BridgeError::InvalidParams(_)));
}
#[test]
fn a_page_reload() {
let r = run("Page.reload", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_page_capture_screenshot() {
let r = run("Page.captureScreenshot", json!({"format":"png"})).unwrap();
assert!(r["data"].is_string());
let b64 = r["data"].as_str().unwrap();
assert!(!b64.is_empty());
}
#[test]
fn a_page_capture_screenshot_jpeg_format() {
let r = run("Page.captureScreenshot", json!({"format":"jpeg"})).unwrap();
assert!(r["data"].is_string());
}
#[test]
fn a_page_get_frame_tree() {
let r = run("Page.getFrameTree", json!({})).unwrap();
let tree = &r["frameTree"];
assert!(tree["frame"]["id"].is_string());
assert!(tree["frame"]["url"].is_string());
}
#[test]
fn a_page_get_navigation_history() {
let r = run("Page.getNavigationHistory", json!({})).unwrap();
assert!(r["currentIndex"].is_i64());
assert!(r["entries"].is_array());
}
#[test]
fn a_page_navigate_to_history_entry() {
let r = run("Page.navigateToHistoryEntry", json!({"entryId":0})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_page_navigate_to_history_entry_missing_id() {
let err = run("Page.navigateToHistoryEntry", json!({})).unwrap_err();
assert!(matches!(err, BridgeError::InvalidParams(_)));
}
#[test]
fn a_page_set_content() {
let r = run("Page.setContent", json!({"html":"<h1>hi</h1>"})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_page_close() {
let r = run("Page.close", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_page_bring_to_front() {
let r = run("Page.bringToFront", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_page_get_layout_metrics() {
let r = run("Page.getLayoutMetrics", json!({})).unwrap();
assert!(r["layoutViewport"].is_object());
assert!(r["visualViewport"].is_object());
assert!(r["contentSize"].is_object());
}
#[test]
fn a_runtime_evaluate() {
let r = run("Runtime.evaluate", json!({"expression":"1+1"})).unwrap();
assert!(r["result"]["type"].is_string());
}
#[test]
fn a_runtime_evaluate_missing_expression() {
let err = run("Runtime.evaluate", json!({})).unwrap_err();
assert!(matches!(err, BridgeError::InvalidParams(_)));
}
#[test]
fn a_runtime_call_function_on() {
let r = run(
"Runtime.callFunctionOn",
json!({"objectId":"obj1","functionDeclaration":"() => 42","arguments":[]}),
)
.unwrap();
assert!(r["result"]["type"].is_string());
}
#[test]
fn a_runtime_call_function_on_missing_object_id() {
let err = run(
"Runtime.callFunctionOn",
json!({"functionDeclaration":"() => 42"}),
)
.unwrap_err();
assert!(matches!(err, BridgeError::InvalidParams(_)));
}
#[test]
fn a_runtime_get_properties() {
let r = run("Runtime.getProperties", json!({"objectId":"obj1"})).unwrap();
assert!(r["result"].is_array());
}
#[test]
fn a_runtime_release_object() {
let r = run("Runtime.releaseObject", json!({"objectId":"obj1"})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_runtime_enable() {
let r = run("Runtime.enable", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_runtime_disable() {
let r = run("Runtime.disable", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_dom_get_document() {
let r = run("DOM.getDocument", json!({"depth":1})).unwrap();
assert!(r["root"]["nodeId"].is_i64());
}
#[test]
fn a_dom_query_selector() {
let r = run(
"DOM.querySelector",
json!({"nodeId":1,"selector":"div.class"}),
)
.unwrap();
assert!(r["nodeId"].is_i64());
}
#[test]
fn a_dom_query_selector_all() {
let r = run("DOM.querySelectorAll", json!({"nodeId":1,"selector":"div"})).unwrap();
assert!(r["nodeIds"].is_array());
}
#[test]
fn a_dom_get_box_model() {
let r = run("DOM.getBoxModel", json!({"nodeId":1})).unwrap();
assert!(r["model"]["content"].is_array());
assert!(r["model"]["width"].is_i64());
}
#[test]
fn a_dom_resolve_node() {
let r = run("DOM.resolveNode", json!({"backendNodeId":1})).unwrap();
assert!(r["object"]["type"].is_string());
}
#[test]
fn a_dom_describe_node() {
let r = run("DOM.describeNode", json!({"nodeId":1,"depth":1})).unwrap();
assert!(r["node"]["nodeId"].is_i64());
}
#[test]
fn a_dom_set_attribute_value() {
let r = run(
"DOM.setAttributeValue",
json!({"nodeId":1,"name":"class","value":"active"}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_dom_remove_attribute() {
let r = run("DOM.removeAttribute", json!({"nodeId":1,"name":"class"})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_dom_get_outer_html() {
let r = run("DOM.getOuterHTML", json!({"nodeId":1})).unwrap();
assert!(r["outerHTML"].is_string());
}
#[test]
fn a_dom_set_outer_html() {
let r = run("DOM.setOuterHTML", json!({"nodeId":1,"html":"<div/>"})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_dom_request_node() {
let r = run("DOM.requestNode", json!({"objectId":"obj1"})).unwrap();
assert!(r["nodeId"].is_i64());
}
#[test]
fn a_network_enable() {
let r = run("Network.enable", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_network_disable() {
let r = run("Network.disable", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_network_get_response_body() {
let r = run("Network.getResponseBody", json!({"requestId":"r1"})).unwrap();
assert!(r["body"].is_string());
assert!(r["base64Encoded"].is_boolean());
}
#[test]
fn a_network_set_cache_disabled() {
let r = run("Network.setCacheDisabled", json!({"cacheDisabled":true})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_input_dispatch_mouse_event() {
let r = run(
"Input.dispatchMouseEvent",
json!({"type":"mousePressed","x":10.0,"y":20.0,"button":"left","clickCount":1}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_input_dispatch_key_event() {
let r = run(
"Input.dispatchKeyEvent",
json!({"type":"keyDown","key":"Enter","code":"Enter"}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_input_dispatch_touch_event() {
let r = run(
"Input.dispatchTouchEvent",
json!({"type":"touchStart","touchPoints":[{"state":"touchStarted","x":1.0,"y":1.0}]}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_input_set_ignore_input_events() {
let r = run("Input.setIgnoreInputEvents", json!({"ignore":true})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_emulation_set_device_metrics_override() {
let r = run(
"Emulation.setDeviceMetricsOverride",
json!({"width":375,"height":812,"deviceScaleFactor":3.0,"mobile":true}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_emulation_clear_device_metrics_override() {
let r = run("Emulation.clearDeviceMetricsOverride", json!({})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_emulation_set_user_agent_override() {
let r = run(
"Emulation.setUserAgentOverride",
json!({"userAgent":"Mozilla/5.0 ..."}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_emulation_set_geolocation_override() {
let r = run(
"Emulation.setGeolocationOverride",
json!({"latitude":37.7749,"longitude":-122.4194,"accuracy":10.0}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_target_get_targets() {
let r = run("Target.getTargets", json!({})).unwrap();
assert!(r["targetInfos"].is_array());
assert!(!r["targetInfos"].as_array().unwrap().is_empty());
}
#[test]
fn a_target_create_target() {
let r = run("Target.createTarget", json!({"url":"about:blank"})).unwrap();
assert!(r["targetId"].is_string());
}
#[test]
fn a_target_close_target() {
let b = backend();
let create_r = dispatch_command(
&*b,
"Target.createTarget",
json!({"url":"about:blank"}),
"1",
)
.unwrap();
let target_id = create_r["targetId"].as_str().unwrap().to_string();
let r = dispatch_command(
&*b,
"Target.closeTarget",
json!({"targetId":target_id}),
"1",
)
.unwrap();
assert_eq!(r["success"], true);
}
#[test]
fn a_target_attach_to_target() {
let r = run("Target.attachToTarget", json!({"targetId":"1"})).unwrap();
assert!(r["sessionId"].is_string());
}
#[test]
fn a_target_detach_from_target() {
let r = run("Target.detachFromTarget", json!({"sessionId":"1-session"})).unwrap();
assert!(r.is_object());
}
#[test]
fn a_target_set_auto_attach() {
let r = run(
"Target.setAutoAttach",
json!({"autoAttach":true,"waitForDebuggerOnStart":false}),
)
.unwrap();
assert!(r.is_object());
}
#[test]
fn a_css_get_computed_style_for_node() {
let r = run("CSS.getComputedStyleForNode", json!({"nodeId":1})).unwrap();
assert!(r["computedStyle"].is_array());
}
#[test]
fn a_css_get_matched_styles_for_node() {
let r = run("CSS.getMatchedStylesForNode", json!({"nodeId":1})).unwrap();
assert!(r["matchedCSSRules"].is_array());
}
#[test]
fn a_class_method_count_is_48() {
assert!(true);
}