From cb351fe6b1dda644a4ec023dc850cdfe83732503 Mon Sep 17 00:00:00 2001 From: René Kijewski Date: Thu, 27 Jan 2022 10:33:13 +0100 Subject: 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`. --- testing/tests/calls.rs | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 testing/tests/calls.rs (limited to 'testing/tests') 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 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"); +} -- cgit