From e50346eb70cd36bdbe2ca1565caa89fa54fdd460 Mon Sep 17 00:00:00 2001 From: Cormac Relf Date: Tue, 28 May 2024 15:42:02 +1000 Subject: [PATCH] Add tests for uniqueness of route macros --- core/codegen/tests/ui-pass.rs | 5 ++++ .../ui-pass/route-uniqueness-generated.rs | 27 +++++++++++++++++++ .../codegen/tests/ui-pass/route-uniqueness.rs | 18 +++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 core/codegen/tests/ui-pass.rs create mode 100644 core/codegen/tests/ui-pass/route-uniqueness-generated.rs create mode 100644 core/codegen/tests/ui-pass/route-uniqueness.rs diff --git a/core/codegen/tests/ui-pass.rs b/core/codegen/tests/ui-pass.rs new file mode 100644 index 0000000000..7faeedbadd --- /dev/null +++ b/core/codegen/tests/ui-pass.rs @@ -0,0 +1,5 @@ +#[test] +fn ui() { + let t = trybuild::TestCases::new(); + t.pass(format!("tests/ui-pass/*.rs")); +} diff --git a/core/codegen/tests/ui-pass/route-uniqueness-generated.rs b/core/codegen/tests/ui-pass/route-uniqueness-generated.rs new file mode 100644 index 0000000000..a9e43376a9 --- /dev/null +++ b/core/codegen/tests/ui-pass/route-uniqueness-generated.rs @@ -0,0 +1,27 @@ +#[macro_use] extern crate rocket; + +// Makes sure that the hashing of the proc macro's call site span +// is enough, even if we're inside a declarative macro +macro_rules! gen_routes { + () => { + #[get("/")] + fn index() -> &'static str { + "GET" + } + + mod two { + #[get("/")] + fn index() -> &'static str { + "GET" + } + } + } +} + +gen_routes!(); + +mod module { + gen_routes!(); +} + +fn main() {} diff --git a/core/codegen/tests/ui-pass/route-uniqueness.rs b/core/codegen/tests/ui-pass/route-uniqueness.rs new file mode 100644 index 0000000000..4da3bc47a3 --- /dev/null +++ b/core/codegen/tests/ui-pass/route-uniqueness.rs @@ -0,0 +1,18 @@ +#[macro_use] extern crate rocket; + +#[get("/")] +fn index() -> &'static str { + "GET" +} + +mod module { + // This one has all the same macro inputs, and we need it to + // generate a crate-wide unique identifier for the macro it + // defines. + #[get("/")] + pub fn index() -> &'static str { + "whatever" + } +} + +fn main() {}