configure_me_codegen 0.4.8

A library for easy processing of application configuration from files, environment variables and command line arguments.
Documentation
macro_rules! test_name { () => { "short_switches" } }

include!("glue/boilerplate.rs");

#[test]
fn no_switch() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(!cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 0);
    assert!(cfg.d.is_none());
}

#[test]
fn single_switch() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-a"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 0);
    assert!(cfg.d.is_none());
}

#[test]
fn two_switches() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-ab"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(cfg.b);
    assert_eq!(cfg.c, 0);
    assert!(cfg.d.is_none());
}

#[test]
fn three_switches() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-abc"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(cfg.b);
    assert_eq!(cfg.c, 1);
    assert!(cfg.d.is_none());
}

#[test]
fn two_separate_switches() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-a", "-b"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(cfg.b);
    assert_eq!(cfg.c, 0);
    assert!(cfg.d.is_none());
}

#[test]
fn two_groups() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-ab", "-c"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(cfg.b);
    assert_eq!(cfg.c, 1);
    assert!(cfg.d.is_none());
}

#[test]
fn value_separate() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-d", "42"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(!cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 0);
    assert_eq!(cfg.d, Some("42".to_owned()))
}

#[test]
fn value_together() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-d42"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(!cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 0);
    assert_eq!(cfg.d, Some("42".to_owned()))
}

#[test]
fn value_coalesced_together() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-ad42"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 0);
    assert_eq!(cfg.d, Some("42".to_owned()))
}

#[test]
fn value_coalesced_separate() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-ad", "42"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 0);
    assert_eq!(cfg.d, Some("42".to_owned()))
}

#[test]
fn value_coalesced_separate_count2() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-accd", "42"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 2);
    assert_eq!(cfg.d, Some("42".to_owned()))
}

#[test]
fn value_coalesced_separate_count3() {
    use std::iter;
    use std::path::PathBuf;

    let (cfg, mut tail) = config::Config::custom_args_and_optional_files(&["app", "-accd", "42", "-c"], iter::empty::<PathBuf>()).unwrap();
    assert!(tail.next().is_none());

    assert!(cfg.a);
    assert!(!cfg.b);
    assert_eq!(cfg.c, 3);
    assert_eq!(cfg.d, Some("42".to_owned()))
}