about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAleksey Kladov <aleksey.kladov@gmail.com>2021-10-10 14:08:49 +0300
committerAleksey Kladov <aleksey.kladov@gmail.com>2021-10-10 14:08:49 +0300
commit8997d742dc9ed677352d751e3c09b22ec0a9f4b5 (patch)
tree37c355c5ae655724f9d08de52fd8fb9a797e2cf4
parent464fb9f0d45d0b5226936222727ca9b76f5b8424 (diff)
downloadrust-8997d742dc9ed677352d751e3c09b22ec0a9f4b5.tar.gz
rust-8997d742dc9ed677352d751e3c09b22ec0a9f4b5.zip
move tests
-rw-r--r--crates/hir_def/src/macro_expansion_tests.rs1
-rw-r--r--crates/hir_def/src/macro_expansion_tests/mbe/regression.rs202
-rw-r--r--crates/mbe/src/tests/expand.rs102
3 files changed, 203 insertions, 102 deletions
diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs
index f9527a41358..eb41a595ce4 100644
--- a/crates/hir_def/src/macro_expansion_tests.rs
+++ b/crates/hir_def/src/macro_expansion_tests.rs
@@ -28,6 +28,7 @@ use crate::{
     db::DefDatabase, nameres::ModuleSource, resolver::HasResolver, test_db::TestDB, AsMacroCall,
 };
 
+#[track_caller]
 fn check(ra_fixture: &str, mut expect: Expect) {
     let db = TestDB::with_files(ra_fixture);
     let krate = db.crate_graph().iter().next().unwrap();
diff --git a/crates/hir_def/src/macro_expansion_tests/mbe/regression.rs b/crates/hir_def/src/macro_expansion_tests/mbe/regression.rs
index 0a2c733468c..26fd807e65d 100644
--- a/crates/hir_def/src/macro_expansion_tests/mbe/regression.rs
+++ b/crates/hir_def/src/macro_expansion_tests/mbe/regression.rs
@@ -173,3 +173,205 @@ macro_rules! int_base {
 "##]],
     );
 }
+
+#[test]
+fn test_generate_pattern_iterators() {
+    // From <https://github.com/rust-lang/rust/blob/316a391dcb7d66dc25f1f9a4ec9d368ef7615005/src/libcore/str/mod.rs>.
+    check(
+        r#"
+macro_rules! generate_pattern_iterators {
+    { double ended; with $(#[$common_stability_attribute:meta])*,
+                        $forward_iterator:ident,
+                        $reverse_iterator:ident, $iterty:ty
+    } => { ok!(); }
+}
+generate_pattern_iterators ! ( double ended ; with # [ stable ( feature = "rust1" , since = "1.0.0" ) ] , Split , RSplit , & 'a str );
+"#,
+        expect![[r##"
+macro_rules! generate_pattern_iterators {
+    { double ended; with $(#[$common_stability_attribute:meta])*,
+                        $forward_iterator:ident,
+                        $reverse_iterator:ident, $iterty:ty
+    } => { ok!(); }
+}
+ok!();
+"##]],
+    );
+}
+
+#[test]
+fn test_impl_fn_for_zst() {
+    // From <https://github.com/rust-lang/rust/blob/5d20ff4d2718c820632b38c1e49d4de648a9810b/src/libcore/internal_macros.rs>.
+    check(
+        r#"
+macro_rules! impl_fn_for_zst  {
+    {$( $( #[$attr: meta] )*
+    struct $Name: ident impl$( <$( $lifetime : lifetime ),+> )? Fn =
+        |$( $arg: ident: $ArgTy: ty ),*| -> $ReturnTy: ty $body: block;
+    )+} => {$(
+        $( #[$attr] )*
+        struct $Name;
+
+        impl $( <$( $lifetime ),+> )? Fn<($( $ArgTy, )*)> for $Name {
+            #[inline]
+            extern "rust-call" fn call(&self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy {
+                $body
+            }
+        }
+
+        impl $( <$( $lifetime ),+> )? FnMut<($( $ArgTy, )*)> for $Name {
+            #[inline]
+            extern "rust-call" fn call_mut(
+                &mut self,
+                ($( $arg, )*): ($( $ArgTy, )*)
+            ) -> $ReturnTy {
+                Fn::call(&*self, ($( $arg, )*))
+            }
+        }
+
+        impl $( <$( $lifetime ),+> )? FnOnce<($( $ArgTy, )*)> for $Name {
+            type Output = $ReturnTy;
+
+            #[inline]
+            extern "rust-call" fn call_once(self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy {
+                Fn::call(&self, ($( $arg, )*))
+            }
+        }
+    )+}
+}
+
+impl_fn_for_zst !   {
+    #[derive(Clone)]
+    struct CharEscapeDebugContinue impl Fn = |c: char| -> char::EscapeDebug {
+        c.escape_debug_ext(false)
+    };
+
+    #[derive(Clone)]
+    struct CharEscapeUnicode impl Fn = |c: char| -> char::EscapeUnicode {
+        c.escape_unicode()
+    };
+
+    #[derive(Clone)]
+    struct CharEscapeDefault impl Fn = |c: char| -> char::EscapeDefault {
+        c.escape_default()
+    };
+}
+
+"#,
+        expect![[r##"
+macro_rules! impl_fn_for_zst  {
+    {$( $( #[$attr: meta] )*
+    struct $Name: ident impl$( <$( $lifetime : lifetime ),+> )? Fn =
+        |$( $arg: ident: $ArgTy: ty ),*| -> $ReturnTy: ty $body: block;
+    )+} => {$(
+        $( #[$attr] )*
+        struct $Name;
+
+        impl $( <$( $lifetime ),+> )? Fn<($( $ArgTy, )*)> for $Name {
+            #[inline]
+            extern "rust-call" fn call(&self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy {
+                $body
+            }
+        }
+
+        impl $( <$( $lifetime ),+> )? FnMut<($( $ArgTy, )*)> for $Name {
+            #[inline]
+            extern "rust-call" fn call_mut(
+                &mut self,
+                ($( $arg, )*): ($( $ArgTy, )*)
+            ) -> $ReturnTy {
+                Fn::call(&*self, ($( $arg, )*))
+            }
+        }
+
+        impl $( <$( $lifetime ),+> )? FnOnce<($( $ArgTy, )*)> for $Name {
+            type Output = $ReturnTy;
+
+            #[inline]
+            extern "rust-call" fn call_once(self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy {
+                Fn::call(&self, ($( $arg, )*))
+            }
+        }
+    )+}
+}
+
+#[derive(Clone)] struct CharEscapeDebugContinue;
+impl Fn<(char, )> for CharEscapeDebugContinue {
+    #[inline] extern "rust-call"fn call(&self , (c, ): (char, )) -> char::EscapeDebug { {
+            c.escape_debug_ext(false )
+        }
+    }
+}
+impl FnMut<(char, )> for CharEscapeDebugContinue {
+    #[inline] extern "rust-call"fn call_mut(&mut self , (c, ): (char, )) -> char::EscapeDebug {
+        Fn::call(&*self , (c, ))
+    }
+}
+impl FnOnce<(char, )> for CharEscapeDebugContinue {
+    type Output = char::EscapeDebug;
+    #[inline] extern "rust-call"fn call_once(self , (c, ): (char, )) -> char::EscapeDebug {
+        Fn::call(&self , (c, ))
+    }
+}
+#[derive(Clone)] struct CharEscapeUnicode;
+impl Fn<(char, )> for CharEscapeUnicode {
+    #[inline] extern "rust-call"fn call(&self , (c, ): (char, )) -> char::EscapeUnicode { {
+            c.escape_unicode()
+        }
+    }
+}
+impl FnMut<(char, )> for CharEscapeUnicode {
+    #[inline] extern "rust-call"fn call_mut(&mut self , (c, ): (char, )) -> char::EscapeUnicode {
+        Fn::call(&*self , (c, ))
+    }
+}
+impl FnOnce<(char, )> for CharEscapeUnicode {
+    type Output = char::EscapeUnicode;
+    #[inline] extern "rust-call"fn call_once(self , (c, ): (char, )) -> char::EscapeUnicode {
+        Fn::call(&self , (c, ))
+    }
+}
+#[derive(Clone)] struct CharEscapeDefault;
+impl Fn<(char, )> for CharEscapeDefault {
+    #[inline] extern "rust-call"fn call(&self , (c, ): (char, )) -> char::EscapeDefault { {
+            c.escape_default()
+        }
+    }
+}
+impl FnMut<(char, )> for CharEscapeDefault {
+    #[inline] extern "rust-call"fn call_mut(&mut self , (c, ): (char, )) -> char::EscapeDefault {
+        Fn::call(&*self , (c, ))
+    }
+}
+impl FnOnce<(char, )> for CharEscapeDefault {
+    type Output = char::EscapeDefault;
+    #[inline] extern "rust-call"fn call_once(self , (c, ): (char, )) -> char::EscapeDefault {
+        Fn::call(&self , (c, ))
+    }
+}
+
+"##]],
+    );
+}
+
+#[test]
+fn test_impl_nonzero_fmt() {
+    // From <https://github.com/rust-lang/rust/blob/316a391dcb7d66dc25f1f9a4ec9d368ef7615005/src/libcore/num/mod.rs#L12>.
+    check(
+        r#"
+macro_rules! impl_nonzero_fmt {
+    ( #[$stability: meta] ( $( $Trait: ident ),+ ) for $Ty: ident ) => { ok!(); }
+}
+impl_nonzero_fmt! {
+    #[stable(feature= "nonzero",since="1.28.0")]
+    (Debug, Display, Binary, Octal, LowerHex, UpperHex) for NonZeroU8
+}
+"#,
+        expect![[r##"
+macro_rules! impl_nonzero_fmt {
+    ( #[$stability: meta] ( $( $Trait: ident ),+ ) for $Ty: ident ) => { ok!(); }
+}
+ok!();
+"##]],
+    );
+}
diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs
index 8c2e656a4cc..6152e01bc87 100644
--- a/crates/mbe/src/tests/expand.rs
+++ b/crates/mbe/src/tests/expand.rs
@@ -99,108 +99,6 @@ fn test_attr_to_token_tree() {
 }
 
 #[test]
-fn test_generate_pattern_iterators() {
-    // from https://github.com/rust-lang/rust/blob/316a391dcb7d66dc25f1f9a4ec9d368ef7615005/src/libcore/str/mod.rs
-    parse_macro(
-        r#"
-macro_rules! generate_pattern_iterators {
-        { double ended; with $(#[$common_stability_attribute:meta])*,
-                           $forward_iterator:ident,
-                           $reverse_iterator:ident, $iterty:ty
-        } => {
-            fn foo(){}
-        }
-}
-"#,
-    ).assert_expand_items(
-        r#"generate_pattern_iterators ! ( double ended ; with # [ stable ( feature = "rust1" , since = "1.0.0" ) ] , Split , RSplit , & 'a str );"#,
-        "fn foo () {}",
-    );
-}
-
-#[test]
-fn test_impl_fn_for_zst() {
-    // from https://github.com/rust-lang/rust/blob/5d20ff4d2718c820632b38c1e49d4de648a9810b/src/libcore/internal_macros.rs
-    parse_macro(
-        r#"
-macro_rules! impl_fn_for_zst  {
-        {  $( $( #[$attr: meta] )*
-        struct $Name: ident impl$( <$( $lifetime : lifetime ),+> )? Fn =
-            |$( $arg: ident: $ArgTy: ty ),*| -> $ReturnTy: ty
-$body: block; )+
-        } => {
-           $(
-            $( #[$attr] )*
-            struct $Name;
-
-            impl $( <$( $lifetime ),+> )? Fn<($( $ArgTy, )*)> for $Name {
-                #[inline]
-                extern "rust-call" fn call(&self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy {
-                    $body
-                }
-            }
-
-            impl $( <$( $lifetime ),+> )? FnMut<($( $ArgTy, )*)> for $Name {
-                #[inline]
-                extern "rust-call" fn call_mut(
-                    &mut self,
-                    ($( $arg, )*): ($( $ArgTy, )*)
-                ) -> $ReturnTy {
-                    Fn::call(&*self, ($( $arg, )*))
-                }
-            }
-
-            impl $( <$( $lifetime ),+> )? FnOnce<($( $ArgTy, )*)> for $Name {
-                type Output = $ReturnTy;
-
-                #[inline]
-                extern "rust-call" fn call_once(self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy {
-                    Fn::call(&self, ($( $arg, )*))
-                }
-            }
-        )+
-}
-        }
-"#,
-    ).assert_expand_items(r#"
-impl_fn_for_zst !   {
-     # [ derive ( Clone ) ]
-     struct   CharEscapeDebugContinue   impl   Fn   =   | c :   char |   ->   char :: EscapeDebug   {
-         c . escape_debug_ext ( false )
-     } ;
-
-     # [ derive ( Clone ) ]
-     struct   CharEscapeUnicode   impl   Fn   =   | c :   char |   ->   char :: EscapeUnicode   {
-         c . escape_unicode ( )
-     } ;
-     # [ derive ( Clone ) ]
-     struct   CharEscapeDefault   impl   Fn   =   | c :   char |   ->   char :: EscapeDefault   {
-         c . escape_default ( )
-     } ;
- }
-"#,
-        "# [derive (Clone)] struct CharEscapeDebugContinue ; impl Fn < (char ,) > for CharEscapeDebugContinue {# [inline] extern \"rust-call\" fn call (& self , (c ,) : (char ,)) -> char :: EscapeDebug {{c . escape_debug_ext (false)}}} impl FnMut < (char ,) > for CharEscapeDebugContinue {# [inline] extern \"rust-call\" fn call_mut (& mut self , (c ,) : (char ,)) -> char :: EscapeDebug {Fn :: call (&* self , (c ,))}} impl FnOnce < (char ,) > for CharEscapeDebugContinue {type Output = char :: EscapeDebug ; # [inline] extern \"rust-call\" fn call_once (self , (c ,) : (char ,)) -> char :: EscapeDebug {Fn :: call (& self , (c ,))}} # [derive (Clone)] struct CharEscapeUnicode ; impl Fn < (char ,) > for CharEscapeUnicode {# [inline] extern \"rust-call\" fn call (& self , (c ,) : (char ,)) -> char :: EscapeUnicode {{c . escape_unicode ()}}} impl FnMut < (char ,) > for CharEscapeUnicode {# [inline] extern \"rust-call\" fn call_mut (& mut self , (c ,) : (char ,)) -> char :: EscapeUnicode {Fn :: call (&* self , (c ,))}} impl FnOnce < (char ,) > for CharEscapeUnicode {type Output = char :: EscapeUnicode ; # [inline] extern \"rust-call\" fn call_once (self , (c ,) : (char ,)) -> char :: EscapeUnicode {Fn :: call (& self , (c ,))}} # [derive (Clone)] struct CharEscapeDefault ; impl Fn < (char ,) > for CharEscapeDefault {# [inline] extern \"rust-call\" fn call (& self , (c ,) : (char ,)) -> char :: EscapeDefault {{c . escape_default ()}}} impl FnMut < (char ,) > for CharEscapeDefault {# [inline] extern \"rust-call\" fn call_mut (& mut self , (c ,) : (char ,)) -> char :: EscapeDefault {Fn :: call (&* self , (c ,))}} impl FnOnce < (char ,) > for CharEscapeDefault {type Output = char :: EscapeDefault ; # [inline] extern \"rust-call\" fn call_once (self , (c ,) : (char ,)) -> char :: EscapeDefault {Fn :: call (& self , (c ,))}}"
-    );
-}
-
-#[test]
-fn test_impl_nonzero_fmt() {
-    // from https://github.com/rust-lang/rust/blob/316a391dcb7d66dc25f1f9a4ec9d368ef7615005/src/libcore/num/mod.rs#L12
-    parse_macro(
-        r#"
-        macro_rules! impl_nonzero_fmt {
-            ( #[$stability: meta] ( $( $Trait: ident ),+ ) for $Ty: ident ) => {
-                fn foo () {}
-            }
-        }
-"#,
-    ).assert_expand_items(
-        r#"impl_nonzero_fmt! { # [stable(feature= "nonzero",since="1.28.0")] (Debug,Display,Binary,Octal,LowerHex,UpperHex) for NonZeroU8}"#,
-        "fn foo () {}",
-    );
-}
-
-#[test]
 fn test_cfg_if_items() {
     // from https://github.com/rust-lang/rust/blob/33fe1131cadba69d317156847be9a402b89f11bb/src/libstd/macros.rs#L986
     parse_macro(