summaryrefslogtreecommitdiffstats
path: root/third_party/rust/paste/tests/test_doc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/paste/tests/test_doc.rs')
-rw-r--r--third_party/rust/paste/tests/test_doc.rs77
1 files changed, 77 insertions, 0 deletions
diff --git a/third_party/rust/paste/tests/test_doc.rs b/third_party/rust/paste/tests/test_doc.rs
new file mode 100644
index 0000000000..2e2b14dc8a
--- /dev/null
+++ b/third_party/rust/paste/tests/test_doc.rs
@@ -0,0 +1,77 @@
+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;
+}