diff --git a/src/tags/master_playlist/media.rs b/src/tags/master_playlist/media.rs index 8444b3d..a0e57f0 100644 --- a/src/tags/master_playlist/media.rs +++ b/src/tags/master_playlist/media.rs @@ -443,294 +443,293 @@ mod test { use super::*; use pretty_assertions::assert_eq; - #[test] - fn test_display_and_parse() { - macro_rules! generate_tests { - ( $( { $media:expr, $string:expr } ),* $(,)* ) => { + macro_rules! generate_tests { + ( $( { $struct:expr, $str:expr } ),+ $(,)* ) => { + #[test] + fn test_display() { $( - assert_eq!( - $media.to_string(), - $string.to_string() - ); + assert_eq!($struct.to_string(), $str.to_string()); + )+ + } - assert_eq!( - $media, - $string.parse::().unwrap(), - ); - )* + #[test] + fn test_parser() { + $( + assert_eq!($struct, $str.parse().unwrap()); + )+ } } + } - generate_tests! { - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio") - .language("eng") - .name("English") - .is_autoselect(true) - .is_default(true) - .uri("eng/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"eng/prog_index.m3u8\",", - "GROUP-ID=\"audio\",", - "LANGUAGE=\"eng\",", - "NAME=\"English\",", - "DEFAULT=YES,", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .uri("fre/prog_index.m3u8") - .group_id("audio") - .language("fre") - .name("Français") - .is_default(false) - .is_autoselect(true) - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"fre/prog_index.m3u8\",", - "GROUP-ID=\"audio\",", - "LANGUAGE=\"fre\",", - "NAME=\"Français\",", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio") - .language("sp") - .name("Espanol") - .is_autoselect(true) - .is_default(false) - .uri("sp/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"sp/prog_index.m3u8\",", - "GROUP-ID=\"audio\",", - "LANGUAGE=\"sp\",", - "NAME=\"Espanol\",", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-lo") - .language("eng") - .name("English") - .is_autoselect(true) - .is_default(true) - .uri("englo/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"englo/prog_index.m3u8\",", - "GROUP-ID=\"audio-lo\",", - "LANGUAGE=\"eng\",", - "NAME=\"English\",", - "DEFAULT=YES,", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-lo") - .language("fre") - .name("Français") - .is_autoselect(true) - .is_default(false) - .uri("frelo/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"frelo/prog_index.m3u8\",", - "GROUP-ID=\"audio-lo\",", - "LANGUAGE=\"fre\",", - "NAME=\"Français\",", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-lo") - .language("es") - .name("Espanol") - .is_autoselect(true) - .is_default(false) - .uri("splo/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"splo/prog_index.m3u8\",", - "GROUP-ID=\"audio-lo\",", - "LANGUAGE=\"es\",", - "NAME=\"Espanol\",", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-hi") - .language("eng") - .name("English") - .is_autoselect(true) - .is_default(true) - .uri("eng/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"eng/prog_index.m3u8\",", - "GROUP-ID=\"audio-hi\",", - "LANGUAGE=\"eng\",", - "NAME=\"English\",", - "DEFAULT=YES,", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-hi") - .language("fre") - .name("Français") - .is_autoselect(true) - .is_default(false) - .uri("fre/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"fre/prog_index.m3u8\",", - "GROUP-ID=\"audio-hi\",", - "LANGUAGE=\"fre\",", - "NAME=\"Français\",", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-hi") - .language("es") - .name("Espanol") - .is_autoselect(true) - .is_default(false) - .uri("sp/prog_index.m3u8") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "URI=\"sp/prog_index.m3u8\",", - "GROUP-ID=\"audio-hi\",", - "LANGUAGE=\"es\",", - "NAME=\"Espanol\",", - "AUTOSELECT=YES" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Audio) - .group_id("audio-aacl-312") - .language("en") - .name("English") - .is_autoselect(true) - .is_default(true) - .channels(Channels::new(2)) - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=AUDIO,", - "GROUP-ID=\"audio-aacl-312\",", - "LANGUAGE=\"en\",", - "NAME=\"English\",", - "DEFAULT=YES,", - "AUTOSELECT=YES,", - "CHANNELS=\"2\"" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::Subtitles) - .uri("french/ed.ttml") - .group_id("subs") - .language("fra") - .assoc_language("fra") - .name("French") - .is_autoselect(true) - .is_forced(true) - .characteristics("public.accessibility.transcribes-spoken\ - -dialog,public.accessibility.describes-music-and-sound") - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=SUBTITLES,", - "URI=\"french/ed.ttml\",", - "GROUP-ID=\"subs\",", - "LANGUAGE=\"fra\",", - "ASSOC-LANGUAGE=\"fra\",", - "NAME=\"French\",", - "AUTOSELECT=YES,", - "FORCED=YES,", - "CHARACTERISTICS=\"", - "public.accessibility.transcribes-spoken-dialog,", - "public.accessibility.describes-music-and-sound", - "\"" - ) - }, - { - ExtXMedia::builder() - .media_type(MediaType::ClosedCaptions) - .group_id("cc") - .language("sp") - .name("CC2") - .instream_id(InStreamId::Cc2) - .is_autoselect(true) - .build() - .unwrap(), - concat!( - "#EXT-X-MEDIA:", - "TYPE=CLOSED-CAPTIONS,", - "GROUP-ID=\"cc\",", - "LANGUAGE=\"sp\",", - "NAME=\"CC2\",", - "AUTOSELECT=YES,", - "INSTREAM-ID=\"CC2\"" - ) - }, - { - ExtXMedia::new(MediaType::Audio, "foo", "bar"), - "#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"foo\",NAME=\"bar\"" - }, - }; + generate_tests! { + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio") + .language("eng") + .name("English") + .is_autoselect(true) + .is_default(true) + .uri("eng/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"eng/prog_index.m3u8\",", + "GROUP-ID=\"audio\",", + "LANGUAGE=\"eng\",", + "NAME=\"English\",", + "DEFAULT=YES,", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .uri("fre/prog_index.m3u8") + .group_id("audio") + .language("fre") + .name("Français") + .is_default(false) + .is_autoselect(true) + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"fre/prog_index.m3u8\",", + "GROUP-ID=\"audio\",", + "LANGUAGE=\"fre\",", + "NAME=\"Français\",", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio") + .language("sp") + .name("Espanol") + .is_autoselect(true) + .is_default(false) + .uri("sp/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"sp/prog_index.m3u8\",", + "GROUP-ID=\"audio\",", + "LANGUAGE=\"sp\",", + "NAME=\"Espanol\",", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-lo") + .language("eng") + .name("English") + .is_autoselect(true) + .is_default(true) + .uri("englo/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"englo/prog_index.m3u8\",", + "GROUP-ID=\"audio-lo\",", + "LANGUAGE=\"eng\",", + "NAME=\"English\",", + "DEFAULT=YES,", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-lo") + .language("fre") + .name("Français") + .is_autoselect(true) + .is_default(false) + .uri("frelo/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"frelo/prog_index.m3u8\",", + "GROUP-ID=\"audio-lo\",", + "LANGUAGE=\"fre\",", + "NAME=\"Français\",", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-lo") + .language("es") + .name("Espanol") + .is_autoselect(true) + .is_default(false) + .uri("splo/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"splo/prog_index.m3u8\",", + "GROUP-ID=\"audio-lo\",", + "LANGUAGE=\"es\",", + "NAME=\"Espanol\",", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-hi") + .language("eng") + .name("English") + .is_autoselect(true) + .is_default(true) + .uri("eng/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"eng/prog_index.m3u8\",", + "GROUP-ID=\"audio-hi\",", + "LANGUAGE=\"eng\",", + "NAME=\"English\",", + "DEFAULT=YES,", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-hi") + .language("fre") + .name("Français") + .is_autoselect(true) + .is_default(false) + .uri("fre/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"fre/prog_index.m3u8\",", + "GROUP-ID=\"audio-hi\",", + "LANGUAGE=\"fre\",", + "NAME=\"Français\",", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-hi") + .language("es") + .name("Espanol") + .is_autoselect(true) + .is_default(false) + .uri("sp/prog_index.m3u8") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "URI=\"sp/prog_index.m3u8\",", + "GROUP-ID=\"audio-hi\",", + "LANGUAGE=\"es\",", + "NAME=\"Espanol\",", + "AUTOSELECT=YES" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Audio) + .group_id("audio-aacl-312") + .language("en") + .name("English") + .is_autoselect(true) + .is_default(true) + .channels(Channels::new(2)) + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=AUDIO,", + "GROUP-ID=\"audio-aacl-312\",", + "LANGUAGE=\"en\",", + "NAME=\"English\",", + "DEFAULT=YES,", + "AUTOSELECT=YES,", + "CHANNELS=\"2\"" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::Subtitles) + .uri("french/ed.ttml") + .group_id("subs") + .language("fra") + .assoc_language("fra") + .name("French") + .is_autoselect(true) + .is_forced(true) + .characteristics("public.accessibility.transcribes-spoken\ + -dialog,public.accessibility.describes-music-and-sound") + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=SUBTITLES,", + "URI=\"french/ed.ttml\",", + "GROUP-ID=\"subs\",", + "LANGUAGE=\"fra\",", + "ASSOC-LANGUAGE=\"fra\",", + "NAME=\"French\",", + "AUTOSELECT=YES,", + "FORCED=YES,", + "CHARACTERISTICS=\"", + "public.accessibility.transcribes-spoken-dialog,", + "public.accessibility.describes-music-and-sound", + "\"" + ) + }, + { + ExtXMedia::builder() + .media_type(MediaType::ClosedCaptions) + .group_id("cc") + .language("sp") + .name("CC2") + .instream_id(InStreamId::Cc2) + .is_autoselect(true) + .build() + .unwrap(), + concat!( + "#EXT-X-MEDIA:", + "TYPE=CLOSED-CAPTIONS,", + "GROUP-ID=\"cc\",", + "LANGUAGE=\"sp\",", + "NAME=\"CC2\",", + "AUTOSELECT=YES,", + "INSTREAM-ID=\"CC2\"" + ) + }, + { + ExtXMedia::new(MediaType::Audio, "foo", "bar"), + "#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"foo\",NAME=\"bar\"" + }, } #[test]