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> { 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 = (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 = (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 = (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::>()); assert_eq!(result, expected); }