diff options
Diffstat (limited to '')
| -rw-r--r-- | testing/tests/loops.rs | 69 | 
1 files changed, 69 insertions, 0 deletions
| diff --git a/testing/tests/loops.rs b/testing/tests/loops.rs index 7b008a2..fffb39d 100644 --- a/testing/tests/loops.rs +++ b/testing/tests/loops.rs @@ -1,3 +1,6 @@ +#![allow(clippy::type_complexity)] + +use std::fmt;  use std::ops::Range;  use askama::Template; @@ -235,3 +238,69 @@ fn test_for_vec_attr_slice_shadowing() {      };      assert_eq!(t.render().unwrap(), "1 2 3 4 5 6 ");  } + +struct NotClonable<T: fmt::Display>(T); + +impl<T: fmt::Display> fmt::Display for NotClonable<T> { +    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { +        self.0.fmt(formatter) +    } +} + +#[derive(Template)] +#[template( +    source = "{% for (((a,), b), c) in v %}{{a}}{{b}}{{c}}-{% endfor %}", +    ext = "txt" +)] +struct ForDestructoringRefTupleTemplate<'a> { +    v: &'a [(((char,), NotClonable<char>), &'a char)], +} + +#[test] +fn test_for_destructoring_ref_tuple() { +    let v = [ +        ((('a',), NotClonable('b')), &'c'), +        ((('d',), NotClonable('e')), &'f'), +        ((('g',), NotClonable('h')), &'i'), +    ]; +    let t = ForDestructoringRefTupleTemplate { v: &v }; +    assert_eq!(t.render().unwrap(), "abc-def-ghi-"); +} + +#[derive(Template)] +#[template( +    source = "{% for (((a,), b), c) in v %}{{a}}{{b}}{{c}}-{% endfor %}", +    ext = "txt" +)] +struct ForDestructoringTupleTemplate<'a, const N: usize> { +    v: [(((char,), NotClonable<char>), &'a char); N], +} + +#[test] +fn test_for_destructoring_tuple() { +    let t = ForDestructoringTupleTemplate { +        v: [ +            ((('a',), NotClonable('b')), &'c'), +            ((('d',), NotClonable('e')), &'f'), +            ((('g',), NotClonable('h')), &'i'), +        ], +    }; +    assert_eq!(t.render().unwrap(), "abc-def-ghi-"); +} + +#[derive(Template)] +#[template( +    source = "{% for (i, msg) in messages.iter().enumerate() %}{{i}}={{msg}}-{% endfor %}", +    ext = "txt" +)] +struct ForEnumerateTemplate<'a> { +    messages: &'a [&'a str], +} + +#[test] +fn test_for_enumerate() { +    let t = ForEnumerateTemplate { +        messages: &["hello", "world", "!"], +    }; +    assert_eq!(t.render().unwrap(), "0=hello-1=world-2=!-"); +} | 
