aboutsummaryrefslogtreecommitdiffstats
path: root/testing/tests/calls.rs
diff options
context:
space:
mode:
authorLibravatar René Kijewski <Kijewski@users.noreply.github.com>2022-01-27 10:33:13 +0100
committerLibravatar GitHub <noreply@github.com>2022-01-27 10:33:13 +0100
commitcb351fe6b1dda644a4ec023dc850cdfe83732503 (patch)
tree1c872f05b81ecada0010462380edfc0fde1dfde4 /testing/tests/calls.rs
parentbb7c60ece5dcfea9d31f79f445f80fdd4e0bf3ca (diff)
downloadaskama-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.rs82
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");
+}