84 lines
2.2 KiB
Rust
84 lines
2.2 KiB
Rust
use std::io::Write;
|
|
use std::path::PathBuf;
|
|
|
|
use musicfs::origins::local::file_io::{assemble_flac_read, read_bytes_at};
|
|
|
|
fn file_reader(path: PathBuf) -> impl Fn(u64, usize) -> std::io::Result<Vec<u8>> {
|
|
return move |offset, len| read_bytes_at(&path, offset, len);
|
|
}
|
|
|
|
#[test]
|
|
fn assemble_flac_read_picture_header_region() {
|
|
let mut f = tempfile::NamedTempFile::new().unwrap();
|
|
let data: Vec<u8> = (0..100).collect();
|
|
f.write_all(&data).unwrap();
|
|
f.flush().unwrap();
|
|
let path = f.path().to_path_buf();
|
|
|
|
let header = b"ABCD";
|
|
let pic_hdr = vec![0x86u8, 0x00, 0x00, 0x05];
|
|
let pic_ranges = [(10u64, 5u64)];
|
|
let real_audio_start = 50u64;
|
|
|
|
let reader = file_reader(path);
|
|
let result = assemble_flac_read(
|
|
&reader,
|
|
header,
|
|
&[pic_hdr.clone()],
|
|
&pic_ranges,
|
|
real_audio_start,
|
|
4,
|
|
4,
|
|
)
|
|
.unwrap();
|
|
|
|
assert_eq!(result, pic_hdr);
|
|
}
|
|
|
|
#[test]
|
|
fn assemble_flac_read_picture_data_region() {
|
|
let mut f = tempfile::NamedTempFile::new().unwrap();
|
|
let data: Vec<u8> = (0..100).collect();
|
|
f.write_all(&data).unwrap();
|
|
f.flush().unwrap();
|
|
let path = f.path().to_path_buf();
|
|
|
|
let header = b"ABCD";
|
|
let pic_hdr = vec![0x86u8, 0x00, 0x00, 0x05];
|
|
let pic_ranges = [(10u64, 5u64)];
|
|
let real_audio_start = 50u64;
|
|
|
|
let reader = file_reader(path);
|
|
let result = assemble_flac_read(
|
|
&reader,
|
|
header,
|
|
&[pic_hdr.clone()],
|
|
&pic_ranges,
|
|
real_audio_start,
|
|
8,
|
|
5,
|
|
)
|
|
.unwrap();
|
|
|
|
assert_eq!(result, vec![10, 11, 12, 13, 14]);
|
|
}
|
|
|
|
#[test]
|
|
fn assemble_flac_read_full_virtual_layout() {
|
|
let mut f = tempfile::NamedTempFile::new().unwrap();
|
|
let data: Vec<u8> = (0..200).map(|i| i as u8).collect();
|
|
f.write_all(&data).unwrap();
|
|
f.flush().unwrap();
|
|
let path = f.path().to_path_buf();
|
|
|
|
let header = vec![0xAA; 8];
|
|
let real_audio_start = 100u64;
|
|
|
|
let reader = file_reader(path);
|
|
let result = assemble_flac_read(&reader, &header, &[], &[], real_audio_start, 0, 18).unwrap();
|
|
|
|
let mut expected = vec![0xAA; 8];
|
|
expected.extend_from_slice(&(100..110).map(|i| i as u8).collect::<Vec<u8>>());
|
|
assert_eq!(result, expected);
|
|
}
|