diff options
author | René Kijewski <kijewski@library.vetmed.fu-berlin.de> | 2021-07-18 11:42:47 +0200 |
---|---|---|
committer | Dirkjan Ochtman <dirkjan@ochtman.nl> | 2021-11-11 10:05:34 +0100 |
commit | cfe83bcb73b9e0cfd8a2d3151e4cab38327eabea (patch) | |
tree | a4e5b40e033b0d3cfc0d1b48298cb9f9e185d3dd /testing/tests | |
parent | f06022c70f2411252ad7ebb8214e0826beaefcf8 (diff) | |
download | askama-cfe83bcb73b9e0cfd8a2d3151e4cab38327eabea.tar.gz askama-cfe83bcb73b9e0cfd8a2d3151e4cab38327eabea.tar.bz2 askama-cfe83bcb73b9e0cfd8a2d3151e4cab38327eabea.zip |
Implement {{loop.cycle(…)}} similar to Jinja
Diffstat (limited to '')
-rw-r--r-- | testing/tests/loops.rs | 45 | ||||
-rw-r--r-- | testing/tests/ui/loop_cycle_wrong_argument_count.rs | 13 | ||||
-rw-r--r-- | testing/tests/ui/loop_cycle_wrong_argument_count.stderr | 7 |
3 files changed, 65 insertions, 0 deletions
diff --git a/testing/tests/loops.rs b/testing/tests/loops.rs index 49c37e0..f014068 100644 --- a/testing/tests/loops.rs +++ b/testing/tests/loops.rs @@ -372,3 +372,48 @@ fn test_loop_break_continue() { }; assert_eq!(t.render().unwrap(), "x1yx2yx3yx11x4yx5y"); } + +#[derive(Template)] +#[template( + source = r#"{% for v in values %}{{loop.cycle(["r", "g", "b"])}}{{v}},{% endfor %}"#, + ext = "txt" +)] +struct ForCycle<'a> { + values: &'a [u8], +} + +#[test] +fn test_for_cycle() { + let t = ForCycle { + values: &[1, 2, 3, 4, 5, 6, 7, 8, 9], + }; + assert_eq!(t.render().unwrap(), "r1,g2,b3,r4,g5,b6,r7,g8,b9,"); +} + +#[derive(Template)] +#[template( + source = r#"{% for v in values %}{{loop.cycle(cycle)}}{{v}},{% endfor %}"#, + ext = "txt" +)] +struct ForCycleDynamic<'a> { + values: &'a [u8], + cycle: &'a [char], +} + +#[test] +fn test_for_cycle_dynamic() { + let t = ForCycleDynamic { + values: &[1, 2, 3, 4, 5, 6, 7, 8, 9], + cycle: &['a', 'b', 'c', 'd'], + }; + assert_eq!(t.render().unwrap(), "a1,b2,c3,d4,a5,b6,c7,d8,a9,"); +} + +#[test] +fn test_for_cycle_empty() { + let t = ForCycleDynamic { + values: &[1, 2, 3, 4, 5, 6, 7, 8, 9], + cycle: &[], + }; + assert!(t.render().is_err()) +} diff --git a/testing/tests/ui/loop_cycle_wrong_argument_count.rs b/testing/tests/ui/loop_cycle_wrong_argument_count.rs new file mode 100644 index 0000000..e87f4f4 --- /dev/null +++ b/testing/tests/ui/loop_cycle_wrong_argument_count.rs @@ -0,0 +1,13 @@ +use askama::Template; + +#[derive(Template)] +#[template( + source = r#"{% for v in values %}{{ loop.cycle("r", "g", "b") }}{{ v }},{% endfor %}"#, + ext = "txt" +)] +struct ForCycle<'a> { + values: &'a [u8], +} + +fn main() { +} diff --git a/testing/tests/ui/loop_cycle_wrong_argument_count.stderr b/testing/tests/ui/loop_cycle_wrong_argument_count.stderr new file mode 100644 index 0000000..acf3bb1 --- /dev/null +++ b/testing/tests/ui/loop_cycle_wrong_argument_count.stderr @@ -0,0 +1,7 @@ +error: loop.cycle(…) expects exactly one argument + --> $DIR/loop_cycle_wrong_argument_count.rs:3:10 + | +3 | #[derive(Template)] + | ^^^^^^^^ + | + = note: this error originates in the derive macro `Template` (in Nightly builds, run with -Z macro-backtrace for more info) |