|  | use paste::paste; | 
|  |  | 
|  | #[test] | 
|  | fn test_paste_doc() { | 
|  | macro_rules! m { | 
|  | ($ret:ident) => { | 
|  | paste! { | 
|  | #[doc = "Create a new [`" $ret "`] object."] | 
|  | fn new() -> $ret { todo!() } | 
|  | } | 
|  | }; | 
|  | } | 
|  |  | 
|  | struct Paste; | 
|  | m!(Paste); | 
|  |  | 
|  | let _ = new; | 
|  | } | 
|  |  | 
|  | macro_rules! get_doc { | 
|  | (#[doc = $literal:tt]) => { | 
|  | $literal | 
|  | }; | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn test_escaping() { | 
|  | let doc = paste! { | 
|  | get_doc!(#[doc = "s\"" r#"r#""#]) | 
|  | }; | 
|  |  | 
|  | let expected = "s\"r#\""; | 
|  | assert_eq!(doc, expected); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn test_literals() { | 
|  | let doc = paste! { | 
|  | get_doc!(#[doc = "int=" 0x1 " bool=" true " float=" 0.01]) | 
|  | }; | 
|  |  | 
|  | let expected = "int=0x1 bool=true float=0.01"; | 
|  | assert_eq!(doc, expected); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn test_case() { | 
|  | let doc = paste! { | 
|  | get_doc!(#[doc = "HTTP " get:upper "!"]) | 
|  | }; | 
|  |  | 
|  | let expected = "HTTP GET!"; | 
|  | assert_eq!(doc, expected); | 
|  | } | 
|  |  | 
|  | // https://github.com/dtolnay/paste/issues/63 | 
|  | #[test] | 
|  | fn test_stringify() { | 
|  | macro_rules! create { | 
|  | ($doc:expr) => { | 
|  | paste! { | 
|  | #[doc = $doc] | 
|  | pub struct Struct; | 
|  | } | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! forward { | 
|  | ($name:ident) => { | 
|  | create!(stringify!($name)); | 
|  | }; | 
|  | } | 
|  |  | 
|  | forward!(documentation); | 
|  |  | 
|  | let _ = Struct; | 
|  | } |