asar-rust 0.1.0

Rust port of @electron/asar — create and extract Electron ASAR archives
Documentation
use asar_rust::pickle::Pickle;

#[test]
fn test_create_empty_pickle() {
    let pickle = Pickle::new();
    let buf = pickle.into_buffer();
    assert_eq!(buf.len(), 4);
    assert_eq!(u32::from_le_bytes(buf[0..4].try_into().unwrap()), 0);
}

#[test]
fn test_write_read_u32() {
    let mut pickle = Pickle::new();
    pickle.write_u32(42);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_u32(), 42);
}

#[test]
fn test_write_read_string() {
    let mut pickle = Pickle::new();
    pickle.write_string("hello");
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_string(), "hello");
}

#[test]
fn test_write_read_multiple_values() {
    let mut pickle = Pickle::new();
    pickle.write_u32(1);
    pickle.write_string("test");
    pickle.write_u64(999);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_u32(), 1);
    assert_eq!(iter.read_string(), "test");
    assert_eq!(iter.read_u64(), 999);
}

#[test]
fn test_write_read_i32() {
    let mut pickle = Pickle::new();
    pickle.write_i32(-42);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_i32(), -42);
}

#[test]
fn test_write_read_i64() {
    let mut pickle = Pickle::new();
    pickle.write_i64(-123456789);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_i64(), -123456789);
}

#[test]
fn test_write_read_bool() {
    let mut pickle = Pickle::new();
    pickle.write_bool(true);
    pickle.write_bool(false);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_bool(), true);
    assert_eq!(iter.read_bool(), false);
}

#[test]
fn test_write_read_float() {
    let mut pickle = Pickle::new();
    pickle.write_float(3.14);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert!((iter.read_float() - 3.14).abs() < 0.001);
}

#[test]
fn test_write_read_double() {
    let mut pickle = Pickle::new();
    pickle.write_double(3.14159265358979);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert!((iter.read_double() - 3.14159265358979).abs() < 0.000001);
}

#[test]
fn test_write_read_bytes() {
    let mut pickle = Pickle::new();
    pickle.write_bytes(&[1, 2, 3, 4, 5]);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_bytes(5), vec![1, 2, 3, 4, 5]);
}

#[test]
fn test_empty_string() {
    let mut pickle = Pickle::new();
    pickle.write_string("");
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_string(), "");
}

#[test]
fn test_write_read_boundary_values() {
    let mut pickle = Pickle::new();
    pickle.write_u32(u32::MAX);
    pickle.write_i32(i32::MIN);
    pickle.write_u64(u64::MAX);
    pickle.write_i64(i64::MIN);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_u32(), u32::MAX);
    assert_eq!(iter.read_i32(), i32::MIN);
    assert_eq!(iter.read_u64(), u64::MAX);
    assert_eq!(iter.read_i64(), i64::MIN);
}

#[test]
fn test_write_read_zero_length_bytes() {
    let mut pickle = Pickle::new();
    pickle.write_bytes(&[]);
    let buf = pickle.into_buffer();

    let pickle = Pickle::from_buffer(&buf);
    let mut iter = pickle.iter();
    assert_eq!(iter.read_bytes(0), Vec::<u8>::new());
}