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 }