lofty-rs/tests/files/mpc.rs

84 lines
2.2 KiB
Rust
Raw Normal View History

2023-05-20 23:49:18 +00:00
use crate::{set_artist, temp_file, verify_artist};
use lofty::{
FileType, ItemKey, ItemValue, ParseOptions, Probe, TagExt, TagItem, TagType, TaggedFileExt,
};
use std::io::{Seek, Write};
2023-05-21 16:35:13 +00:00
// Marker test so IntelliJ Rust recognizes this as a test module
2023-05-20 23:49:18 +00:00
#[test]
2023-05-21 16:35:13 +00:00
fn fake() {}
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
macro_rules! generate_tests {
($stream_version:ident, $path:literal) => {
paste::paste! {
#[test]
fn [<read_ $stream_version>]() {
// Here we have an MPC file with an ID3v2, ID3v1, and an APEv2 tag
let file = Probe::open($path)
.unwrap()
.options(ParseOptions::new().read_properties(false))
.read()
.unwrap();
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
assert_eq!(file.file_type(), FileType::Mpc);
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
// Verify the APE tag first
crate::verify_artist!(file, primary_tag, "Foo artist", 1);
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
// Now verify ID3v1 (read only)
crate::verify_artist!(file, tag, TagType::Id3v1, "Bar artist", 1);
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
// Finally, verify ID3v2 (read only)
crate::verify_artist!(file, tag, TagType::Id3v2, "Baz artist", 1);
}
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
#[test]
fn [<write_ $stream_version>]() {
let mut file = temp_file!($path);
2023-05-20 23:49:18 +00:00
2023-05-21 16:35:13 +00:00
let mut tagged_file = Probe::new(&mut file)
.options(ParseOptions::new().read_properties(false))
.guess_file_type()
.unwrap()
.read()
.unwrap();
assert_eq!(tagged_file.file_type(), FileType::Mpc);
// APE
crate::set_artist!(tagged_file, primary_tag_mut, "Foo artist", 1 => file, "Bar artist");
// Now reread the file
file.rewind().unwrap();
let mut tagged_file = Probe::new(&mut file)
.options(ParseOptions::new().read_properties(false))
.guess_file_type()
.unwrap()
.read()
.unwrap();
crate::set_artist!(tagged_file, primary_tag_mut, "Bar artist", 1 => file, "Foo artist");
}
#[test]
fn [<remove_id3v2_ $stream_version>]() {
crate::remove_tag!($path, TagType::Id3v2);
}
#[test]
fn [<remove_id3v1_ $stream_version>]() {
crate::remove_tag!($path, TagType::Id3v1);
}
#[test]
fn [<remove_ape_ $stream_version>]() {
crate::remove_tag!($path, TagType::Ape);
}
}
};
2023-05-20 23:49:18 +00:00
}
2023-05-21 16:35:13 +00:00
generate_tests!(sv8, "tests/files/assets/minimal/mpc_sv8.mpc");
generate_tests!(sv7, "tests/files/assets/minimal/mpc_sv7.mpc");