clargs 1.0.0

A command-line arguments parsing library.
Documentation
extern crate clargs;

#[test]
fn a_test1() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);

    let args = ["clargs", "param=value"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::UnrecognizedOption(String::from("param")));
}

#[test]
fn a_test2() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.add_flag(String::from("flag"));

    let args = ["clargs", "flag=value"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::AssignmentToFlag(String::from("flag")));
}

#[test]
fn a_test3() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.add_flag(String::from("flag"));
    config.add_alias(String::from("alias"), String::from("flag"));

    let args = ["clargs", "alias=value"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::AssignmentToFlagAlias(String::from("flag"), String::from("alias")));
}

#[test]
fn a_test4() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.add_param(String::from("param"), true);

    let args = ["clargs"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::MissingRequiredParameters(vec![String::from("param")]));
}

#[test]
fn a_test5() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.set_parameter_duplication(false);
    config.add_param(String::from("param"), false);

    let args = ["clargs", "param=value1", "param=value2"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::ParameterDuplication(String::from("param")));
}

#[test]
fn a_test6() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.set_parameter_duplication(false);
    config.add_param(String::from("param"), false);
    config.add_alias(String::from("alias"), String::from("param"));

    let args = ["clargs", "param=value1", "alias=value2"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::ParameterDuplicationAlias(String::from("param"), String::from("alias")));
}

#[test]
fn a_test7() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.set_option_completion(true);
    config.add_param(String::from("param1"), false);
    config.add_param(String::from("param2"), false);

    let args = ["clargs", "par=value"];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).err().unwrap();
    assert_eq!(result, clargs::ParsingError::AmbiguousOption(String::from("par"), vec![String::from("param1"), String::from("param2")]));
}

#[test]
fn a_test8() {
    let mut config = clargs::ParsingConfig::new_all_disabled();
    config.set_assignment_syntax(true);
    config.set_parameter_duplication(true);
    config.set_option_completion(true);

    config.add_param(String::from("req1"), true);
    config.add_param(String::from("req2"), true);
    config.add_alias(String::from("req2_alias"), String::from("req2"));

    config.add_param(String::from("par1"), false);
    config.add_param(String::from("par2"), false);
    config.add_param(String::from("par3"), false);
    config.add_param(String::from("par4"), false);
    config.add_param(String::from("par5"), false);
    config.add_alias(String::from("par3_alias"), String::from("par3"));
    config.add_alias(String::from("par5_alias"), String::from("par5"));

    config.add_param(String::from("ab"), false);
    config.add_param(String::from("abcd"), false);
    config.add_param(String::from("abce"), false);
    config.add_param(String::from("completion"), false);


    let args = [
        "clargs",
        "req1=value_req1", "req2_alias=value_req2",
        "par1=value_par1", "par3_alias=value_par3",
        "par4=value_par4-1", "par4=value_par4-2", "par5=value_par5-1", "par5_alias=value_par5-2",
        "ab=value_ab", "abcd=value_abcd",
        "comp=value_completion"
    ];
    let result = clargs::parse(args.iter().map(|x| x.to_string()), &config).unwrap();

    assert_eq!(result.name(), "clargs");
    assert_eq!(result.get_param("req1"), Some("value_req1"));
    assert_eq!(result.get_param("req2"), Some("value_req2"));
    assert_eq!(result.get_param("par1"), Some("value_par1"));
    assert_eq!(result.get_param("par2"), None);
    assert_eq!(result.get_param("par3"), Some("value_par3"));
    assert_eq!(result.get_param("par4"), Some("value_par4-2"));
    assert_eq!(result.get_param("par5"), Some("value_par5-2"));
    assert_eq!(result.get_param("ab"), Some("value_ab"));
    assert_eq!(result.get_param("abcd"), Some("value_abcd"));
    assert_eq!(result.get_param("abce"), None);
    assert_eq!(result.get_param("completion"), Some("value_completion"));
}