radb 0.1.8

A Rust Implement Python AdbUtils
Documentation
#![cfg(feature = "tokio_async")]

use radb::client::AdbDevice;
use std::io::Write;

const DEFAULT_ADB_ADDR: &str = "127.0.0.1:5037";

fn configured_device() -> Result<Option<AdbDevice<&'static str>>, Box<dyn std::error::Error>> {
    let Ok(serial) = std::env::var("RADB_TEST_SERIAL") else {
        return Ok(None);
    };
    radb::utils::start_adb_server_result()?;
    Ok(Some(AdbDevice::new(serial, DEFAULT_ADB_ADDR)))
}

#[tokio::test]
async fn push_pull_round_trip_skips_without_radb_test_serial(
) -> Result<(), Box<dyn std::error::Error>> {
    let Some(mut device) = configured_device()? else {
        return Ok(());
    };

    let mut local = tempfile::NamedTempFile::new()?;
    let expected = b"radb\0async\xffroundtrip\n".to_vec();
    local.write_all(&expected)?;
    local.flush()?;

    let remote = format!(
        "/data/local/tmp/radb-async-roundtrip-{}.bin",
        std::process::id()
    );
    let pulled_dir = tempfile::tempdir()?;
    let pulled_path = pulled_dir.path().join("pulled.bin");

    device.push(local.path().to_str().unwrap(), &remote).await?;
    let pulled_size = device.pull(&remote, &pulled_path).await?;
    let actual = std::fs::read(&pulled_path)?;
    let _ = device.remove(&remote).await;

    assert_eq!(pulled_size, expected.len());
    assert_eq!(actual, expected);
    Ok(())
}

#[tokio::test]
async fn screenshot_skips_without_radb_test_serial() -> Result<(), Box<dyn std::error::Error>> {
    let Some(mut device) = configured_device()? else {
        return Ok(());
    };

    let image = device.screenshot().await?;
    assert!(image.width() > 0);
    assert!(image.height() > 0);
    Ok(())
}