diff options
Diffstat (limited to 'tests/test.rs')
-rw-r--r-- | tests/test.rs | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/tests/test.rs b/tests/test.rs index 957d470..d5a3490 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -4,7 +4,7 @@ use std::borrow::Cow; use std::collections::BTreeSet; use proc_macro2::{Ident, Span, TokenStream}; -use quote::{format_ident, quote, TokenStreamExt}; +use quote::{format_ident, quote, quote_spanned, TokenStreamExt}; struct X; @@ -26,8 +26,30 @@ fn test_quote_impl() { let expected = concat!( "impl < 'a , T : ToTokens > ToTokens for & 'a T { ", - "fn to_tokens ( & self , tokens : & mut TokenStream ) { ", - "( * * self ) . to_tokens ( tokens ) ", + "fn to_tokens (& self , tokens : & mut TokenStream) { ", + "(* * self) . to_tokens (tokens) ", + "} ", + "}" + ); + + assert_eq!(expected, tokens.to_string()); +} + +#[test] +fn test_quote_spanned_impl() { + let span = Span::call_site(); + let tokens = quote_spanned! {span=> + impl<'a, T: ToTokens> ToTokens for &'a T { + fn to_tokens(&self, tokens: &mut TokenStream) { + (**self).to_tokens(tokens) + } + } + }; + + let expected = concat!( + "impl < 'a , T : ToTokens > ToTokens for & 'a T { ", + "fn to_tokens (& self , tokens : & mut TokenStream) { ", + "(* * self) . to_tokens (tokens) ", "} ", "}" ); @@ -40,7 +62,7 @@ fn test_substitution() { let x = X; let tokens = quote!(#x <#x> (#x) [#x] {#x}); - let expected = "X < X > ( X ) [ X ] { X }"; + let expected = "X < X > (X) [X] { X }"; assert_eq!(expected, tokens.to_string()); } @@ -96,10 +118,10 @@ fn test_advanced() { "phantom : :: std :: marker :: PhantomData < Cow < 'a , str > > , ", "} ", "impl < 'a , T > :: serde :: Serialize for SerializeWith < 'a , T > where T : Serialize { ", - "fn serialize < S > ( & self , s : & mut S ) -> Result < ( ) , S :: Error > ", + "fn serialize < S > (& self , s : & mut S) -> Result < () , S :: Error > ", "where S : :: serde :: Serializer ", "{ ", - "SomeTrait :: serialize_with ( self . value , s ) ", + "SomeTrait :: serialize_with (self . value , s) ", "} ", "} ", "SerializeWith { ", @@ -130,7 +152,7 @@ fn test_integer() { #ii8 #ii16 #ii32 #ii64 #ii128 #iisize #uu8 #uu16 #uu32 #uu64 #uu128 #uusize }; - let expected = "-1i8 -1i16 -1i32 -1i64 -1i128 -1isize 1u8 1u16 1u32 1u64 1u128 1usize"; + let expected = "- 1i8 - 1i16 - 1i32 - 1i64 - 1i128 - 1isize 1u8 1u16 1u32 1u64 1u128 1usize"; assert_eq!(expected, tokens.to_string()); } @@ -160,7 +182,7 @@ fn test_char() { let tokens = quote! { #zero #pound #quote #apost #newline #heart }; - let expected = "'\\u{0}' '#' '\"' '\\'' '\\n' '\\u{2764}'"; + let expected = "'\\u{0}' '#' '\"' '\\'' '\\n' '\u{2764}'"; assert_eq!(expected, tokens.to_string()); } @@ -341,12 +363,14 @@ fn test_format_ident() { let id2 = format_ident!("Hello{x}", x = 5usize); let id3 = format_ident!("Hello{}_{x}", id0, x = 10usize); let id4 = format_ident!("Aa", span = Span::call_site()); + let id5 = format_ident!("Hello{}", Cow::Borrowed("World")); assert_eq!(id0, "Aa"); assert_eq!(id1, "HelloAa"); assert_eq!(id2, "Hello5"); assert_eq!(id3, "HelloAa_10"); assert_eq!(id4, "Aa"); + assert_eq!(id5, "HelloWorld"); } #[test] @@ -365,7 +389,7 @@ fn test_outer_line_comment() { let tokens = quote! { /// doc }; - let expected = "# [ doc = r\" doc\" ]"; + let expected = "# [doc = r\" doc\"]"; assert_eq!(expected, tokens.to_string()); } @@ -374,7 +398,7 @@ fn test_inner_line_comment() { let tokens = quote! { //! doc }; - let expected = "# ! [ doc = r\" doc\" ]"; + let expected = "# ! [doc = r\" doc\"]"; assert_eq!(expected, tokens.to_string()); } @@ -383,7 +407,7 @@ fn test_outer_block_comment() { let tokens = quote! { /** doc */ }; - let expected = "# [ doc = r\" doc \" ]"; + let expected = "# [doc = r\" doc \"]"; assert_eq!(expected, tokens.to_string()); } @@ -392,7 +416,7 @@ fn test_inner_block_comment() { let tokens = quote! { /*! doc */ }; - let expected = "# ! [ doc = r\" doc \" ]"; + let expected = "# ! [doc = r\" doc \"]"; assert_eq!(expected, tokens.to_string()); } @@ -401,7 +425,7 @@ fn test_outer_attr() { let tokens = quote! { #[inline] }; - let expected = "# [ inline ]"; + let expected = "# [inline]"; assert_eq!(expected, tokens.to_string()); } @@ -410,7 +434,7 @@ fn test_inner_attr() { let tokens = quote! { #![no_std] }; - let expected = "# ! [ no_std ]"; + let expected = "# ! [no_std]"; assert_eq!(expected, tokens.to_string()); } @@ -424,6 +448,12 @@ fn test_star_after_repetition() { )* *out = None; }; - let expected = "f ( '0' ) ; f ( '1' ) ; * out = None ;"; + let expected = "f ('0') ; f ('1') ; * out = None ;"; assert_eq!(expected, tokens.to_string()); } + +#[test] +fn test_quote_raw_id() { + let id = quote!(r#raw_id); + assert_eq!(id.to_string(), "r#raw_id"); +} |