1 extern crate proc_macro2; 2 extern crate syn; 3 4 mod features; 5 6 use proc_macro2::{Ident, Span, TokenStream}; 7 use std::str::FromStr; 8 use syn::Result; 9 parse(s: &str) -> Result<Ident>10fn parse(s: &str) -> Result<Ident> { 11 syn::parse2(TokenStream::from_str(s).unwrap()) 12 } 13 new(s: &str) -> Ident14fn new(s: &str) -> Ident { 15 Ident::new(s, Span::call_site()) 16 } 17 18 #[test] ident_parse()19fn ident_parse() { 20 parse("String").unwrap(); 21 } 22 23 #[test] ident_parse_keyword()24fn ident_parse_keyword() { 25 parse("abstract").unwrap_err(); 26 } 27 28 #[test] ident_parse_empty()29fn ident_parse_empty() { 30 parse("").unwrap_err(); 31 } 32 33 #[test] ident_parse_lifetime()34fn ident_parse_lifetime() { 35 parse("'static").unwrap_err(); 36 } 37 38 #[test] ident_parse_underscore()39fn ident_parse_underscore() { 40 parse("_").unwrap_err(); 41 } 42 43 #[test] ident_parse_number()44fn ident_parse_number() { 45 parse("255").unwrap_err(); 46 } 47 48 #[test] ident_parse_invalid()49fn ident_parse_invalid() { 50 parse("a#").unwrap_err(); 51 } 52 53 #[test] ident_new()54fn ident_new() { 55 new("String"); 56 } 57 58 #[test] ident_new_keyword()59fn ident_new_keyword() { 60 new("abstract"); 61 } 62 63 #[test] 64 #[should_panic(expected = "use Option<Ident>")] ident_new_empty()65fn ident_new_empty() { 66 new(""); 67 } 68 69 #[test] 70 #[should_panic(expected = "not a valid Ident")] ident_new_lifetime()71fn ident_new_lifetime() { 72 new("'static"); 73 } 74 75 #[test] ident_new_underscore()76fn ident_new_underscore() { 77 new("_"); 78 } 79 80 #[test] 81 #[should_panic(expected = "use Literal instead")] ident_new_number()82fn ident_new_number() { 83 new("255"); 84 } 85 86 #[test] 87 #[should_panic(expected = "\"a#\" is not a valid Ident")] ident_new_invalid()88fn ident_new_invalid() { 89 new("a#"); 90 } 91