| extern crate syn; |
| |
| mod features; |
| |
| #[macro_use] |
| mod macros; |
| |
| use syn::{Meta, MetaList, MetaNameValue, NestedMeta}; |
| |
| #[test] |
| fn test_parse_meta_item_word() { |
| let input = "hello"; |
| |
| snapshot!(input as Meta, @r###"Word("hello")"###); |
| } |
| |
| #[test] |
| fn test_parse_meta_name_value() { |
| let input = "foo = 5"; |
| let (inner, meta) = (input, input); |
| |
| snapshot!(inner as MetaNameValue, @r###" |
| ⋮MetaNameValue { |
| ⋮ ident: "foo", |
| ⋮ lit: 5, |
| ⋮} |
| "###); |
| |
| snapshot!(meta as Meta, @r###" |
| ⋮Meta::NameValue { |
| ⋮ ident: "foo", |
| ⋮ lit: 5, |
| ⋮} |
| "###); |
| |
| assert_eq!(meta, inner.into()); |
| } |
| |
| #[test] |
| fn test_parse_meta_name_value_with_keyword() { |
| let input = "static = 5"; |
| let (inner, meta) = (input, input); |
| |
| snapshot!(inner as MetaNameValue, @r###" |
| ⋮MetaNameValue { |
| ⋮ ident: "static", |
| ⋮ lit: 5, |
| ⋮} |
| "###); |
| |
| snapshot!(meta as Meta, @r###" |
| ⋮Meta::NameValue { |
| ⋮ ident: "static", |
| ⋮ lit: 5, |
| ⋮} |
| "###); |
| |
| assert_eq!(meta, inner.into()); |
| } |
| |
| #[test] |
| fn test_parse_meta_name_value_with_bool() { |
| let input = "true = 5"; |
| let (inner, meta) = (input, input); |
| |
| snapshot!(inner as MetaNameValue, @r###" |
| ⋮MetaNameValue { |
| ⋮ ident: "true", |
| ⋮ lit: 5, |
| ⋮} |
| "###); |
| |
| snapshot!(meta as Meta, @r###" |
| ⋮Meta::NameValue { |
| ⋮ ident: "true", |
| ⋮ lit: 5, |
| ⋮} |
| "###); |
| |
| assert_eq!(meta, inner.into()); |
| } |
| |
| #[test] |
| fn test_parse_meta_item_list_lit() { |
| let input = "foo(5)"; |
| let (inner, meta) = (input, input); |
| |
| snapshot!(inner as MetaList, @r###" |
| ⋮MetaList { |
| ⋮ ident: "foo", |
| ⋮ nested: [ |
| ⋮ Literal(5), |
| ⋮ ], |
| ⋮} |
| "###); |
| |
| snapshot!(meta as Meta, @r###" |
| ⋮Meta::List { |
| ⋮ ident: "foo", |
| ⋮ nested: [ |
| ⋮ Literal(5), |
| ⋮ ], |
| ⋮} |
| "###); |
| |
| assert_eq!(meta, inner.into()); |
| } |
| |
| #[test] |
| fn test_parse_meta_item_multiple() { |
| let input = "foo(word, name = 5, list(name2 = 6), word2)"; |
| let (inner, meta) = (input, input); |
| |
| snapshot!(inner as MetaList, @r###" |
| ⋮MetaList { |
| ⋮ ident: "foo", |
| ⋮ nested: [ |
| ⋮ Meta(Word("word")), |
| ⋮ Meta(Meta::NameValue { |
| ⋮ ident: "name", |
| ⋮ lit: 5, |
| ⋮ }), |
| ⋮ Meta(Meta::List { |
| ⋮ ident: "list", |
| ⋮ nested: [ |
| ⋮ Meta(Meta::NameValue { |
| ⋮ ident: "name2", |
| ⋮ lit: 6, |
| ⋮ }), |
| ⋮ ], |
| ⋮ }), |
| ⋮ Meta(Word("word2")), |
| ⋮ ], |
| ⋮} |
| "###); |
| |
| snapshot!(meta as Meta, @r###" |
| ⋮Meta::List { |
| ⋮ ident: "foo", |
| ⋮ nested: [ |
| ⋮ Meta(Word("word")), |
| ⋮ Meta(Meta::NameValue { |
| ⋮ ident: "name", |
| ⋮ lit: 5, |
| ⋮ }), |
| ⋮ Meta(Meta::List { |
| ⋮ ident: "list", |
| ⋮ nested: [ |
| ⋮ Meta(Meta::NameValue { |
| ⋮ ident: "name2", |
| ⋮ lit: 6, |
| ⋮ }), |
| ⋮ ], |
| ⋮ }), |
| ⋮ Meta(Word("word2")), |
| ⋮ ], |
| ⋮} |
| "###); |
| |
| assert_eq!(meta, inner.into()); |
| } |
| |
| #[test] |
| fn test_parse_nested_meta() { |
| let input = "5"; |
| snapshot!(input as NestedMeta, @"Literal(5)"); |
| |
| let input = "list(name2 = 6)"; |
| snapshot!(input as NestedMeta, @r###" |
| ⋮Meta(Meta::List { |
| ⋮ ident: "list", |
| ⋮ nested: [ |
| ⋮ Meta(Meta::NameValue { |
| ⋮ ident: "name2", |
| ⋮ lit: 6, |
| ⋮ }), |
| ⋮ ], |
| ⋮}) |
| "###); |
| } |