From 39441bb2c1030884d0f1d200de0a65b146ba6b6d Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 29 Apr 2021 11:10:14 -0700 Subject: Make a ui test to take the role of libproc_macro #[test] tests --- src/test/ui/proc-macro/auxiliary/api/mod.rs | 16 ++++++++++++++++ src/test/ui/proc-macro/test.rs | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/test/ui/proc-macro/auxiliary/api/mod.rs create mode 100644 src/test/ui/proc-macro/test.rs (limited to 'src') diff --git a/src/test/ui/proc-macro/auxiliary/api/mod.rs b/src/test/ui/proc-macro/auxiliary/api/mod.rs new file mode 100644 index 00000000000..72b02ad554e --- /dev/null +++ b/src/test/ui/proc-macro/auxiliary/api/mod.rs @@ -0,0 +1,16 @@ +// force-host +// no-prefer-dynamic + +#![crate_type = "proc-macro"] +#![crate_name = "proc_macro_api_tests"] +#![deny(dead_code)] // catch if a test function is never called + +extern crate proc_macro; + +use proc_macro::TokenStream; + +#[proc_macro] +pub fn run(input: TokenStream) -> TokenStream { + assert!(input.is_empty()); + TokenStream::new() +} diff --git a/src/test/ui/proc-macro/test.rs b/src/test/ui/proc-macro/test.rs new file mode 100644 index 00000000000..c96aa73175f --- /dev/null +++ b/src/test/ui/proc-macro/test.rs @@ -0,0 +1,12 @@ +// check-pass +// aux-build:api/mod.rs + +//! This is for everything that *would* be a #[test] inside of libproc_macro, +//! except for the fact that proc_macro objects are not capable of existing +//! inside of an ordinary Rust test execution, only inside a macro. + +extern crate proc_macro_api_tests; + +proc_macro_api_tests::run!(); + +fn main() {} -- cgit 1.4.1-3-g733a5 From 3c16c0e1df61755db2267897392529eb9451aa62 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 29 Apr 2021 11:17:44 -0700 Subject: Move proc_macro tests to ui test --- library/proc_macro/tests/test.rs | 20 -------------------- src/test/ui/proc-macro/auxiliary/api/cmp.rs | 21 +++++++++++++++++++++ src/test/ui/proc-macro/auxiliary/api/mod.rs | 4 ++++ 3 files changed, 25 insertions(+), 20 deletions(-) delete mode 100644 library/proc_macro/tests/test.rs create mode 100644 src/test/ui/proc-macro/auxiliary/api/cmp.rs (limited to 'src') diff --git a/library/proc_macro/tests/test.rs b/library/proc_macro/tests/test.rs deleted file mode 100644 index d2e6b0bb809..00000000000 --- a/library/proc_macro/tests/test.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![feature(proc_macro_span)] - -use proc_macro::{LineColumn, Punct}; - -#[test] -fn test_line_column_ord() { - let line0_column0 = LineColumn { line: 0, column: 0 }; - let line0_column1 = LineColumn { line: 0, column: 1 }; - let line1_column0 = LineColumn { line: 1, column: 0 }; - assert!(line0_column0 < line0_column1); - assert!(line0_column1 < line1_column0); -} - -#[test] -fn test_punct_eq() { - // Good enough if it typechecks, since proc_macro::Punct can't exist in a test. - fn _check(punct: Punct) { - let _ = punct == ':'; - } -} diff --git a/src/test/ui/proc-macro/auxiliary/api/cmp.rs b/src/test/ui/proc-macro/auxiliary/api/cmp.rs new file mode 100644 index 00000000000..3d17e9e350e --- /dev/null +++ b/src/test/ui/proc-macro/auxiliary/api/cmp.rs @@ -0,0 +1,21 @@ +use proc_macro::{LineColumn, Punct}; + +pub fn test() { + test_line_column_ord(); + test_punct_eq(); +} + +fn test_line_column_ord() { + let line0_column0 = LineColumn { line: 0, column: 0 }; + let line0_column1 = LineColumn { line: 0, column: 1 }; + let line1_column0 = LineColumn { line: 1, column: 0 }; + assert!(line0_column0 < line0_column1); + assert!(line0_column1 < line1_column0); +} + +fn test_punct_eq() { + // Good enough if it typechecks, since proc_macro::Punct can't exist in a test. + fn _check(punct: Punct) { + let _ = punct == ':'; + } +} diff --git a/src/test/ui/proc-macro/auxiliary/api/mod.rs b/src/test/ui/proc-macro/auxiliary/api/mod.rs index 72b02ad554e..019fb2e7ec8 100644 --- a/src/test/ui/proc-macro/auxiliary/api/mod.rs +++ b/src/test/ui/proc-macro/auxiliary/api/mod.rs @@ -3,14 +3,18 @@ #![crate_type = "proc-macro"] #![crate_name = "proc_macro_api_tests"] +#![feature(proc_macro_span)] #![deny(dead_code)] // catch if a test function is never called extern crate proc_macro; +mod cmp; + use proc_macro::TokenStream; #[proc_macro] pub fn run(input: TokenStream) -> TokenStream { assert!(input.is_empty()); + cmp::test(); TokenStream::new() } -- cgit 1.4.1-3-g733a5 From faad7e209deee6d09d335ca00c06d9f41bc040b5 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 29 Apr 2021 11:20:27 -0700 Subject: Make a more meaningful test for Punct eq --- src/test/ui/proc-macro/auxiliary/api/cmp.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/test/ui/proc-macro/auxiliary/api/cmp.rs b/src/test/ui/proc-macro/auxiliary/api/cmp.rs index 3d17e9e350e..5784a6e5d94 100644 --- a/src/test/ui/proc-macro/auxiliary/api/cmp.rs +++ b/src/test/ui/proc-macro/auxiliary/api/cmp.rs @@ -1,4 +1,4 @@ -use proc_macro::{LineColumn, Punct}; +use proc_macro::{LineColumn, Punct, Spacing}; pub fn test() { test_line_column_ord(); @@ -14,8 +14,8 @@ fn test_line_column_ord() { } fn test_punct_eq() { - // Good enough if it typechecks, since proc_macro::Punct can't exist in a test. - fn _check(punct: Punct) { - let _ = punct == ':'; - } + let colon_alone = Punct::new(':', Spacing::Alone); + assert_eq!(colon_alone, ':'); + let colon_joint = Punct::new(':', Spacing::Joint); + assert_eq!(colon_joint, ':'); } -- cgit 1.4.1-3-g733a5 From 965bce48348bbcc3c86898bdb5e18d4c57c35d00 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 29 Apr 2021 12:03:35 -0700 Subject: Add proc macro Literal parse test --- src/test/ui/proc-macro/auxiliary/api/mod.rs | 4 ++++ src/test/ui/proc-macro/auxiliary/api/parse.rs | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 src/test/ui/proc-macro/auxiliary/api/parse.rs (limited to 'src') diff --git a/src/test/ui/proc-macro/auxiliary/api/mod.rs b/src/test/ui/proc-macro/auxiliary/api/mod.rs index 019fb2e7ec8..739c25132e7 100644 --- a/src/test/ui/proc-macro/auxiliary/api/mod.rs +++ b/src/test/ui/proc-macro/auxiliary/api/mod.rs @@ -9,12 +9,16 @@ extern crate proc_macro; mod cmp; +mod parse; use proc_macro::TokenStream; #[proc_macro] pub fn run(input: TokenStream) -> TokenStream { assert!(input.is_empty()); + cmp::test(); + parse::test(); + TokenStream::new() } diff --git a/src/test/ui/proc-macro/auxiliary/api/parse.rs b/src/test/ui/proc-macro/auxiliary/api/parse.rs new file mode 100644 index 00000000000..4105236b7f2 --- /dev/null +++ b/src/test/ui/proc-macro/auxiliary/api/parse.rs @@ -0,0 +1,23 @@ +use proc_macro::Literal; + +pub fn test() { + test_parse_literal(); +} + +fn test_parse_literal() { + assert_eq!("1".parse::().unwrap().to_string(), "1"); + assert_eq!("1.0".parse::().unwrap().to_string(), "1.0"); + assert_eq!("'a'".parse::().unwrap().to_string(), "'a'"); + assert_eq!("\"\n\"".parse::().unwrap().to_string(), "\"\n\""); + assert_eq!("b\"\"".parse::().unwrap().to_string(), "b\"\""); + assert_eq!("r##\"\"##".parse::().unwrap().to_string(), "r##\"\"##"); + assert_eq!("10ulong".parse::().unwrap().to_string(), "10ulong"); + + assert!("0 1".parse::().is_err()); + assert!("'a".parse::().is_err()); + assert!(" 0".parse::().is_err()); + assert!("0 ".parse::().is_err()); + assert!("/* comment */0".parse::().is_err()); + assert!("0/* comment */".parse::().is_err()); + assert!("0// comment".parse::().is_err()); +} -- cgit 1.4.1-3-g733a5