gedcomx_date 0.1.0

Gedcomx Date Parser
Documentation
use gedcomx_date::*;

#[test]
fn test_just_r() {
    assert!(parse("R").is_err());
    assert!(parse("R/").is_err());
}

#[test]
fn test_many_slashes() {
    assert!(parse("R/+1000/+2000/+3000").is_err());
}

#[test]
fn test_invalid_part1() {
    assert!(parse("R/+1000_10/+1001").is_err());
}

#[test]
fn test_duration_only() {
    assert!(parse("R/P100Y").is_err());
}

#[test]
fn test_invalid_duration() {
    assert!(parse("R/+1000/P100Q").is_err());
}

#[test]
fn test_invalid_part2() {
    assert!(parse("R/+1000/+1000_10").is_err());
}

#[test]
fn test_simple() {
    assert_eq!(
        parse("R/+1000/+2000-10-01")
            .unwrap()
            .get_recurring()
            .unwrap(),
        Recurring {
            count: None,
            start: DateTime {
                date: Date {
                    year: 1000,
                    month: None,
                    day: None,
                },
                time: None,
            },
            end: DateTimeOrDuration::DateTime(DateTime {
                date: Date {
                    year: 2000,
                    month: Some(10),
                    day: Some(1),
                },
                time: None,
            }),
        }
    );
}

#[test]
fn test_count() {
    assert_eq!(
        parse("R3/+1000/+2000-10-01")
            .unwrap()
            .get_recurring()
            .unwrap(),
        Recurring {
            start: DateTime {
                date: Date {
                    year: 1000,
                    month: None,
                    day: None,
                },
                time: None,
            },
            end: DateTimeOrDuration::DateTime(DateTime {
                date: Date {
                    year: 2000,
                    month: Some(10),
                    day: Some(1),
                },
                time: None,
            }),
            count: Some(3),
        }
    );
}

#[test]
fn test_duration() {
    assert_eq!(
        parse("R/+1000/P1Y2M3DT4H5M6S")
            .unwrap()
            .get_recurring()
            .unwrap(),
        Recurring {
            start: DateTime {
                date: Date {
                    year: 1000,
                    month: None,
                    day: None,
                },
                time: None,
            },
            end: DateTimeOrDuration::Duration(Duration {
                years: 1,
                months: 2,
                days: 3,
                hours: 4,
                minutes: 5,
                seconds: 6,
            }),
            count: None,
        }
    );
}

#[test]
fn test_no_date_approximate() {
    assert!(parse("+1000/A+2000-10-01").is_err());
    assert!(parse("AA+1000/A+2000-10-01").is_err());
    assert!(parse("AA+1000/+2000-10-01").is_err());
}