bind-conf/bind_conf_derive/tests/test_derive_enum.rs

67 lines
1.5 KiB
Rust

use bind_conf_derive::*;
use bind_conf::{Parse, Parser};
#[test]
fn derive_enum() {
#[derive(Parse, Debug, PartialEq)]
#[parse(fallback="Unknown")]
enum TestEnum {
MyVariant,
MyOtherVariant(),
Key(String),
Unknown,
};
assert_eq!(
Parser::new("my-variant;").read::<TestEnum>().unwrap(),
TestEnum::MyVariant
);
assert_eq!(
Parser::new("my-other-variant;").read::<TestEnum>().unwrap(),
TestEnum::MyOtherVariant()
);
assert_eq!(
Parser::new("key my-key;").read::<TestEnum>().unwrap(),
TestEnum::Key("my-key".into())
);
assert_eq!(
Parser::new("not-yet-implemented { complicated statement; };").read::<TestEnum>().unwrap(),
TestEnum::Unknown
);
}
#[test]
fn derive_enum_rename() {
#[derive(Parse, Debug, PartialEq)]
enum TestEnum {
#[parse(rename = "other-name", alias="such-alias")]
FirstVariant,
#[parse(alias = "good-alias", alias = "better-alias")]
SecondVariant
};
assert_eq!(
Parser::new("other-name;").read::<TestEnum>().unwrap(),
TestEnum::FirstVariant
);
assert_eq!(
Parser::new("such-alias;").read::<TestEnum>().unwrap(),
TestEnum::FirstVariant
);
assert_eq!(
Parser::new("good-alias;").read::<TestEnum>().unwrap(),
TestEnum::SecondVariant
);
assert_eq!(
Parser::new("better-alias;").read::<TestEnum>().unwrap(),
TestEnum::SecondVariant
);
}