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