diff options
Diffstat (limited to 'testing')
-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"); +} |