1--TEST--
2"default" filter
3--TEMPLATE--
4Variable:
5{{ definedVar                  |default('default') is same as('default') ? 'ko' : 'ok' }}
6{{ zeroVar                     |default('default') is same as('default') ? 'ko' : 'ok' }}
7{{ emptyVar                    |default('default') is same as('default') ? 'ok' : 'ko' }}
8{{ nullVar                     |default('default') is same as('default') ? 'ok' : 'ko' }}
9{{ undefinedVar                |default('default') is same as('default') ? 'ok' : 'ko' }}
10Array access:
11{{ nested.definedVar           |default('default') is same as('default') ? 'ko' : 'ok' }}
12{{ nested['definedVar']        |default('default') is same as('default') ? 'ko' : 'ok' }}
13{{ nested.zeroVar              |default('default') is same as('default') ? 'ko' : 'ok' }}
14{{ nested.emptyVar             |default('default') is same as('default') ? 'ok' : 'ko' }}
15{{ nested.nullVar              |default('default') is same as('default') ? 'ok' : 'ko' }}
16{{ nested.undefinedVar         |default('default') is same as('default') ? 'ok' : 'ko' }}
17{{ nested['undefinedVar']      |default('default') is same as('default') ? 'ok' : 'ko' }}
18{{ undefinedVar.foo            |default('default') is same as('default') ? 'ok' : 'ko' }}
19Plain values:
20{{ 'defined'                   |default('default') is same as('default') ? 'ko' : 'ok' }}
21{{ 0                           |default('default') is same as('default') ? 'ko' : 'ok' }}
22{{ ''                          |default('default') is same as('default') ? 'ok' : 'ko' }}
23{{ null                        |default('default') is same as('default') ? 'ok' : 'ko' }}
24Precedence:
25{{ 'o' ~ nullVar               |default('k') }}
26{{ 'o' ~ nested.nullVar        |default('k') }}
27Object methods:
28{{ object.foo                  |default('default') is same as('default') ? 'ko' : 'ok' }}
29{{ object.undefinedMethod      |default('default') is same as('default') ? 'ok' : 'ko' }}
30{{ object.getFoo()             |default('default') is same as('default') ? 'ko' : 'ok' }}
31{{ object.getFoo('a')          |default('default') is same as('default') ? 'ko' : 'ok' }}
32{{ object.undefinedMethod()    |default('default') is same as('default') ? 'ok' : 'ko' }}
33{{ object.undefinedMethod('a') |default('default') is same as('default') ? 'ok' : 'ko' }}
34Deep nested:
35{{ nested.undefinedVar.foo.bar |default('default') is same as('default') ? 'ok' : 'ko' }}
36{{ nested.definedArray.0       |default('default') is same as('default') ? 'ko' : 'ok' }}
37{{ nested['definedArray'][0]   |default('default') is same as('default') ? 'ko' : 'ok' }}
38{{ object.self.foo             |default('default') is same as('default') ? 'ko' : 'ok' }}
39{{ object.self.undefinedMethod |default('default') is same as('default') ? 'ok' : 'ko' }}
40{{ object.undefinedMethod.self |default('default') is same as('default') ? 'ok' : 'ko' }}
41--DATA--
42return [
43    'definedVar' => 'defined',
44    'zeroVar'    => 0,
45    'emptyVar'   => '',
46    'nullVar'    => null,
47    'nested'     => [
48        'definedVar'   => 'defined',
49        'zeroVar'      => 0,
50        'emptyVar'     => '',
51        'nullVar'      => null,
52        'definedArray' => [0],
53    ],
54    'object' => new TwigTestFoo(),
55]
56--CONFIG--
57return ['strict_variables' => false]
58--EXPECT--
59Variable:
60ok
61ok
62ok
63ok
64ok
65Array access:
66ok
67ok
68ok
69ok
70ok
71ok
72ok
73ok
74Plain values:
75ok
76ok
77ok
78ok
79Precedence:
80ok
81ok
82Object methods:
83ok
84ok
85ok
86ok
87ok
88ok
89Deep nested:
90ok
91ok
92ok
93ok
94ok
95ok
96--DATA--
97return [
98    'definedVar' => 'defined',
99    'zeroVar'    => 0,
100    'emptyVar'   => '',
101    'nullVar'    => null,
102    'nested'     => [
103        'definedVar'   => 'defined',
104        'zeroVar'      => 0,
105        'emptyVar'     => '',
106        'nullVar'      => null,
107        'definedArray' => [0],
108    ],
109    'object' => new TwigTestFoo(),
110]
111--CONFIG--
112return ['strict_variables' => true]
113--EXPECT--
114Variable:
115ok
116ok
117ok
118ok
119ok
120Array access:
121ok
122ok
123ok
124ok
125ok
126ok
127ok
128ok
129Plain values:
130ok
131ok
132ok
133ok
134Precedence:
135ok
136ok
137Object methods:
138ok
139ok
140ok
141ok
142ok
143ok
144Deep nested:
145ok
146ok
147ok
148ok
149ok
150ok
151