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