browser-commander 0.18.0

Universal browser automation library that supports multiple browser engines with a unified API
Documentation
use browser_commander::{
    build_real_browser_args, launch_and_connect_real_browser, launch_real_browser,
    RealBrowserOptions,
};

#[test]
fn real_browser_api_builds_a_clean_command_line() {
    let options = RealBrowserOptions::playwright()
        .channel("chrome")
        .user_data_dir("dedicated-profile")
        .remote_debugging_port(9333)
        .headless(true)
        .with_args(vec!["--lang=en-US".to_string()]);

    let arguments = build_real_browser_args(&options).unwrap();

    assert_eq!(
        arguments,
        [
            "--user-data-dir=dedicated-profile",
            "--remote-debugging-port=9333",
            "--headless=new",
            "--lang=en-US",
            "about:blank",
        ]
    );

    let _short_helper = launch_real_browser;
    let _compatible_helper = launch_and_connect_real_browser;
}

#[test]
fn real_browser_api_adds_restrictions_only_on_request() {
    let options = RealBrowserOptions::chromiumoxide()
        .user_data_dir("dedicated-profile")
        .remote_debugging_port(9333)
        .restrictions(["basic-password-store"])
        .with_args(vec!["--legacy-arg".to_string()])
        .with_extra_args(vec!["--lang=en-US".to_string()]);

    let arguments = build_real_browser_args(&options).unwrap();
    assert_eq!(
        arguments,
        [
            "--user-data-dir=dedicated-profile",
            "--remote-debugging-port=9333",
            "--password-store=basic",
            "--legacy-arg",
            "--lang=en-US",
            "about:blank",
        ]
    );
}

#[test]
fn real_browser_api_rejects_managed_arguments() {
    let options = RealBrowserOptions::chromiumoxide()
        .user_data_dir("dedicated-profile")
        .remote_debugging_port(9333)
        .with_args(vec!["--user-data-dir=other-profile".to_string()]);

    let error = build_real_browser_args(&options).unwrap_err();
    assert!(error.to_string().contains("managed by launch_real_browser"));
}

#[test]
fn real_browser_api_refuses_an_ephemeral_port() {
    let options = RealBrowserOptions::chromiumoxide()
        .user_data_dir("dedicated-profile")
        .remote_debugging_port(0);

    let error = build_real_browser_args(&options).unwrap_err();
    assert!(error.to_string().contains("AutomationControlled"));
}