#![cfg(feature = "parser")]
use std::str::FromStr;
use chrono::*;
use icalendar::*;
fn get_summary(calendar: &Calendar) -> &str {
calendar.components[0]
.as_event()
.unwrap()
.get_summary()
.unwrap()
}
fn get_description(calendar: &Calendar) -> &str {
calendar.components[0]
.as_event()
.unwrap()
.get_description()
.unwrap()
}
fn init_test_event() -> (&'static str, &'static str, Calendar) {
let summary = ";IMPORTANCE=very;test event";
let description = "this, contains: many escapeworthy->\n<-;characters";
let event = Event::new()
.summary(summary)
.description(description)
.starts(Utc::now())
.class(Class::Confidential)
.ends(Utc::now() + Duration::days(1))
.append_property(
Property::new("TEST", "FOOBAR")
.add_parameter("IMPORTANCE", "very")
.add_parameter("COMPLEX", r#"this is code; I think"#)
.add_parameter("keyval", "color:red")
.done(),
)
.uid("my.own.id")
.done();
let todo = Todo::new().summary("Buy some: milk").done();
let mut built_calendar = Calendar::new();
built_calendar.push(event);
built_calendar.push(todo);
(summary, description, built_calendar)
}
#[test]
#[ignore = "equality difficult"]
fn serializes_correctly() {
let (_, _, built_calendar) = init_test_event();
println!("built calendar:\n{built_calendar:#?}");
let serialized = built_calendar.to_string();
println!("serialized: {}", &serialized);
let from_parsed = Calendar::from_str(&serialized).unwrap();
println!("parsed again:\n{from_parsed:#?}");
assert_eq!(built_calendar, from_parsed)
}
#[test]
fn escape_late() {
let (summary, description, built_calendar) = init_test_event();
println!("built calendar:\n{built_calendar:#?}");
let serialized = built_calendar.to_string();
println!("serialized: {}", &serialized);
let from_parsed = Calendar::from_str(&serialized).unwrap();
println!("parsed again:\n{from_parsed:#?}");
assert_eq!(get_summary(&built_calendar), summary);
assert_eq!(get_description(&built_calendar), description);
}
#[test]
fn unescape_text() {
let (summary, description, built_calendar) = init_test_event();
println!("built calendar:\n{built_calendar:#?}");
let serialized = built_calendar.to_string();
println!("serialized:\n {}", &serialized);
let from_parsed = Calendar::from_str(&serialized).unwrap();
println!("parsed again:\n{from_parsed:#?}");
assert_eq!(get_summary(&from_parsed), summary);
assert_eq!(get_description(&from_parsed), description);
}
#[test]
fn reparse_equivalence() {
let (_summary, _description, built_calendar) = init_test_event();
println!("built calendar:\n{built_calendar:#?}");
let serialized = built_calendar.to_string();
println!("serialized: {}", &serialized);
let from_parsed = Calendar::from_str(&serialized).unwrap();
println!("parsed again:\n{from_parsed:#?}");
assert_eq!(get_summary(&built_calendar), get_summary(&from_parsed),);
}