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