diff options
author | René Kijewski <Kijewski@users.noreply.github.com> | 2022-01-27 10:33:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-27 10:33:13 +0100 |
commit | cb351fe6b1dda644a4ec023dc850cdfe83732503 (patch) | |
tree | 1c872f05b81ecada0010462380edfc0fde1dfde4 /testing | |
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 '')
-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"); +} |