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