Add tests for ignored parameters '<_>'.

Co-authored-by: timokoesters <timo@koesters.xyz>
This commit is contained in:
Sergio Benitez 2020-10-30 00:47:41 -07:00
parent 8e8fb4cae8
commit a6f5a63535
7 changed files with 115 additions and 0 deletions

View File

@ -0,0 +1,54 @@
#[macro_use]
extern crate rocket;
#[get("/<_>", rank = 1)] fn ig_1() -> &'static str { "1" }
#[get("/static")] fn just_static() -> &'static str { "static" }
#[get("/<_>/<_>", rank = 1)] fn ig_2() -> &'static str { "2" }
#[get("/static/<_>")] fn ig_1_static() -> &'static str { "static_1" }
#[get("/<_>/<_>/<_>", rank = 1)] fn ig_3() -> &'static str { "3" }
#[get("/static/<_>/static")] fn ig_1_static_static() -> &'static str { "static_1_static" }
#[get("/<a>/<_>/<_>/<b>")] fn wrapped(a: String, b: String) -> String { a + &b }
#[test]
fn test_ignored_segments() {
use rocket::local::blocking::Client;
fn get_string(client: &Client, url: &str) -> String {
client.get(url).dispatch().into_string().unwrap()
}
let rocket = rocket::ignite().mount("/", routes![
ig_1, just_static, ig_2, ig_3, ig_1_static, ig_1_static_static, wrapped
]);
let client = match Client::untracked(rocket) {
Ok(client) => client,
Err(e) => { drop(e); panic!("whoops") },
};
assert_eq!(get_string(&client, "/foo"), "1");
assert_eq!(get_string(&client, "/bar"), "1");
assert_eq!(get_string(&client, "/static"), "static");
assert_eq!(get_string(&client, "/foo/bar"), "2");
assert_eq!(get_string(&client, "/bar/foo"), "2");
assert_eq!(get_string(&client, "/a/b"), "2");
assert_eq!(get_string(&client, "/foo/static"), "2");
assert_eq!(get_string(&client, "/static/foo"), "static_1");
assert_eq!(get_string(&client, "/foo/bar/baz"), "3");
assert_eq!(get_string(&client, "/bar/static/bam"), "3");
assert_eq!(get_string(&client, "/static/static/static"), "static_1_static");
assert_eq!(get_string(&client, "/static/foo/bam"), "3");
assert_eq!(get_string(&client, "/a/b/c/d"), "ad");
assert_eq!(get_string(&client, "/static/b/c/static"), "staticstatic");
assert_eq!(get_string(&client, "/a/b/c/static"), "astatic");
assert_eq!(get_string(&client, "/ec/b/c/static"), "ecstatic");
}

View File

@ -0,0 +1 @@
../ui-fail/bad-ignored-segments.rs

View File

@ -0,0 +1,15 @@
error: parameter must be named
--> $DIR/bad-ignored-segments.rs:6:11
|
6 | #[get("/c?<_>")]
| ^^^
|
= help: use a name such as `_guard` or `_param`
error: parameter must be named
--> $DIR/bad-ignored-segments.rs:9:22
|
9 | #[post("/d", data = "<_>")]
| ^^^
|
= help: use a name such as `_guard` or `_param`

View File

@ -0,0 +1 @@
../ui-fail/bad-ignored-segments.rs

View File

@ -0,0 +1,13 @@
error: parameter must be named
--- help: use a name such as `_guard` or `_param`
--> $DIR/bad-ignored-segments.rs:6:7
|
6 | #[get("/c?<_>")]
| ^^^^^^^^
error: parameter must be named
--- help: use a name such as `_guard` or `_param`
--> $DIR/bad-ignored-segments.rs:9:21
|
9 | #[post("/d", data = "<_>")]
| ^^^^^

View File

@ -0,0 +1,12 @@
#[macro_use] extern crate rocket;
#[get("/<_>")]
fn i0() {}
#[get("/c?<_>")]
fn i1() {}
#[post("/d", data = "<_>")]
fn i2() {}
fn main() { }

View File

@ -159,6 +159,12 @@ mod test {
assert!(unranked_route_collisions(&["/a/<a..>", "/a/<a..>"])); assert!(unranked_route_collisions(&["/a/<a..>", "/a/<a..>"]));
assert!(unranked_route_collisions(&["/a/b/<a..>", "/a/<a..>"])); assert!(unranked_route_collisions(&["/a/b/<a..>", "/a/<a..>"]));
assert!(unranked_route_collisions(&["/a/b/c/d", "/a/<a..>"])); assert!(unranked_route_collisions(&["/a/b/c/d", "/a/<a..>"]));
assert!(unranked_route_collisions(&["/<_>", "/<_>"]));
assert!(unranked_route_collisions(&["/a/<_>", "/a/b"]));
assert!(unranked_route_collisions(&["/a/<_>", "/a/<b>"]));
assert!(unranked_route_collisions(&["/<_..>", "/a/b"]));
assert!(unranked_route_collisions(&["/<_..>", "/<_>"]));
assert!(unranked_route_collisions(&["/<_>/b", "/a/b"]));
} }
#[test] #[test]
@ -175,6 +181,11 @@ mod test {
assert!(unranked_route_collisions(&["/a/<a..>/", "/a/bd/e/"])); assert!(unranked_route_collisions(&["/a/<a..>/", "/a/bd/e/"]));
assert!(unranked_route_collisions(&["/a/<a..>//", "/a/b//c//d/e/"])); assert!(unranked_route_collisions(&["/a/<a..>//", "/a/b//c//d/e/"]));
assert!(unranked_route_collisions(&["/a//<a..>//", "/a/b//c//d/e/"])); assert!(unranked_route_collisions(&["/a//<a..>//", "/a/b//c//d/e/"]));
assert!(unranked_route_collisions(&["///<_>", "/<_>"]));
assert!(unranked_route_collisions(&["/a/<_>", "///a//b"]));
assert!(unranked_route_collisions(&["//a///<_>", "/a//<b>"]));
assert!(unranked_route_collisions(&["//<_..>", "/a/b"]));
assert!(unranked_route_collisions(&["//<_..>", "/<_>"]));
} }
#[test] #[test]
@ -197,6 +208,11 @@ mod test {
assert!(!unranked_route_collisions(&["/a/b/c/d", "/a/b/c/<d>/e"])); assert!(!unranked_route_collisions(&["/a/b/c/d", "/a/b/c/<d>/e"]));
assert!(!unranked_route_collisions(&["/a/d/<b..>", "/a/b/c"])); assert!(!unranked_route_collisions(&["/a/d/<b..>", "/a/b/c"]));
assert!(!unranked_route_collisions(&["/a/d/<b..>", "/a/d"])); assert!(!unranked_route_collisions(&["/a/d/<b..>", "/a/d"]));
assert!(!unranked_route_collisions(&["/<_>", "/"]));
assert!(!unranked_route_collisions(&["/a/<_>", "/a"]));
assert!(!unranked_route_collisions(&["/a/<_..>", "/a"]));
assert!(!unranked_route_collisions(&["/a/<_..>", "/<_>"]));
assert!(!unranked_route_collisions(&["/a/<_>", "/<_>"]));
} }
#[test] #[test]
@ -207,6 +223,9 @@ mod test {
assert!(!default_rank_route_collisions(&["/hi", "/<hi>"])); assert!(!default_rank_route_collisions(&["/hi", "/<hi>"]));
assert!(!default_rank_route_collisions(&["/hi", "/<hi>"])); assert!(!default_rank_route_collisions(&["/hi", "/<hi>"]));
assert!(!default_rank_route_collisions(&["/a/b", "/a/b/<c..>"])); assert!(!default_rank_route_collisions(&["/a/b", "/a/b/<c..>"]));
assert!(!default_rank_route_collisions(&["/<_>", "/static"]));
assert!(!default_rank_route_collisions(&["/<_>/<_>", "/foo/bar"]));
assert!(!default_rank_route_collisions(&["/foo/<_>", "/foo/bar"]));
} }
#[test] #[test]