Documentation
use std::time::Duration;
use crate::time::prelude::*;
use super::parse_time;

fn get_expected_time() -> Time {
    TimeBuilder::new()
        .hours(1)
        .minutes(10)
        .seconds(20)
        .milliseconds(30)
        .build()
}

#[test]
#[ignore]
fn parse_time_with_format_with_punctuations() {
    let format = "M:S";
    let punctuations = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
    for punct in punctuations.chars() {
        let input    = &format!("10{}20", punct);
        let expected = get_expected_time();
        assert_eq!(parse_time(input, Some(format)).unwrap(), expected);
    }
}

#[test]
fn parse_time_with_identifiers() {
    let input    = "10m20s";
    let expected = TimeBuilder::new()
        .minutes(10)
        .seconds(20)
        .build();
    assert_eq!(parse_time(input, None).unwrap(), expected);
}

#[test]
fn parse_time_with_identifiers_with_whitespace() {
    let input    = "10m  20s";
    let expected = TimeBuilder::new()
        .minutes(10)
        .seconds(20)
        .build();
    assert_eq!(parse_time(input, None).unwrap(), expected);
}

#[test]
fn parse_time_with_identifiers_out_of_order() {
    let input    = "20s 10m";
    let expected = TimeBuilder::new()
        .minutes(10)
        .seconds(20)
        .build();
    assert_eq!(parse_time(input, None).unwrap(), expected);
}

#[test]
fn parse_time_with_all_identifiers() {
    let input    = "1h 5m 25s 500ms 500000ns";
    let expected = TimeBuilder::new()
        .hours(1)
        .minutes(5)
        .seconds(25)
        .milliseconds(500)
        .nanoseconds(500000)
        .build();
    assert_eq!(parse_time(input, None).unwrap(), expected);
}