mirror of
https://github.com/askama-rs/askama.git
synced 2025-10-02 15:25:19 +00:00
Add test for rest pattern
This commit is contained in:
parent
2771533594
commit
c860a22e85
@ -1,78 +1,26 @@
|
|||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
|
|
||||||
#[test]
|
#[derive(Template)]
|
||||||
fn a() {
|
#[template(
|
||||||
#[derive(Template)]
|
source = r#"
|
||||||
#[template(source = "{% if let (a, ..) = abc %}-{{a}}-{% endif %}", ext = "txt")]
|
{%- if let [1, 2, who @ .., 4] = [1, 2, 3, 4] -%}
|
||||||
struct Tmpl {
|
111> {{"{:?}"|format(who)}}
|
||||||
abc: (u32, u32, u32),
|
{%- endif -%}
|
||||||
}
|
{%- if let [who @ .., 4] = [1, 2, 3, 4] -%}
|
||||||
|
222> {{"{:?}"|format(who)}}
|
||||||
assert_eq!(Tmpl { abc: (1, 2, 3) }.to_string(), "-1-");
|
{%- endif -%}
|
||||||
}
|
{%- if let [1, who @ ..] = [1, 2, 3, 4] -%}
|
||||||
|
333> {{"{:?}"|format(who)}}
|
||||||
|
{%- endif -%}
|
||||||
|
"#,
|
||||||
|
ext = "txt"
|
||||||
|
)]
|
||||||
|
struct Rest;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ab() {
|
fn test_rest() {
|
||||||
#[derive(Template)]
|
assert_eq!(
|
||||||
#[template(
|
Rest.render().unwrap(),
|
||||||
source = "{% if let (a, b, ..) = abc %}-{{a}}{{b}}-{% endif %}",
|
"111> [3]222> [1, 2, 3]333> [2, 3, 4]"
|
||||||
ext = "txt"
|
);
|
||||||
)]
|
|
||||||
struct Tmpl {
|
|
||||||
abc: (u32, u32, u32),
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_eq!(Tmpl { abc: (1, 2, 3) }.to_string(), "-12-");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn abc() {
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(
|
|
||||||
source = "{% if let (a, b, c, ..) = abc %}-{{a}}{{b}}{{c}}-{% endif %}",
|
|
||||||
ext = "txt"
|
|
||||||
)]
|
|
||||||
struct Tmpl1 {
|
|
||||||
abc: (u32, u32, u32),
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_eq!(Tmpl1 { abc: (1, 2, 3) }.to_string(), "-123-");
|
|
||||||
|
|
||||||
assert_eq!(Tmpl2 { abc: (1, 2, 3) }.to_string(), "-123-");
|
|
||||||
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(
|
|
||||||
source = "{% if let (a, b, c, ..) = abc %}-{{a}}{{b}}{{c}}-{% endif %}",
|
|
||||||
ext = "txt"
|
|
||||||
)]
|
|
||||||
struct Tmpl2 {
|
|
||||||
abc: (u32, u32, u32),
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_eq!(Tmpl2 { abc: (1, 2, 3) }.to_string(), "-123-");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn bc() {
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(
|
|
||||||
source = "{% if let (.., b, c) = abc %}-{{b}}{{c}}-{% endif %}",
|
|
||||||
ext = "txt"
|
|
||||||
)]
|
|
||||||
struct Tmpl {
|
|
||||||
abc: (u32, u32, u32),
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_eq!(Tmpl { abc: (1, 2, 3) }.to_string(), "-23-");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn c() {
|
|
||||||
#[derive(Template)]
|
|
||||||
#[template(source = "{% if let (.., c) = abc %}-{{c}}-{% endif %}", ext = "txt")]
|
|
||||||
struct Tmpl {
|
|
||||||
abc: (u32, u32, u32),
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_eq!(Tmpl { abc: (1, 2, 3) }.to_string(), "-3-");
|
|
||||||
}
|
}
|
||||||
|
60
testing/tests/ui/rest_pattern.rs
Normal file
60
testing/tests/ui/rest_pattern.rs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
use rinja::Template;
|
||||||
|
|
||||||
|
// Checking that we can't use `..` more than once.
|
||||||
|
#[derive(Template)]
|
||||||
|
#[template(
|
||||||
|
source = r#"
|
||||||
|
{%- if let [1, 2, who @ .., 4, ..] = [1, 2, 3, 4] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
"#,
|
||||||
|
ext = "txt"
|
||||||
|
)]
|
||||||
|
struct Err1;
|
||||||
|
|
||||||
|
#[derive(Template)]
|
||||||
|
#[template(
|
||||||
|
source = r#"
|
||||||
|
{%- if let (.., 1, 2, .., 4) = (1, 2, 3, 4) -%}
|
||||||
|
{%- endif -%}
|
||||||
|
"#,
|
||||||
|
ext = "txt"
|
||||||
|
)]
|
||||||
|
struct Err2;
|
||||||
|
|
||||||
|
// This code doesn't make sense but the goal is to ensure that you can't
|
||||||
|
// use `..` in a struct more than once.
|
||||||
|
#[derive(Template)]
|
||||||
|
#[template(
|
||||||
|
source = r#"
|
||||||
|
{%- if let Cake { .., a, .. } = [1, 2, 3, 4] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
"#,
|
||||||
|
ext = "txt"
|
||||||
|
)]
|
||||||
|
struct Err3;
|
||||||
|
|
||||||
|
// Now checking we can't use `@ ..` in tuples and structs.
|
||||||
|
#[derive(Template)]
|
||||||
|
#[template(
|
||||||
|
source = r#"
|
||||||
|
{%- if let (1, 2, who @ .., 4) = (1, 2, 3, 4) -%}
|
||||||
|
{%- endif -%}
|
||||||
|
"#,
|
||||||
|
ext = "txt"
|
||||||
|
)]
|
||||||
|
struct Err4;
|
||||||
|
|
||||||
|
// This code doesn't make sense but the goal is to ensure that you can't
|
||||||
|
// use `@ ..` in a struct so here we go.
|
||||||
|
#[derive(Template)]
|
||||||
|
#[template(
|
||||||
|
source = r#"
|
||||||
|
{%- if let Cake { a, who @ .. } = [1, 2, 3, 4] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
"#,
|
||||||
|
ext = "txt"
|
||||||
|
)]
|
||||||
|
struct Err5;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
60
testing/tests/ui/rest_pattern.stderr
Normal file
60
testing/tests/ui/rest_pattern.stderr
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
error: `..` can only be used once per array pattern
|
||||||
|
--> <source attribute>:2:31
|
||||||
|
"..] = [1, 2, 3, 4] -%}\n{%- endif -%}\n"
|
||||||
|
--> tests/ui/rest_pattern.rs:6:14
|
||||||
|
|
|
||||||
|
6 | source = r#"
|
||||||
|
| ______________^
|
||||||
|
7 | | {%- if let [1, 2, who @ .., 4, ..] = [1, 2, 3, 4] -%}
|
||||||
|
8 | | {%- endif -%}
|
||||||
|
9 | | "#,
|
||||||
|
| |__^
|
||||||
|
|
||||||
|
error: `..` can only be used once per tuple pattern
|
||||||
|
--> <source attribute>:2:22
|
||||||
|
".., 4) = (1, 2, 3, 4) -%}\n{%- endif -%}\n"
|
||||||
|
--> tests/ui/rest_pattern.rs:16:14
|
||||||
|
|
|
||||||
|
16 | source = r#"
|
||||||
|
| ______________^
|
||||||
|
17 | | {%- if let (.., 1, 2, .., 4) = (1, 2, 3, 4) -%}
|
||||||
|
18 | | {%- endif -%}
|
||||||
|
19 | | "#,
|
||||||
|
| |__^
|
||||||
|
|
||||||
|
error: unexpected `,` character after `..`
|
||||||
|
note that in a named struct, `..` must come last to ignore other members
|
||||||
|
--> <source attribute>:2:20
|
||||||
|
", a, .. } = [1, 2, 3, 4] -%}\n{%- endif -%}\n"
|
||||||
|
--> tests/ui/rest_pattern.rs:28:14
|
||||||
|
|
|
||||||
|
28 | source = r#"
|
||||||
|
| ______________^
|
||||||
|
29 | | {%- if let Cake { .., a, .. } = [1, 2, 3, 4] -%}
|
||||||
|
30 | | {%- endif -%}
|
||||||
|
31 | | "#,
|
||||||
|
| |__^
|
||||||
|
|
||||||
|
error: `@ ..` cannot be used in tuple
|
||||||
|
--> <source attribute>:2:18
|
||||||
|
"who @ .., 4) = (1, 2, 3, 4) -%}\n{%- endif -%}\n"
|
||||||
|
--> tests/ui/rest_pattern.rs:39:14
|
||||||
|
|
|
||||||
|
39 | source = r#"
|
||||||
|
| ______________^
|
||||||
|
40 | | {%- if let (1, 2, who @ .., 4) = (1, 2, 3, 4) -%}
|
||||||
|
41 | | {%- endif -%}
|
||||||
|
42 | | "#,
|
||||||
|
| |__^
|
||||||
|
|
||||||
|
error: `@ ..` cannot be used in struct
|
||||||
|
--> <source attribute>:2:21
|
||||||
|
"who @ .. } = [1, 2, 3, 4] -%}\n{%- endif -%}\n"
|
||||||
|
--> tests/ui/rest_pattern.rs:51:14
|
||||||
|
|
|
||||||
|
51 | source = r#"
|
||||||
|
| ______________^
|
||||||
|
52 | | {%- if let Cake { a, who @ .. } = [1, 2, 3, 4] -%}
|
||||||
|
53 | | {%- endif -%}
|
||||||
|
54 | | "#,
|
||||||
|
| |__^
|
Loading…
x
Reference in New Issue
Block a user