diff options
| author | 2022-01-27 10:33:13 +0100 | |
|---|---|---|
| committer | 2022-01-27 10:33:13 +0100 | |
| commit | cb351fe6b1dda644a4ec023dc850cdfe83732503 (patch) | |
| tree | 1c872f05b81ecada0010462380edfc0fde1dfde4 /testing/tests/calls.rs | |
| parent | bb7c60ece5dcfea9d31f79f445f80fdd4e0bf3ca (diff) | |
| download | askama-cb351fe6b1dda644a4ec023dc850cdfe83732503.tar.gz askama-cb351fe6b1dda644a4ec023dc850cdfe83732503.tar.bz2 askama-cb351fe6b1dda644a4ec023dc850cdfe83732503.zip | |
Unify handling of calls (#614)
Instead of having `Expr::VarCall`, `Expr::PathCall` and
`Expr::MethodCall`, this PR unifies the handling of calls by removing
the former three variants, and introducing `Expr::Call`.
Diffstat (limited to 'testing/tests/calls.rs')
| -rw-r--r-- | testing/tests/calls.rs | 82 | 
1 files changed, 82 insertions, 0 deletions
| diff --git a/testing/tests/calls.rs b/testing/tests/calls.rs new file mode 100644 index 0000000..052f34f --- /dev/null +++ b/testing/tests/calls.rs @@ -0,0 +1,82 @@ +use askama::Template; + +#[derive(Template)] +#[template(source = "{{ func(value) }}", ext = "txt")] +struct OneFunction { +    func: fn(&i32) -> i32, +    value: i32, +} + +#[test] +fn test_one_func() { +    let t = OneFunction { +        func: |&i| 2 * i, +        value: 123, +    }; +    assert_eq!(t.render().unwrap(), "246"); +} + +#[derive(Template)] +#[template(source = "{{ self.func(value) }}", ext = "txt")] +struct OneFunctionSelf { +    value: i32, +} + +impl OneFunctionSelf { +    fn func(&self, i: &i32) -> i32 { +        2 * i +    } +} + +#[test] +fn test_one_func_self() { +    let t = OneFunctionSelf { value: 123 }; +    assert_eq!(t.render().unwrap(), "246"); +} + +#[derive(Template)] +#[template(source = "{{ func[index](value) }}", ext = "txt")] +struct OneFunctionIndex<'a> { +    func: &'a [fn(&i32) -> i32], +    value: i32, +    index: usize, +} + +#[test] +fn test_one_func_index() { +    let t = OneFunctionIndex { +        func: &[|_| panic!(), |&i| 2 * i, |_| panic!(), |_| panic!()], +        value: 123, +        index: 1, +    }; +    assert_eq!(t.render().unwrap(), "246"); +} + +struct AddToGetAFunction; + +impl std::ops::Add<usize> for &AddToGetAFunction { +    type Output = fn(&i32) -> i32; + +    fn add(self, rhs: usize) -> Self::Output { +        assert_eq!(rhs, 1); +        |&i| 2 * i +    } +} + +#[derive(Template)] +#[template(source = "{{ (func + index)(value) }}", ext = "txt")] +struct OneFunctionBinop<'a> { +    func: &'a AddToGetAFunction, +    value: i32, +    index: usize, +} + +#[test] +fn test_one_func_binop() { +    let t = OneFunctionBinop { +        func: &AddToGetAFunction, +        value: 123, +        index: 1, +    }; +    assert_eq!(t.render().unwrap(), "246"); +} | 
