use asar_rust::asar::*;
use std::fs;
#[test]
fn test_roundtrip_empty_archive() {
let dir = std::env::temp_dir().join("asar-rt-empty");
let _ = fs::remove_dir_all(&dir);
fs::create_dir_all(&dir).unwrap();
let src = dir.join("src");
fs::create_dir_all(&src).unwrap();
let asar_path = dir.join("test.asar");
create_package(&src, &asar_path).unwrap();
let files = list_package(&asar_path, None).unwrap();
assert!(files.is_empty());
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn test_roundtrip_nested_directories() {
let dir = std::env::temp_dir().join("asar-rt-nested");
let _ = fs::remove_dir_all(&dir);
fs::create_dir_all(&dir).unwrap();
let src = dir.join("src");
fs::create_dir_all(src.join("a")).unwrap();
fs::create_dir_all(src.join("a/b")).unwrap();
fs::create_dir_all(src.join("a/b/c")).unwrap();
fs::write(src.join("root.txt"), b"root").unwrap();
fs::write(src.join("a/b/nested.txt"), b"nested").unwrap();
let asar_path = dir.join("nested.asar");
create_package(&src, &asar_path).unwrap();
let files = list_package(&asar_path, None).unwrap();
assert!(files.contains(&"/a".to_string()));
assert!(files.contains(&"/a/b".to_string()));
assert!(files.contains(&"/a/b/c".to_string()));
assert!(files.contains(&"/a/b/nested.txt".to_string()));
assert!(files.contains(&"/root.txt".to_string()));
let out = dir.join("out");
extract_all(&asar_path, &out).unwrap();
assert_eq!(
fs::read_to_string(out.join("root.txt")).unwrap(),
"root"
);
assert!(out.join("a/b").exists());
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn test_roundtrip_large_file() {
let dir = std::env::temp_dir().join("asar-rt-large");
let _ = fs::remove_dir_all(&dir);
fs::create_dir_all(&dir).unwrap();
let src = dir.join("src");
fs::create_dir_all(&src).unwrap();
let size = 5 * 1024 * 1024;
let data = vec![0x41u8; size];
fs::write(src.join("large.bin"), &data).unwrap();
let asar_path = dir.join("large.asar");
create_package(&src, &asar_path).unwrap();
let files = list_package(&asar_path, None).unwrap();
assert_eq!(files.len(), 1);
let out = dir.join("out");
extract_all(&asar_path, &out).unwrap();
let extracted = fs::read(out.join("large.bin")).unwrap();
assert_eq!(extracted.len(), size);
assert_eq!(extracted, data);
let _ = fs::remove_dir_all(&dir);
}