use nuts_memory::MemoryBackend;
use crate::entry::immut::{InnerEntry, SymlinkEntry};
use crate::entry::FULL;
use crate::tests::setup_archive_with_bsize;
use crate::Archive;
const DIGITS: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
fn load_first(archive: &mut Archive<MemoryBackend>) -> SymlinkEntry<MemoryBackend> {
let inner = InnerEntry::first(&mut archive.pager, &mut archive.tree)
.unwrap()
.unwrap();
SymlinkEntry::new(inner).unwrap()
}
#[test]
fn empty_target() {
let mut archive = setup_archive_with_bsize(FULL as u32);
archive.append_symlink("f1", "").build().unwrap();
let entry = load_first(&mut archive);
assert_eq!(entry.target(), "");
}
#[test]
fn target_half_chunk() {
let mut archive = setup_archive_with_bsize(FULL as u32);
let target = (0..32)
.map(|i| DIGITS[i % 10].to_string())
.fold(String::new(), |mut acc, s| {
acc.push_str(&s);
acc
});
assert_eq!(target.bytes().len(), 32);
archive.append_symlink("f1", &target).build().unwrap();
let entry = load_first(&mut archive);
assert_eq!(entry.target(), target);
}
#[test]
fn target_full_chunk() {
let mut archive = setup_archive_with_bsize(FULL as u32);
let target = (0..64)
.map(|i| DIGITS[i % 10].to_string())
.fold(String::new(), |mut acc, s| {
acc.push_str(&s);
acc
});
assert_eq!(target.bytes().len(), 64);
archive.append_symlink("f1", &target).build().unwrap();
let entry = load_first(&mut archive);
assert_eq!(entry.target(), target);
}
#[test]
fn target_full_half_chunk() {
let mut archive = setup_archive_with_bsize(FULL as u32);
let target =
(0..64 + 32)
.map(|i| DIGITS[i % 10].to_string())
.fold(String::new(), |mut acc, s| {
acc.push_str(&s);
acc
});
assert_eq!(target.bytes().len(), 64 + 32);
archive.append_symlink("f1", &target).build().unwrap();
let entry = load_first(&mut archive);
assert_eq!(entry.target(), target);
}