extern crate peg;
use m3u_cli_parser::parse_m3u;
use m3u_cli_parser::M3UEntry;
#[test]
fn test_parse_m3u_with_valid_input() {
let m3u_content = "#EXTM3U\n#EXTINF:22,Sample Song\nhttp://example.com/sample.mp3\n";
let result = parse_m3u(m3u_content);
assert_eq!(
result,
Ok(vec![M3UEntry {
title: "Sample Song".to_string(),
duration: "00:22".to_string(),
path: "http://example.com/sample.mp3".to_string()
}])
);
}
#[test]
fn test_parse_m3u_with_invalid_input() {
let m3u_content = "This is not a valid M3U file.";
let result = parse_m3u(m3u_content);
assert!(result.is_err(), "Expected an error");
}
#[test]
fn test_parse_m3u_with_multiple_entries() {
let m3u_content = "#EXTM3U\n#EXTINF:31,Sample1\nhttp://example.com/sample1.mp3\n#EXTINF:2,Sample2\nhttp://example.com/sample2.mp3\n";
let result = parse_m3u(m3u_content);
assert_eq!(
result,
Ok(vec![
M3UEntry {
title: "Sample1".to_string(),
duration: "00:31".to_string(),
path: "http://example.com/sample1.mp3".to_string()
},
M3UEntry {
title: "Sample2".to_string(),
duration: "00:02".to_string(),
path: "http://example.com/sample2.mp3".to_string()
}
])
);
}
#[test]
fn test_parse_m3u_with_whitespace() {
let m3u_content = " #EXTM3U \n #EXTINF:0, Sample Song \n http://example.com/sample.mp3 \n";
let result = parse_m3u(m3u_content);
assert_eq!(
result,
Ok(vec![M3UEntry {
title: " Sample Song ".to_string(),
duration: "00:00".to_string(),
path: " http://example.com/sample.mp3 ".to_string()
}])
);
}