1 module tests.statements.set_;
2 
3 private
4 {
5     import tests.asserts;
6 }
7 
8 
9 long[] testFunc()
10 {
11     return [1, 2]; 
12 }
13 
14 
15 unittest
16 {
17     // Simple set
18     assertRender(`{% set a = 10 %}{{a}}`, "10");
19     assertRender(`{% set a, b = 10, 'str' %}{{a ~ b}}`, "10str");
20 
21     // Set from iterable
22     assertRender(`{% set a, b, c = [1, 's', [2,3]] %}{{a ~ b ~ c}}`, "1s[2, 3]");
23     assertRender(`{% set a, b, c = (1, 's', [2,3]) %}{{a ~ b ~ c}}`, "1s[2, 3]");
24     assertRender!(testFunc)(`{% set a, b = testFunc() %}{{a ~ b}}`, "12");
25 }
26 
27 // Intended scope behavior
28 unittest
29 {
30     assertRender(
31             `{% with %}` ~
32                 `{% set a = 10 %}` ~
33                 `{{ a is defined }}` ~
34             `{% endwith %}` ~
35             `{{ a is defined }}`
36             ,
37             "true" ~ "false");
38 }
39 
40 // Extended scope bahavior
41 unittest
42 {
43     assertRender(
44             `{% set a = 10 %}` ~
45             `{% with %}` ~
46                 `{% set a = 15 %}` ~
47             `{% endwith %}` ~
48             `{{ a }}`
49             ,
50             "15");
51 }
52 
53 // Namespace for compitability
54 unittest
55 {
56     assertRender(
57             `{% set ns = namespace(a=10) %}` ~
58             `{% with %}` ~
59                 `{% set ns.a = 15 %}` ~
60             `{% endwith %}` ~
61             `{{ ns.a }}`
62             ,
63             "15");
64 }