about summary refs log tree commit diff
path: root/src/test/ui/proc-macro/attribute.rs
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-02-28 08:51:35 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-03-16 23:13:15 +0300
commite2009ea5ffdacd767ea85d463fbe40d0e8b06951 (patch)
tree140429c7c67aef0b028167c02a0e0bb5afdd81d8 /src/test/ui/proc-macro/attribute.rs
parent2c8bbf50db0ef90a33f986ba8fc2e1fe129197ff (diff)
Add tests for malformed input in `#[proc_macro_derive]`
Diffstat (limited to 'src/test/ui/proc-macro/attribute.rs')
-rw-r--r--src/test/ui/proc-macro/attribute.rs94
1 files changed, 57 insertions, 37 deletions
diff --git a/src/test/ui/proc-macro/attribute.rs b/src/test/ui/proc-macro/attribute.rs
index a0b982d75f5..f1775307fb4 100644
--- a/src/test/ui/proc-macro/attribute.rs
+++ b/src/test/ui/proc-macro/attribute.rs
@@ -4,53 +4,73 @@
 #![crate_type = "proc-macro"]
 
 extern crate proc_macro;
+use proc_macro::*;
 
 #[proc_macro_derive]
 //~^ ERROR: attribute must be of the form
-pub fn foo1(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
+pub fn foo1(input: TokenStream) -> TokenStream { input }
 
-#[proc_macro_derive = "foo"]
+#[proc_macro_derive = ""]
 //~^ ERROR: attribute must be of the form
-pub fn foo2(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
-
-#[proc_macro_derive(
-    a = "b"
-)]
-//~^^ ERROR: must only be one word
-pub fn foo3(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
-
-#[proc_macro_derive(b, c, d)]
+pub fn foo2(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d3, a, b)]
+//~^ ERROR: attribute must have either one or two arguments
+pub fn foo3(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d4, attributes(a), b)]
 //~^ ERROR: attribute must have either one or two arguments
-pub fn foo4(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
+pub fn foo4(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive("a")]
+//~^ ERROR: not a meta item
+pub fn foo5(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d6 = "")]
+//~^ ERROR: must only be one word
+pub fn foo6(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(m::d7)]
+//FIXME ERROR: must only be one word
+pub fn foo7(input: TokenStream) -> TokenStream { input }
 
-#[proc_macro_derive(d(e))]
+#[proc_macro_derive(d8(a))]
 //~^ ERROR: must only be one word
-pub fn foo5(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
+pub fn foo8(input: TokenStream) -> TokenStream { input }
 
-#[proc_macro_derive(f, attributes(g = "h"))]
+#[proc_macro_derive(self)]
+//FIXME ERROR: `self` cannot be a name of derive macro
+pub fn foo9(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(PartialEq)]
+//~^ ERROR: cannot override a built-in #[derive] mode
+pub fn foo10(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d11, a)]
+//~^ ERROR: second argument must be `attributes`
+//~| ERROR: attribute must be of form: `attributes(foo, bar)`
+pub fn foo11(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d12, attributes)]
+//~^ ERROR: attribute must be of form: `attributes(foo, bar)`
+pub fn foo12(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d13, attributes("a"))]
+//~^ ERROR: not a meta item
+pub fn foo13(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d14, attributes(a = ""))]
 //~^ ERROR: must only be one word
-pub fn foo6(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
+pub fn foo14(input: TokenStream) -> TokenStream { input }
+
+#[proc_macro_derive(d15, attributes(m::a))]
+//FIXME ERROR: must only be one word
+pub fn foo15(input: TokenStream) -> TokenStream { input }
 
-#[proc_macro_derive(i, attributes(j(k)))]
+#[proc_macro_derive(d16, attributes(a(b)))]
 //~^ ERROR: must only be one word
-pub fn foo7(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
+pub fn foo16(input: TokenStream) -> TokenStream { input }
 
-#[proc_macro_derive(l, attributes(m), n)]
-//~^ ERROR: attribute must have either one or two arguments
-pub fn foo8(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
-    input
-}
+#[proc_macro_derive(d17, attributes(self))]
+//FIXME ERROR: `self` cannot be a name of derive helper attribute
+pub fn foo17(input: TokenStream) -> TokenStream { input }