arguably 2.2.0

A ridiculously simple argument-parsing library.
Documentation
use arguably::ArgParser;

#[test]
fn flag_empty_input() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec![]);
    assert_eq!(parser.found("flag"), false);
    assert_eq!(parser.count("flag"), 0);
}

#[test]
fn flag_missing() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["foo", "bar"]);
    assert_eq!(parser.found("flag"), false);
    assert_eq!(parser.count("flag"), 0);
}

#[test]
fn flag_present_long() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["--flag"]);
    assert_eq!(parser.found("flag"), true);
    assert_eq!(parser.count("flag"), 1);
}

#[test]
fn flag_present_short() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["-f"]);
    assert_eq!(parser.found("flag"), true);
    assert_eq!(parser.count("flag"), 1);
}

#[test]
fn flag_multiple_long() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["--flag", "--flag", "--flag"]);
    assert_eq!(parser.found("flag"), true);
    assert_eq!(parser.count("flag"), 3);
}

#[test]
fn flag_multiple_short() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["-f", "-f", "-f"]);
    assert_eq!(parser.found("flag"), true);
    assert_eq!(parser.count("flag"), 3);
}

#[test]
fn flag_multiple_mixed() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["--flag", "-f", "-f"]);
    assert_eq!(parser.found("flag"), true);
    assert_eq!(parser.count("flag"), 3);
}

#[test]
fn flag_multiple_condensed() {
    let mut parser = ArgParser::new().flag("flag f");
    let _ = parser.parse_vec(vec!["-fff", "--flag"]);
    assert_eq!(parser.found("flag"), true);
    assert_eq!(parser.count("flag"), 4);
}

#[test]
fn option_empty_input() {
    let mut parser = ArgParser::new().option("opt o", "default");
    let _ = parser.parse_vec(vec![]);
    assert_eq!(parser.found("opt"), false);
    assert!(parser.value("opt") == "default");
}

#[test]
fn option_missing() {
    let mut parser = ArgParser::new().option("opt o", "default");
    let _ = parser.parse_vec(vec!["foo", "bar"]);
    assert_eq!(parser.found("opt"), false);
    assert!(parser.value("opt") == "default");
}

#[test]
fn option_present_long() {
    let mut parser = ArgParser::new().option("opt o", "default");
    let _ = parser.parse_vec(vec!["--opt", "foo"]);
    assert_eq!(parser.found("opt"), true);
    assert!(parser.value("opt") == "foo");
}

#[test]
fn option_present_short() {
    let mut parser = ArgParser::new().option("opt o", "default");
    let _ = parser.parse_vec(vec!["-o", "foo"]);
    assert_eq!(parser.found("opt"), true);
    assert!(parser.value("opt") == "foo");
}

#[test]
fn option_multiple_values() {
    let mut parser = ArgParser::new().option("opt o", "default");
    let _ = parser.parse_vec(vec!["-o", "foo", "--opt", "bar"]);
    assert_eq!(parser.found("opt"), true);
    assert_eq!(parser.count("opt"), 2);
    assert_eq!(parser.value("opt"), "bar");
    assert_eq!(parser.values("opt"), vec!["foo", "bar"]);
}

#[test]
fn command_missing() {
    let mut parser = ArgParser::new().command("cmd", ArgParser::new());
    let _ = parser.parse_vec(vec!["foo", "bar"]);
    assert!(parser.cmd_name.is_none());
}

#[test]
fn command_found() {
    let mut parser = ArgParser::new().command("cmd", ArgParser::new());
    let _ = parser.parse_vec(vec!["cmd", "foo", "bar"]);
    assert_eq!(parser.cmd_name.unwrap(), "cmd");
}

#[test]
fn arguments_empty_input() {
    let mut parser = ArgParser::new();
    let _ = parser.parse_vec(vec![]);
    assert_eq!(parser.args.len(), 0);
}

#[test]
fn arguments_found() {
    let mut parser = ArgParser::new();
    let _ = parser.parse_vec(vec!["foo", "bar"]);
    assert_eq!(parser.args, vec!["foo", "bar"]);
}