Repository URL to install this package:
|
Version:
2.5.0 ▾
|
]q (cpygments.token
_TokenType
qX Otherq
q
qq}q(X subtypesqcbuiltins
set
q]q
q
RqX parentqh)
q
q}q(hh]q(hX Escapeq
q
qq}q(hh]q
qRqhhubhX Operatorq
q
qq}q(hh]q(hhX DBSqq
q!q"}q#(hh]q$
q%Rq&hhubhhX Wordq'q(
q)q*}q+(hh]q,
q-Rq.hhube
q/Rq0hhh'h*hh"ubhX Nameq1
q2
q3q4}q5(hh]q6(hh1X Tagq7q8
q9q:}q;(hh]q<
q=Rq>hh4ubhh1X Entityq?q@
qAqB}qC(hh]qDhh1h?hqE
qFqG}qH(hh]qI
qJRqKhhBuba
qLRqMhh4hhGubhh1X ExceptionqNqO
qPqQ}qR(hh]qS
qTRqUhh4ubhh1X DecoratorqVqW
qXqY}qZ(hh]q[
q\Rq]hh4ubhh1X Classq^q_
q`qa}qb(hh]qc(hh1h^hqd
qeqf}qg(hh]qh
qiRqjhhaubhh1h^X Startqkql
qmqn}qo(hh]qp
qqRqrhhaube
qsRqthh4hkhnhhfubhh1X Variablequqv
qwqx}qy(hh]qz(hh1huX Anonymousq{q|
q}q~}q(hh]q
qRqhhxubhh1huh^q
qq
}q(hh]q
qRqhhxubhh1huX Magicqq
qq}q(hh]q
qRqhhxubhh1huX Globalqq
qq}q(hh]q
qRqhhxubhh1huX Instanceqq
qq}q(hh]q
q Rq¡hhxube
q¢Rq£hh4h^h
hhhhhhh{h~ubhh1X Attributeq¤q¥
q¦q§}q¨(hh]q©hh1h¤huqª
q«q¬}q(hh]q®
q¯Rq°hh§uba
q±Rq²hh4huh¬ubhh1X Namespaceq³q´
qµq¶}q·(hh]q¸
q¹Rqºhh4ubhh1X Propertyq»q¼
q½q¾}q¿(hh]qqÁRqÂhh4ubhh1X SymbolqÆqąqŁqÆ}qÇ(hh]qȅqÉRqÊhh4ubhh1X Classesqˆq̅q́qÎ}qÏ(hh]qЅqÑRqÒhh4ubhh1X PseudoqӆqԅqՁqÖ}q×(hh]qqÙRqÚhh4ubhh1X Labelqۆq܅q݁qÞ}qß(hh]qà
qáRqâhh4ubhh1hqã
qäqå}qæ(hh]qç
qèRqéhh4ubhh1X Builtinqêqë
qìqí}qî(hh]qï(hh1hêhӇqð
qñqò}qó(hh]qô
qõRqöhhíubhh1hêX Typeq÷qø
qùqú}qû(hh]qü
qýRqþhhíube
qÿRr hh4hÓhòh÷húubhh1X Fieldr r
r r }r (hh]r
r Rr hh4ubhh1hr
r
r }r (hh]r
hh1hX Memberr r
r r }r (hh]r
r Rr hj uba
r Rr hh4j j ubhh1X Functionr r
r r }r (hh]r hh1j hr
r r }r! (hh]r"
r# Rr$ hj uba
r% Rr& hh4hj ubhh1h÷r'
r( r) }r* (hh]r+
r, Rr- hh4ubhh1X Constantr. r/
r0 r1 }r2 (hh]r3
r4 Rr5 hh4ube
r6 Rr7 hhh¤h§hêhíh^haj. j1 hVhYh?hBhNhQj j h»h¾hÛhÞh³h¶hj h7h:huhxj j hÃhÆhÓhÖhhåhËhÎh÷j) ubhX Literalr8
r9
r: r; }r< (hh]r= (hj8 hr>
r? r@ }rA (hh]rB
rC RrD hj; ubhj8 X CharrE rF
rG rH }rI (hh]rJ
rK RrL hj; ubhj8 X DaterM rN
rO rP }rQ (hh]rR
rS RrT hj; ubhj8 X ScalarrU rV
rW rX }rY (hh]rZ hj8 jU X Plainr[ r\
r] r^ }r_ (hh]r`
ra Rrb hjX uba
rc Rrd hj; j[ j^ ubhj8 X Stringre rf
rg rh }ri (hh]rj (hj8 je X Interpolrk rl
rm rn }ro (hh]rp
rq Rrr hjh ubhj8 je X Delimeterrs rt
ru rv }rw (hh]rx
ry Rrz hjh ubhj8 je jE r{
r| r} }r~ (hh]r
r Rr hjh ubhj8 je hÇr
r r }r
(hh]r
r Rr hjh ubhj8 je X Singler r
r r }r (hh]r
r Rr hjh ubhj8 je hr
r r }r (hh]r
r Rr hjh ubhj8 je X Backtickr r
r r }r (hh]r
r Rr hjh ubhj8 je hr
r¡ r¢ }r£ (hh]r¤
r¥ Rr¦ hjh ubhj8 je X Regexr§ r¨
r© rª }r« (hh]r¬
r Rr® hjh ubhj8 je X Momentr¯ r°
r± r² }r³ (hh]r´
rµ Rr¶ hjh ubhj8 je X Booleanr· r¸
r¹ rº }r» (hh]r¼
r½ Rr¾ hjh ubhj8 je X Characterr¿ rÀ
rÁ r }rà (hh]rÄ
rÅ RrÆ hjh ubhj8 je X DelimiterrÇ rÈ
rÉ rÊ }rË (hh]rÌ
rÍ RrÎ hjh ubhj8 je X DocrÏ rÐ
rÑ rÒ }rÓ (hh]rÔ
rÕ RrÖ hjh ubhj8 je h1r×
rØ rÙ }rÚ (hh]rÛ
rÜ RrÝ hjh ubhj8 je X AffixrÞ rß
rà rá }râ (hh]rã
rä Rrå hjh ubhj8 je X Heredocræ rç
rè ré }rê (hh]rë
rì Rrí hjh ubhj8 je X Doublerî rï
rð rñ }rò (hh]ró
rô Rrõ hjh ubhj8 je X Interprö r÷
rø rù }rú (hh]rû
rü Rrý hjh ubhj8 je X Atomrþ rÿ
r r }r (hh]r
r Rr hjh ube
r Rr hj; jÞ já j j jE j} jÇ jÊ jÏ jÒ jî jñ hj¢ jæ jé jk jn hj j§ jª j j hÃj j¿ j j¯ j² jö jù j· jº js jv jþ j h1jÙ ubhj8 X Numberr r
r
r }r (hh]r
(hj8 j X Floatr r
r r }r (hh]r
r Rr hj ubhj8 j X Decr r
r r }r (hh]r
r Rr hj ubhj8 j X Radixr r
r r! }r" (hh]r#
r$ Rr% hj ubhj8 j X Octr& r'
r( r) }r* (hh]r+
r, Rr- hj ubhj8 j X Binr. r/
r0 r1 }r2 (hh]r3
r4 Rr5 hj ubhj8 j h¤r6
r7 r8 }r9 (hh]r:
r; Rr< hj ubhj8 j X Hexr= r>
r? r@ }rA (hh]rB
rC RrD hj ubhj8 j X IntegerrE rF
rG rH }rI (hh]rJ h(j8 j jE X LongrK trL
rM rN }rO (hh]rP
rQ RrR hjH uba
rS RrT hj jK jN ubhj8 j X DecimalrU rV
rW rX }rY (hh]rZ
r[ Rr\ hj ube
r] Rr^ hj; j. j1 j j j= j@ jE jH j& j) j j! h¤j8 jU jX j j ube
r_ Rr` hhje jh j j jM jP jU jX hj@ jE jH ubhX Genericra
rb
rc rd }re (hh]rf (hja X Errorrg rh
ri rj }rk (hh]rl
rm Rrn hjd ubhja X
Subheadingro rp
rq rr }rs (hh]rt
ru Rrv hjd ubhja X Tracebackrw rx
ry rz }r{ (hh]r|
r} Rr~ hjd ubhja X Outputr r
r r }r (hh]r
r
Rr hjd ubhja X Promptr r
r r }r (hh]r
r Rr hjd ubhja X Deletedr r
r r }r (hh]r
r Rr hjd ubhja X Insertedr r
r r }r (hh]r
r Rr hjd ubhja X Headingr r
r¡ r¢ }r£ (hh]r¤
r¥ Rr¦ hjd ubhja X Strongr§ r¨
r© rª }r« (hh]r¬
r Rr® hjd ubhja X Emphr¯ r°
r± r² }r³ (hh]r´
rµ Rr¶ hjd ube
r· Rr¸ hhj j j¯ j² jg jj j j¢ j j j j j j j§ jª jo jr jw jz ubhjg
r¹
rº r» }r¼ (hh]r½
r¾ Rr¿ hhubhX KeywordrÀ
rÁ
r rà }rÄ (hh]rÅ (hjÀ h'rÆ
rÇ rÈ }rÉ (hh]rÊ
rË RrÌ hjà ubhjÀ jÀ rÍ
rÎ rÏ }rÐ (hh]rÑ
rÒ RrÓ hjà ubhjÀ h÷rÔ
rÕ rÖ }r× (hh]rØ
rÙ RrÚ hjà ubhjÀ X PreProcrÛ rÜ
rÝ rÞ }rß (hh]rà
rá Rrâ hjà ubhjÀ X Controlrã rä
rå ræ }rç (hh]rè
ré Rrê hjà ubhjÀ j. rë
rì rí }rî (hh]rï
rð Rrñ hjà ubhjÀ h³rò
ró rô }rõ (hh]rö
r÷ Rrø hjà ubhjÀ hӆrù
rú rû }rü (hh]rý
rþ Rrÿ hjà ubhjÀ X Declarationr r
r r }r (hh]r
r Rr hjà ubhjÀ X Reservedr r
r
r }r (hh]r
r Rr hjà ube
r Rr hhj. jí j j h³jô hÓjû j j h÷jÖ jã jæ jÀ jÏ jÛ jÞ h'jÈ ubhhX Textr
r
r r }r (hh]r (hj X Rootr r
r r }r (hh]r
r Rr hj ubhj hÆr
r! r" }r# (hh]r$
r% Rr& hj ubhj X Ragr' r(
r) r* }r+ (hh]r,
r- Rr. hj ubhj X
Whitespacer/ r0
r1 r2 }r3 (hh]r4
r5 Rr6 hj ubhj X Beerr7 r8
r9 r: }r; (hh]r<
r= Rr> hj ubhj X Punctuationr? r@
rA rB }rC (hh]rD
rE RrF hj ube
rG RrH hhj/ j2 hÃj" j? jB j j j7 j: j' j* ubhX CommentrI
rJ
rK rL }rM (hh]rN (hjI X PreprocrO rP
rQ rR }rS (hh]rT
rU RrV hjL ubhjI X MultirW rX
rY rZ }r[ (hh]r\
r] Rr^ hjL ubhjI X Hashbangr_ r`
ra rb }rc (hh]rd
re Rrf hjL ubhjI j rg
rh ri }rj (hh]rk
rl Rrm hjL ubhjI X
SingleLinern ro
rp rq }rr (hh]rs
rt Rru hjL ubhjI jÏ rv
rw rx }ry (hh]rz
r{ Rr| hjL ubhjI X Directiver} r~
r r }r (hh]r
r Rr hjL ubhjI X Multiliner
r
r r }r (hh]r
r Rr hjL ubhjI X
Singleliner r
r r }r (hh]r
r Rr hjL ubhjI X PreprocFiler r
r r }r (hh]r
r Rr hjL ubhjI X Specialr r
r r }r¡ (hh]r¢
r£ Rr¤ hjL ube
r¥ Rr¦ hhj_ jb j
j jO jR j j j ji j j j} j jn jq jÏ jx jW jZ j j ubhj?
r§
r¨ r© }rª (hh]r« hj? X Indicatorr¬ r
r® r¯ }r° (hh]r±
r² Rr³ hj© uba
r´ Rrµ hhj¬ j¯ ube
r¶ Rr· j j hhjg j» hhjÀ jà h1h4j8 j; j? j© hhjI jL ja jd X Tokenr¸ hje jh j j ububX From the Twig test suite, https://github.com/fabpot/Twig, available under BSD license.
--TEST--
Exception for an unclosed tag
--TEMPLATE--
r¹ rº jR X {%r» r¼ j X r½ r¾ jà X blockr¿ rÀ j j½ rÁ hxX foor rà j j½ rÄ jR X %}rÅ rÆ hX
rÇ rÈ jR X {%rÉ rÊ j j½ rË jà X ifrÌ rÍ j j½ rÎ hxX foorÏ rÐ j j½ rÑ jR X %}rÒ rÓ hX
rÔ rÕ jR X {%rÖ r× j j½ rØ jà X forrÙ rÚ j j½ rÛ hxX irÜ rÝ j j½ rÞ jà X inrß rà j j½ rá hxX forâ rã j j½ rä jR X %}rå ræ hX
rç rè jR X {%ré rê j j½ rë jà X endforrì rí j j½ rî jR X %}rï rð hX
rñ rò jR X {%ró rô j j½ rõ jà X endblockrö r÷ j j½ rø jR X %}rù rú hXÐ
--EXCEPTION--
Twig_Error_Syntax: Unexpected tag name "endblock" (expecting closing tag for the "if" tag defined near line 4) in "index.twig" at line 16
--TEST--
Exception for an undefined trait
--TEMPLATE--
rû rü jR X {%rý rþ j j½ rÿ jà X user r j j½ r j X 'foo'r r j j½ r hxX withr r j j½ r hxX foobarr r
j j½ r hxX asr r
j j½ r hxX barr r j j½ r jR X %}r r hX
--TEMPLATE(foo)--
r r jR X {%r r j j½ r jà X blockr r j j½ r hxX barr r j j½ r jR X %}r r hX
r! r" jR X {%r# r$ j j½ r% jà X endblockr& r' j j½ r( jR X %}r) r* hX
--EXCEPTION--
Twig_Error_Runtime: Block "foobar" is not defined in trait "foo" in "index.twig".
--TEST--
Twig supports method calls
--TEMPLATE--
r+ r, jR X {{r- r. j j½ r/ hxX itemsr0 r1 hxX .foor2 r3 j j½ r4 jR X }}r5 r6 hj! r7 jR X {{r8 r9 j j½ r: hxX itemsr; r< hX [r= r> j X 'foo'r? r@ hX ]rA rB j j½ rC jR X }}rD rE hj! rF jR X {{rG rH j j½ rI hxX itemsrJ rK hj= rL hxX foorM rN hjA rO j j½ rP jR X }}rQ rR hj! rS jR X {{rT rU j j½ rV hxX itemsrW rX hj= rY hxX itemsrZ r[ hj= r\ hxX foor] r^ hjA r_ hjA r` j j½ ra jR X }}rb rc hX§
--DATA--
return array('foo' => 'bar', 'items' => array('foo' => 'bar', 'bar' => 'foo'))
--EXPECT--
bar
bar
foo
bar
--TEST--
Twig supports array notation
--TEMPLATE--
rd re jL X {# empty array #}rf rg hj! rh jR X {{ri rj j j½ rk hj= rl hjA rm hX |rn ro j X joinrp rq hX (rr rs j X ','rt ru hX )rv rw j j½ rx jR X }}ry rz hX
r{ r| jR X {{r} r~ j j½ r hj= r j X 1r r hX ,r r j j½ r
j X 2r r hjA r hjn r j X joinr r hjr r j X ','r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hj= r j X 'foo'r r hj r j j½ r jñ X "bar"r r hjA r hjn r j X joinr r¡ hjr r¢ j X ','r£ r¤ hjv r¥ j j½ r¦ jR X }}r§ r¨ hj! r© jR X {{rª r« j j½ r¬ hX {r r® j X 0r¯ r° hX :r± r² j j½ r³ j j r´ hj rµ j j½ r¶ j X 'foo'r· r¸ hj± r¹ j j½ rº j X 'bar'r» r¼ hX }r½ r¾ hjn r¿ j X joinrÀ rÁ hjr r j X ','rà rÄ hjv rÅ j j½ rÆ jR X }}rÇ rÈ hj! rÉ jR X {{rÊ rË j j½ rÌ hj rÍ j j¯ rÎ hj± rÏ j j½ rÐ j j rÑ hj rÒ j j½ rÓ j X 'foo'rÔ rÕ hj± rÖ j j½ r× j X 'bar'rØ rÙ hj½ rÚ hjn rÛ j X keysrÜ rÝ hjn rÞ j X joinrß rà hjr rá j X ','râ rã hjv rä j j½ rå jR X }}ræ rç hX
rè ré jR X {{rê rë j j½ rì hj rí j j¯ rî hj± rï j j½ rð j j rñ hj rò j j½ ró hxX foorô rõ hj± rö j j½ r÷ j X 'bar'rø rù hj½ rú hjn rû j X joinrü rý hjr rþ j X ','rÿ r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hj r j j¯ r
hj± r j j½ r j j r
hj r j j½ r hxX foor r hj± r j j½ r j X 'bar'r r hj½ r hjn r j X keysr r hjn r j X joinr r hjr r j X ','r r hjv r j j½ r! jR X }}r" r# hX
r$ r% jL X {# nested arrays #}r& r' hj! r( jR X {%r) r* j j½ r+ jà X setr, r- j j½ r. hxX ar/ r0 j j½ r1 hX =r2 r3 j j½ r4 hj= r5 j j r6 hj r7 j j½ r8 j j r9 hj r: j j½ r; hj= r< j j r= hj r> j j½ r? j j r@ hjA rA hj rB j j½ rC hj rD j X 'foo'rE rF hj± rG j j½ rH hj rI j X 'foo'rJ rK hj± rL j j½ rM j X 'bar'rN rO hj½ rP hj½ rQ hjA rR j j½ rS jR X %}rT rU hj! rV jR X {{rW rX j j½ rY hxj/ rZ hj= r[ j j r\ hjA r] hjn r^ j X joinr_ r` hjr ra j X ','rb rc hjv rd j j½ re jR X }}rf rg hj! rh jR X {{ri rj j j½ rk hxj/ rl hj= rm j X 3rn ro hjA rp hj= rq jñ X "foo"rr rs hjA rt hjn ru j X joinrv rw hjr rx j X ','ry rz hjv r{ j j½ r| jR X }}r} r~ hX
r r jL X/ {# works even if [] is used inside the array #}r r hj! r jR X {{r r
j j½ r hj= r hxX foor r hj= r hxX barr r hjA r hjA r hjn r j X joinr r hjr r j X ','r r hjv r j j½ r jR X }}r r hX
r r jL X$ {# elements can be any expression #}r r hj! r jR X {{r r j j½ r hj= r¡ j X 'foo'r¢ r£ hjn r¤ j X upperr¥ r¦ hj r§ j j½ r¨ hxX barr© rª hjn r« j X upperr¬ r hj r® j j½ r¯ hxX barr° r± j j½ r² hX ==r³ r´ j j½ rµ hxX foor¶ r· hjA r¸ hjn r¹ j X joinrº r» hjr r¼ j X ','r½ r¾ hjv r¿ j j½ rÀ jR X }}rÁ r hX
rà rÄ jL X. {# arrays can have a trailing , like in PHP #}rÅ rÆ hj! rÇ jR X {{rÈ rÉ j X
rÊ rË hj= rÌ j X
rÍ rÎ j j rÏ hj rÐ j X
rÑ rÒ j j rÓ hj rÔ j X
rÕ rÖ hjA r× hjn rØ j X joinrÙ rÚ hjr rÛ j X ','rÜ rÝ hjv rÞ j j! rß jR X }}rà rá hX
râ rã jL X {# keys can be any expression #}rä rå hj! ræ jR X {%rç rè j j½ ré jà X setrê rë j j½ rì hxj/ rí j j½ rî hj2 rï j j½ rð j j rñ j j½ rò jR X %}ró rô hj! rõ jR X {%rö r÷ j j½ rø jà X setrù rú j j½ rû hxX brü rý j j½ rþ hj2 rÿ j j½ r jñ X "foo"r r j j½ r jR X %}r r hj! r jR X {%r r j j½ r jà X setr
r j j½ r hxX aryr
r j j½ r hj2 r j j½ r hj r j j½ r hjr r hxj/ r hjv r hj± r j j½ r j X 'a'r r hj r j j½ r hjr r hxjü r hjv r hj± r j j½ r! j X 'b'r" r# hj r$ j j½ r% j X 'c'r& r' hj± r( j j½ r) j X 'c'r* r+ hj r, j j½ r- hjr r. hxj/ r/ j j½ r0 hX ~r1 r2 j j½ r3 hxjü r4 hjv r5 hj± r6 j j½ r7 j X 'd'r8 r9 j j½ r: hj½ r; j j½ r< jR X %}r= r> hj! r? jR X {{r@ rA j j½ rB hxX aryrC rD hjn rE j X keysrF rG hjn rH j X joinrI rJ hjr rK j X ','rL rM hjv rN j j½ rO jR X }}rP rQ hj! rR jR X {{rS rT j j½ rU hxX aryrV rW hjn rX j X joinrY rZ hjr r[ j X ','r\ r] hjv r^ j j½ r_ jR X }}r` ra hXü
--DATA--
return array('bar' => 'bar', 'foo' => array('bar' => 'bar'))
--EXPECT--
1,2
foo,bar
1,bar
0,foo
1,bar
0,foo
1,2
bar
bar
FOO,BAR,
1,2
1,foo,c,1foo
a,b,c,d
--TEST--
Twig supports binary operations (+, -, *, /, ~, %, and, or)
--TEMPLATE--
rb rc jR X {{rd re j j½ rf j j rg j j½ rh hX +ri rj j j½ rk j j rl j j½ rm jR X }}rn ro hj! rp jR X {{rq rr j j½ rs j j rt j j½ ru hX -rv rw j j½ rx j j ry j j½ rz jR X }}r{ r| hj! r} jR X {{r~ r j j½ r j j r j j½ r hX *r r j j½ r
j j r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j j r j j½ r hX /r r j j½ r j j r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j jn r j j½ r hX %r r j j½ r j j r j j½ r¡ jR X }}r¢ r£ hj! r¤ jR X {{r¥ r¦ j j½ r§ j j r¨ j j½ r© jà X andrª r« j j½ r¬ j j r j j½ r® jR X }}r¯ r° hj! r± jR X {{r² r³ j j½ r´ j j rµ j j½ r¶ jà X andr· r¸ j j½ r¹ j j¯ rº j j½ r» jR X }}r¼ r½ hj! r¾ jR X {{r¿ rÀ j j½ rÁ j j¯ r j j½ rà jà X andrÄ rÅ j j½ rÆ j j rÇ j j½ rÈ jR X }}rÉ rÊ hj! rË jR X {{rÌ rÍ j j½ rÎ j j¯ rÏ j j½ rÐ jà X andrÑ rÒ j j½ rÓ j j¯ rÔ j j½ rÕ jR X }}rÖ r× hj! rØ jR X {{rÙ rÚ j j½ rÛ j j rÜ j j½ rÝ jà X orrÞ rß j j½ rà j j rá j j½ râ jR X }}rã rä hj! rå jR X {{ræ rç j j½ rè j j ré j j½ rê jà X orrë rì j j½ rí j j¯ rî j j½ rï jR X }}rð rñ hj! rò jR X {{ró rô j j½ rõ j j¯ rö j j½ r÷ jà X orrø rù j j½ rú j j rû j j½ rü jR X }}rý rþ hj! rÿ jR X {{r r j j½ r j j¯ r j j½ r jà X orr r j j½ r j j¯ r j j½ r jR X }}r
r hj! r jR X {{r
r j j½ r j j¯ r j j½ r jà X orr r j j½ r j j r j j½ r jà X andr r j j½ r j j¯ r j j½ r jR X }}r r hj! r jR X {{r r j j½ r! j j r" j j½ r# jà X orr$ r% j j½ r& j j¯ r' j j½ r( jà X andr) r* j j½ r+ j j r, j j½ r- jR X }}r. r/ hj! r0 jR X {{r1 r2 j j½ r3 jñ X "foo"r4 r5 j j½ r6 hj1 r7 j j½ r8 jñ X "bar"r9 r: j j½ r; jR X }}r< r= hj! r> jR X {{r? r@ j j½ rA hxX foorB rC j j½ rD hj1 rE j j½ rF jñ X "bar"rG rH j j½ rI jR X }}rJ rK hj! rL jR X {{rM rN j j½ rO jñ X "foo"rP rQ j j½ rR hj1 rS j j½ rT hxX barrU rV j j½ rW jR X }}rX rY hj! rZ jR X {{r[ r\ j j½ r] hxX foor^ r_ j j½ r` hj1 ra j j½ rb hxX barrc rd j j½ re jR X }}rf rg hj! rh jR X {{ri rj j j½ rk j j rl j j¯ rm j j½ rn hj ro hj rp j j½ rq j X 7rr rs j j½ rt jR X }}ru rv hX°
--DATA--
return array('foo' => 'bar', 'bar' => 'foo')
--EXPECT--
2
1
4
1
1
1
1
1
1
1
foobar
barbar
foofoo
barfoo
2
--TEST--
Twig supports bitwise operations
--TEMPLATE--
rw rx jR X {{ry rz j j½ r{ j j r| j j½ r} jà X b-andr~ r j j½ r j X 5r r j j½ r jR X }}r r
hj! r jR X {{r r j j½ r j j r j j½ r jà X b-orr r j j½ r j j r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j j r j j½ r jà X b-xorr r j j½ r j j r j j½ r jR X }}r r hj! r jR X {{r¡ r¢ j j½ r£ hjr r¤ j j r¥ j j½ r¦ jà X andr§ r¨ j j½ r© j j¯ rª j j½ r« jà X b-orr¬ r j j½ r® j j¯ r¯ hjv r° j j½ r± jà X isr² r³ j j½ r´ j X samerµ r¶ j j½ r· hxX asr¸ r¹ hjr rº j j r» j j½ r¼ jà X andr½ r¾ j j½ r¿ hjr rÀ j j¯ rÁ j j½ r jà X b-orrà rÄ j j½ rÅ j j¯ rÆ hjv rÇ hjv rÈ j j½ rÉ hX ?rÊ rË j j½ rÌ j X 'ok'rÍ rÎ j j½ rÏ hj± rÐ j j½ rÑ j X 'ko'rÒ rÓ j j½ rÔ jR X }}rÕ rÖ hX}
--DATA--
return array()
--EXPECT--
1
5
4
ok
--TEST--
Twig supports comparison operators (==, !=, <, >, >=, <=)
--TEMPLATE--
r× rØ jR X {{rÙ rÚ j j½ rÛ j j rÜ j j½ rÝ hX >rÞ rß j j½ rà j j rá j j½ râ jR X }}rã rä hj rå jR X {{ræ rç j j½ rè j j ré j j½ rê hjÞ rë j j½ rì j j rí j j½ rî jR X }}rï rð hj rñ jR X {{rò ró j j½ rô j j rõ j j½ rö hX >=r÷ rø j j½ rù j j rú j j½ rû jR X }}rü rý hj rþ jR X {{rÿ r j j½ r j j r j j½ r hX >=r r j j½ r j j r j j½ r jR X }}r r
hj! r jR X {{r r
j j½ r j j r j j½ r hX <r r j j½ r j j r j j½ r jR X }}r r hj r jR X {{r r j j½ r j j r j j½ r hj r j j½ r j j r j j½ r! jR X }}r" r# hj r$ jR X {{r% r& j j½ r' j j r( j j½ r) hX <=r* r+ j j½ r, j j r- j j½ r. jR X }}r/ r0 hj r1 jR X {{r2 r3 j j½ r4 j j r5 j j½ r6 hX <=r7 r8 j j½ r9 j j r: j j½ r; jR X }}r< r= hj! r> jR X {{r? r@ j j½ rA j j rB j j½ rC hX ==rD rE j j½ rF j j rG j j½ rH jR X }}rI rJ hj rK jR X {{rL rM j j½ rN j j rO j j½ rP hX ==rQ rR j j½ rS j j rT j j½ rU jR X }}rV rW hj! rX jR X {{rY rZ j j½ r[ j j r\ j j½ r] hX !=r^ r_ j j½ r` j j ra j j½ rb jR X }}rc rd hj re jR X {{rf rg j j½ rh j j ri j j½ rj hX !=rk rl j j½ rm j j rn j j½ ro jR X }}rp rq hXv
--DATA--
return array()
--EXPECT--
///1
1//1/1
1/
/1
--TEST--
Twig supports the "divisible by" operator
--TEMPLATE--
rr rs jR X {{rt ru j j½ rv j X 8rw rx j j½ ry jà X isrz r{ j j½ r| j X divisibler} r~ j j½ r hxX byr r hjr r j j r hjv r j j½ r
hjÊ r j j½ r j X 'OK'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j jw r j j½ r jà X isr r j j½ r jà X notr r j j½ r j X divisibler r j j½ r hxX byr r hjr r j jn r hjv r j j½ r¡ hjÊ r¢ j j½ r£ j X 'OK'r¤ r¥ j j½ r¦ jR X }}r§ r¨ hj! r© jR X {{rª r« j j½ r¬ j jw r j j½ r® jà X isr¯ r° j X r± r² j X divisibler³ r´ j X rµ r¶ hxX byr· r¸ j X r¹ rº hjr r» j j r¼ hjv r½ j j½ r¾ hjÊ r¿ j j½ rÀ j X 'OK'rÁ r j j½ rà jR X }}rÄ rÅ hj! rÆ jR X {{rÇ rÈ j j½ rÉ j jw rÊ j j½ rË jà X isrÌ rÍ j j½ rÎ jà X notrÏ rÐ j X
rÑ rÒ j X divisiblerÓ rÔ j X
rÕ rÖ hxX byr× rØ j X
rÙ rÚ hjr rÛ j jn rÜ hjv rÝ j j½ rÞ hjÊ rß j j½ rà j X 'OK'rá râ j j½ rã jR X }}rä rå hXd
--DATA--
return array()
--EXPECT--
OK
OK
OK
OK
--TEST--
Twig supports the .. operator
--TEMPLATE--
ræ rç jR X {%rè ré j j½ rê jà X forrë rì j j½ rí hxjÜ rî j j½ rï jà X inrð rñ j j½ rò j X 0.ró rô j X .10rõ rö j j½ r÷ jR X %}rø rù jR X {{rú rû j j½ rü hxjÜ rý j j½ rþ jR X }}rÿ r hj½ r jR X {%r r j j½ r jà X endforr r j j½ r jR X %}r r hX
r
r jR X {%r r
j j½ r jà X forr r j j½ r hxX letterr r j j½ r jà X inr r j j½ r j X 'a'r r e(hX ..r r j X 'z'r r j j½ r jR X %}r r jR X {{r! r" j j½ r# hxX letterr$ r% j j½ r& jR X }}r' r( hj½ r) jR X {%r* r+ j j½ r, jà X endforr- r. j j½ r/ jR X %}r0 r1 hX
r2 r3 jR X {%r4 r5 j j½ r6 jà X forr7 r8 j j½ r9 hxX letterr: r; j j½ r< jà X inr= r> j j½ r? j X 'a'r@ rA hjn rB j X upperrC rD hX ..rE rF j X 'z'rG rH hjn rI j X upperrJ rK j j½ rL jR X %}rM rN jR X {{rO rP j j½ rQ hxX letterrR rS j j½ rT jR X }}rU rV hj½ rW jR X {%rX rY j j½ rZ jà X endforr[ r\ j j½ r] jR X %}r^ r_ hX
r` ra jR X {%rb rc j j½ rd jà X forre rf j j½ rg hxjÜ rh j j½ ri jà X inrj rk j j½ rl hxX foorm rn hj= ro j j¯ rp hjA rq hX ..rr rs hxX foort ru hj= rv j j rw hjA rx j j½ ry jR X %}rz r{ jR X {{r| r} j j½ r~ hxjÜ r j j½ r jR X }}r r hj½ r jR X {%r r
j j½ r jà X endforr r j j½ r jR X %}r r hX
r r jR X {%r r j j½ r jà X forr r j j½ r hxjÜ r j j½ r jà X inr r j j½ r j j¯ r j j½ r hji r j j½ r j j r j j½ r hX ..r r j j½ r¡ j j r¢ j j¯ r£ j j½ r¤ hjv r¥ j j½ r¦ j j r§ j j½ r¨ jR X %}r© rª jR X {{r« r¬ j j½ r hxjÜ r® j j½ r¯ jR X }}r° r± hj½ r² jR X {%r³ r´ j j½ rµ jà X endforr¶ r· j j½ r¸ jR X %}r¹ rº hX
--DATA--
return array('foo' => array(1, 10))
--EXPECT--
0 1 2 3 4 5 6 7 8 9 10
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
--TEST--
Twig supports the "ends with" operator
--TEMPLATE--
r» r¼ jR X {{r½ r¾ j j½ r¿ j X 'foo'rÀ rÁ j j½ r jà X ends withrà rÄ j j½ rÅ j X 'o'rÆ rÇ j j½ rÈ hjÊ rÉ j j½ rÊ j X 'OK'rË rÌ j j½ rÍ hj± rÎ j j½ rÏ j X 'KO'rÐ rÑ j j½ rÒ jR X }}rÓ rÔ hj! rÕ jR X {{rÖ r× j j½ rØ jà X notrÙ rÚ j j½ rÛ hjr rÜ j X 'foo'rÝ rÞ j j½ rß jà X ends withrà rá j j½ râ j X 'f'rã rä hjv rå j j½ ræ hjÊ rç j j½ rè j X 'OK'ré rê j j½ rë hj± rì j j½ rí j X 'KO'rî rï j j½ rð jR X }}rñ rò hj! ró jR X {{rô rõ j j½ rö jà X notr÷ rø j j½ rù hjr rú j X 'foo'rû rü j j½ rý jà X ends withrþ rÿ j j½ r
j X 'foowaytoolong'r
r
hjv r
j j½ r
hjÊ r
j j½ r
j X 'OK'r
r
j j½ r
hj± r
j j½ r
j X 'KO'r
r
j j½ r
jR X }}r
r
hj! r
jR X {{r
r
j j½ r
j X 'foo'r
r
j j½ r
jà X ends withr
r
j j½ r
j X ''r
r
j j½ r
hjÊ r
j j½ r
j X 'OK'r
r!
j j½ r"
hj± r#
j j½ r$
j X 'KO'r%
r&
j j½ r'
jR X }}r(
r)
hj! r*
jR X {{r+
r,
j j½ r-
j X '1'r.
r/
j j½ r0
jà X ends withr1
r2
j j½ r3
jû X truer4
r5
j j½ r6
hjÊ r7
j j½ r8
j X 'OK'r9
r:
j j½ r;
hj± r<
j j½ r=
j X 'KO'r>
r?
j j½ r@
jR X }}rA
rB
hj! rC
jR X {{rD
rE
j j½ rF
j j rG
j j½ rH
jà X ends withrI
rJ
j j½ rK
jû X truerL
rM
j j½ rN
hjÊ rO
j j½ rP
j X 'OK'rQ
rR
j j½ rS
hj± rT
j j½ rU
j X 'KO'rV
rW
j j½ rX
jR X }}rY
rZ
hj! r[
jR X {{r\
r]
j j½ r^
j j¯ r_
j j½ r`
jà X ends withra
rb
j j½ rc
jû X falserd
re
j j½ rf
hjÊ rg
j j½ rh
j X 'OK'ri
rj
j j½ rk
hj± rl
j j½ rm
j X 'KO'rn
ro
j j½ rp
jR X }}rq
rr
hj! rs
jR X {{rt
ru
j j½ rv
j X ''rw
rx
j j½ ry
jà X ends withrz
r{
j j½ r|
jû X falser}
r~
j j½ r
hjÊ r
j j½ r
j X 'OK'r
r
j j½ r
hj± r
j j½ r
j X 'KO'r
r
j j½ r
jR X }}r
r
hj! r
jR X {{r
r
j j½ r
jû X falser
r
j j½ r
jà X ends withr
r
j j½ r
jû X falser
r
j j½ r
hjÊ r
j j½ r
j X 'OK'r
r
j j½ r
hj± r
j j½ r
j X 'KO'r
r¡
j j½ r¢
jR X }}r£
r¤
hj! r¥
jR X {{r¦
r§
j j½ r¨
jû X falser©
rª
j j½ r«
jà X ends withr¬
r
j j½ r®
j X ''r¯
r°
j j½ r±
hjÊ r²
j j½ r³
j X 'OK'r´
rµ
j j½ r¶
hj± r·
j j½ r¸
j X 'KO'r¹
rº
j j½ r»
jR X }}r¼
r½
hX~
--DATA--
return array()
--EXPECT--
OK
OK
OK
OK
KO
KO
KO
KO
KO
KO
--TEST--
Twig supports grouping of expressions
--TEMPLATE--
r¾
r¿
jR X {{rÀ
rÁ
j j½ rÂ
hjr rÃ
j j rÄ
j j½ rÅ
hji rÆ
j j½ rÇ
j j rÈ
hjv rÉ
j j½ rÊ
hj rË
j j½ rÌ
j j rÍ
j j½ rÎ
jR X }}rÏ
rÐ
hXU
--DATA--
return array()
--EXPECT--
2
--TEST--
Twig supports literals
--TEMPLATE--
1 rÑ
rÒ
jR X {{rÓ
rÔ
j j½ rÕ
jû X truerÖ
r×
j j½ rØ
jR X }}rÙ
rÚ
hX
2 rÛ
rÜ
jR X {{rÝ
rÞ
j j½ rß
jû X TRUErà
rá
j j½ râ
jR X }}rã
rä
hX
3 rå
ræ
jR X {{rç
rè
j j½ ré
jû X falserê
rë
j j½ rì
jR X }}rí
rî
hX
4 rï
rð
jR X {{rñ
rò
j j½ ró
jû X FALSErô
rõ
j j½ rö
jR X }}r÷
rø
hX
5 rù
rú
jR X {{rû
rü
j j½ rý
jû X nonerþ
rÿ
j j½ r jR X }}r r hX
6 r r jR X {{r r j j½ r jû X NONEr r j j½ r
jR X }}r r hX
7 r
r jR X {{r r j j½ r jû X nullr r j j½ r jR X }}r r hX
8 r r jR X {{r r j j½ r jû X NULLr r j j½ r jR X }}r r hXz
--DATA--
return array()
--EXPECT--
1 1
2 1
3
4
5
6
7
8
--TEST--
Twig supports __call() for attributes
--TEMPLATE--
r! r" jR X {{r# r$ j j½ r% hxX foor& r' hxX .foor( r) j j½ r* jR X }}r+ r, hj! r- jR X {{r. r/ j j½ r0 hxX foor1 r2 hxX .barr3 r4 j j½ r5 jR X }}r6 r7 hXe
--EXPECT--
foo_from_call
bar_from_getbar
--TEST--
Twig supports the "matches" operator
--TEMPLATE--
r8 r9 jR X {{r: r; j j½ r< j X 'foo'r= r> j j½ r? hxX matchesr@ rA j j½ rB j X '/o/'rC rD j j½ rE hjÊ rF j j½ rG j X 'OK'rH rI j j½ rJ hj± rK j j½ rL j X 'KO'rM rN j j½ rO jR X }}rP rQ hj! rR jR X {{rS rT j j½ rU j X 'foo'rV rW j j½ rX hxX matchesrY rZ j j½ r[ j X '/^fo/'r\ r] j j½ r^ hjÊ r_ j j½ r` j X 'OK'ra rb j j½ rc hj± rd j j½ re j X 'KO'rf rg j j½ rh jR X }}ri rj hj! rk jR X {{rl rm j j½ rn j X 'foo'ro rp j j½ rq hxX matchesrr rs j j½ rt j X '/O/i'ru rv j j½ rw hjÊ rx j j½ ry j X 'OK'rz r{ j j½ r| hj± r} j j½ r~ j X 'KO'r r j j½ r jR X }}r r hX^
--DATA--
return array()
--EXPECT--
OK
OK
OK
--TEST--
Twig supports method calls
--TEMPLATE--
r r
jR X {{r r j j½ r hxX itemsr r hxX .foor r hxX .foor r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX itemsr r hxX .foor r hxX .getFoor r hjr r hjv r j j½ r jR X }}r r hj! r¡ jR X {{r¢ r£ j j½ r¤ hxX itemsr¥ r¦ hxX .foor§ r¨ hxX .barr© rª j j½ r« jR X }}r¬ r hj! r® jR X {{r¯ r° j j½ r± hxX itemsr² r³ hxX .foor´ rµ hj= r¶ j X 'bar'r· r¸ hjA r¹ j j½ rº jR X }}r» r¼ hj! r½ jR X {{r¾ r¿ j j½ rÀ hxX itemsrÁ r hxX .foorà rÄ hxX .barrÅ rÆ hjr rÇ j X 'a'rÈ rÉ hj rÊ j j½ rË j X 4rÌ rÍ j jn rÎ hjv rÏ j j½ rÐ jR X }}rÑ rÒ hj! rÓ jR X {{rÔ rÕ j j½ rÖ hxX itemsr× rØ hxX .foorÙ rÚ hxX .barrÛ rÜ hjr rÝ hxX foorÞ rß hjv rà j j½ rá jR X }}râ rã hj! rä jR X {{rå ræ j j½ rç hxX itemsrè ré hxX .foorê rë hxX .selfrì rí hxX .foorî rï hjr rð hjv rñ j j½ rò jR X }}ró rô hj! rõ jR X {{rö r÷ j j½ rø hxX itemsrù rú hxX .foorû rü hxX .isrý rþ j j½ rÿ jR X }}r r hj! r jR X {{r r j j½ r hxX itemsr r hxX .foor r hxX .inr
r j j½ r jR X }}r
r hj! r jR X {{r r j j½ r hxX itemsr r hxX .foor r hxX .notr r j j½ r jR X }}r r hX
--DATA--
return array('foo' => 'bar', 'items' => array('foo' => new TwigTestFoo(), 'bar' => 'foo'))
--CONFIG--
return array('strict_variables' => false)
--EXPECT--
foo
foo
bar
bar_a-43
bar_bar
foo
is
in
not
--TEST--
Twig allows to use named operators as variable names
--TEMPLATE--
r r jR X {%r r j j½ r jà X forr! r" j j½ r# hxX matchr$ r% j j½ r& jà X inr' r( j j½ r) hxX matchesr* r+ j j½ r, jR X %}r- r. hX
r/ r0 jR X {{r1 r2 hjv r3 j j½ r4 hxX matchr5 r6 j j½ r7 jR X }}r8 r9 hj! r: jR X {%r; r< j j½ r= jà X endforr> r? j j½ r@ jR X %}rA rB hj! rC jR X {{rD rE j j½ rF jà X inrG rH j j½ rI jR X }}rJ rK hj! rL jR X {{rM rN j j½ rO hxX isrP rQ j j½ rR jR X }}rS rT hX
--DATA--
return array('matches' => array(1, 2, 3), 'in' => 'in', 'is' => 'is')
--EXPECT--
1
2
3
in
is
--TEST--
Twig parses postfix expressions
--TEMPLATE--
rU rV jR X {%rW rX j j½ rY jà X importrZ r[ j j½ r\ hxX _selfr] r^ j j½ r_ hxX asr` ra j j½ rb hxX macrosrc rd j j½ re jR X %}rf rg hX
rh ri jR X {%rj rk j j½ rl jà X macrorm rn j j½ ro hxX foorp rq hjr rr hjv rs j j½ rt jR X %}ru rv hX foorw rx jR X {%ry rz j j½ r{ jà X endmacror| r} j j½ r~ jR X %}r r hX
r r jR X {{r r j j½ r
j X 'a'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j X 'a'r r hjn r j X upperr r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hjr r j X 'a'r r hjv r hjn r j X upperr r¡ j j½ r¢ jR X }}r£ r¤ hj! r¥ jR X {{r¦ r§ j j½ r¨ hjv r© j j rª hjn r« j X upperr¬ r j j½ r® jR X }}r¯ r° hj! r± jR X {{r² r³ j j½ r´ hxX macrosrµ r¶ hxX .foor· r¸ hjr r¹ hjv rº j j½ r» jR X }}r¼ r½ hj! r¾ jR X {{r¿ rÀ j j½ rÁ hjr r hxX macrosrà rÄ hjv rÅ hxX .foorÆ rÇ hjr rÈ hjv rÉ j j½ rÊ jR X }}rË rÌ hXq
--DATA--
return array();
--EXPECT--
a
A
A
-1
foo
foo
--TEST--
Twig supports the "same as" operator
--TEMPLATE--
rÍ rÎ jR X {{rÏ rÐ j j½ rÑ j j rÒ j j½ rÓ jà X isrÔ rÕ j j½ rÖ j X samer× rØ j j½ rÙ hxX asrÚ rÛ hjr rÜ j j rÝ hjv rÞ j j½ rß hjÊ rà j j½ rá j X 'OK'râ rã j j½ rä jR X }}rå ræ hj! rç jR X {{rè ré j j½ rê j j rë j j½ rì jà X isrí rî j j½ rï jà X notrð rñ j j½ rò j X sameró rô j j½ rõ hxX asrö r÷ hjr rø jû X truerù rú hjv rû j j½ rü hjÊ rý j j½ rþ j X 'OK'rÿ r
j j½ r
jR X }}r
r
hj! r
jR X {{r
r
j j½ r
j j r
j j½ r
jà X isr
r
j j½ r
j X samer
r
j j½ r
hxX asr
r
hjr r
j j r
hjv r
j j½ r
hjÊ r
j j½ r
j X 'OK'r
r
j j½ r
jR X }}r
r
hj! r
jR X {{r
r
j j½ r
j j r!
j j½ r"
jà X isr#
r$
j j½ r%
jà X notr&
r'
j j½ r(
j X samer)
r*
j j½ r+
hxX asr,
r-
hjr r.
jû X truer/
r0
hjv r1
j j½ r2
hjÊ r3
j j½ r4
j X 'OK'r5
r6
j j½ r7
jR X }}r8
r9
hj! r:
jR X {{r;
r<
j j½ r=
j j r>
j j½ r?
jà X isr@
rA
j X rB
rC
j X samerD
rE
j X rF
rG
hxX asrH
rI
j X rJ
rK
hjr rL
j j rM
hjv rN
j j½ rO
hjÊ rP
j j½ rQ
j X 'OK'rR
rS
j j½ rT
jR X }}rU
rV
hj! rW
jR X {{rX
rY
j j½ rZ
j j r[
j j½ r\
jà X isr]
r^
j j½ r_
jà X notr`
ra
j X
rb
rc
j X samerd
re
j X
rf
rg
hxX asrh
ri
j X
rj
rk
hjr rl
jû X truerm
rn
hjv ro
j j½ rp
hjÊ rq
j j½ rr
j X 'OK'rs
rt
j j½ ru
jR X }}rv
rw
hXu
--DATA--
return array()
--EXPECT--
OK
OK
OK
OK
OK
OK
--TEST--
Twig supports the "starts with" operator
--TEMPLATE--
rx
ry
jR X {{rz
r{
j j½ r|
j X 'foo'r}
r~
j j½ r
jà X starts withr
r
j j½ r
j X 'f'r
r
j j½ r
hjÊ r
j j½ r
j X 'OK'r
r
j j½ r
hj± r
j j½ r
j X 'KO'r
r
j j½ r
jR X }}r
r
hj! r
jR X {{r
r
j j½ r
jà X notr
r
j j½ r
hjr r
j X 'foo'r
r
j j½ r
jà X starts withr
r
j j½ r
j X 'oo'r
r¡
hjv r¢
j j½ r£
hjÊ r¤
j j½ r¥
j X 'OK'r¦
r§
j j½ r¨
hj± r©
j j½ rª
j X 'KO'r«
r¬
j j½ r
jR X }}r®
r¯
hj! r°
jR X {{r±
r²
j j½ r³
jà X notr´
rµ
j j½ r¶
hjr r·
j X 'foo'r¸
r¹
j j½ rº
jà X starts withr»
r¼
j j½ r½
j X 'foowaytoolong'r¾
r¿
hjv rÀ
j j½ rÁ
hjÊ rÂ
j j½ rÃ
j X 'OK'rÄ
rÅ
j j½ rÆ
hj± rÇ
j j½ rÈ
j X 'KO'rÉ
rÊ
j j½ rË
jR X }}rÌ
rÍ
hj! rÎ
jR X {{rÏ
rÐ
j j½ rÑ
j X 'foo'rÒ
rÓ
j j½ rÔ
jà X starts withrÕ
rÖ
j j½ r×
j X 'f'rØ
rÙ
j j½ rÚ
hjÊ rÛ
j j½ rÜ
j X 'OK'rÝ
rÞ
j j½ rß
hj± rà
j j½ rá
j X 'KO'râ
rã
j j½ rä
jR X }}rå
ræ
hj! rç
jR X {{rè
ré
j j½ rê
j X 'foo'rë
rì
j j½ rí
jà X starts
withrî
rï
j j½ rð
j X 'f'rñ
rò
j j½ ró
hjÊ rô
j j½ rõ
j X 'OK'rö
r÷
j j½ rø
hj± rù
j j½ rú
j X 'KO'rû
rü
j j½ rý
jR X }}rþ
rÿ
hj! r jR X {{r r j j½ r j X 'foo'r r j j½ r jà X starts withr r j j½ r j X ''r
r j j½ r hjÊ r
j j½ r j X 'OK'r r j j½ r hj± r j j½ r j X 'KO'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j X '1'r r j j½ r jà X starts withr r! j j½ r" jû X truer# r$ j j½ r% hjÊ r& j j½ r' j X 'OK'r( r) j j½ r* hj± r+ j j½ r, j X 'KO'r- r. j j½ r/ jR X }}r0 r1 hj! r2 jR X {{r3 r4 j j½ r5 j X ''r6 r7 j j½ r8 jà X starts withr9 r: j j½ r; jû X falser< r= j j½ r> hjÊ r? j j½ r@ j X 'OK'rA rB j j½ rC hj± rD j j½ rE j X 'KO'rF rG j j½ rH jR X }}rI rJ hj! rK jR X {{rL rM j j½ rN j X 'a'rO rP j j½ rQ jà X starts withrR rS j j½ rT jû X falserU rV j j½ rW hjÊ rX j j½ rY j X 'OK'rZ r[ j j½ r\ hj± r] j j½ r^ j X 'KO'r_ r` j j½ ra jR X }}rb rc hj! rd jR X {{re rf j j½ rg jû X falserh ri j j½ rj jà X starts withrk rl j j½ rm j X ''rn ro j j½ rp hjÊ rq j j½ rr j X 'OK'rs rt j j½ ru hj± rv j j½ rw j X 'KO'rx ry j j½ rz jR X }}r{ r| hX{
--DATA--
return array()
--EXPECT--
OK
OK
OK
OK
OK
OK
KO
KO
KO
KO
--TEST--
Twig supports string interpolation
--TEMPLATE--
r} r~ jL X# {# "foo #{"foo #{bar} baz"} baz" #}r r hj! r jL X {# "foo #{bar}#{bar} baz" #}r r hX
--DATA--
return array('bar' => 'BAR');
--EXPECT--
foo foo BAR baz baz
foo BARBAR baz
--TEST--
Twig supports the ternary operator
--TEMPLATE--
r r
jR X {{r r j j½ r j j r j j½ r hjÊ r j j½ r j X 'YES'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j j¯ r j j½ r hjÊ r j j½ r j X 'YES'r r j j½ r jR X }}r r hXb
--DATA--
return array()
--EXPECT--
YES
--TEST--
Twig supports the ternary operator
--TEMPLATE--
r r jR X {{r¡ r¢ j j½ r£ j X 'YES'r¤ r¥ j j½ r¦ hjÊ r§ hj± r¨ j j½ r© j X 'NO'rª r« j j½ r¬ jR X }}r r® hj! r¯ jR X {{r° r± j j½ r² j j¯ r³ j j½ r´ hjÊ rµ hj± r¶ j j½ r· j X 'NO'r¸ r¹ e(j j½ rº jR X }}r» r¼ hXd
--DATA--
return array()
--EXPECT--
YES
NO
--TEST--
Twig supports the ternary operator
--TEMPLATE--
r½ r¾ jR X {{r¿ rÀ j j½ rÁ j j r j j½ rà hjÊ rÄ j j½ rÅ j X 'YES'rÆ rÇ j j½ rÈ hj± rÉ j j½ rÊ j X 'NO'rË rÌ j j½ rÍ jR X }}rÎ rÏ hj! rÐ jR X {{rÑ rÒ j j½ rÓ j j¯ rÔ j j½ rÕ hjÊ rÖ j j½ r× j X 'YES'rØ rÙ j j½ rÚ hj± rÛ j j½ rÜ j X 'NO'rÝ rÞ j j½ rß jR X }}rà rá hj! râ jR X {{rã rä j j½ rå j j¯ ræ j j½ rç hjÊ rè j j½ ré j X 'YES'rê rë j j½ rì hj± rí j j½ rî hjr rï j j rð j j½ rñ hjÊ rò j j½ ró j X 'YES1'rô rõ j j½ rö hj± r÷ j j½ rø j X 'NO1'rù rú hjv rû j j½ rü jR X }}rý rþ hj! rÿ jR X {{r r j j½ r j j¯ r j j½ r hjÊ r j j½ r j X 'YES'r r j j½ r hj± r
j j½ r hjr r j j¯ r
j j½ r hjÊ r j j½ r j X 'YES1'r r j j½ r hj± r j j½ r j X 'NO1'r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j j r j j½ r! hX ==r" r# j j½ r$ j j r% j j½ r& hjÊ r' j j½ r( j X 'foo<br />'r) r* j X :''r+ r, j j½ r- jR X }}r. r/ hj! r0 jR X {{r1 r2 j j½ r3 hxX foor4 r5 j j½ r6 hj1 r7 j j½ r8 hjr r9 hxX barr: r; j j½ r< hjÊ r= j j½ r> hjr r? j X '-'r@ rA j j½ rB hj1 rC j j½ rD hxX barrE rF hjv rG j j½ rH hj± rI j j½ rJ j X ''rK rL hjv rM j j½ rN jR X }}rO rP hXÀ
--DATA--
return array('foo' => 'foo', 'bar' => 'bar')
--EXPECT--
YES
NO
YES1
NO1
foo<br />
foo-bar
--TEST--
Twig does not allow to use two-word named operators as variable names
--TEMPLATE--
rQ rR jR X {{rS rT j j½ rU jà X starts withrV rW j j½ rX jR X }}rY rZ hX½
--DATA--
return array()
--EXCEPTION--
Twig_Error_Syntax: Unexpected token "operator" of value "starts with" in "index.twig" at line 2
--TEST--
Twig unary operators precedence
--TEMPLATE--
r[ r\ jR X {{r] r^ j j½ r_ hjv r` j j ra j j½ rb hjv rc j j½ rd j j re j j½ rf jR X }}rg rh hj! ri jR X {{rj rk j j½ rl hjv rm j j rn j j½ ro hjv rp j j½ rq hjv rr j j rs j j½ rt jR X }}ru rv hj! rw jR X {{rx ry j j½ rz hjv r{ j j r| j j½ r} hj r~ j j½ r hjv r j j r j j½ r jR X }}r r hj! r
jR X {{r r j j½ r j jÌ r j j½ r hj r j j½ r hjv r j j r j j½ r hj r j j½ r j j r j j½ r jR X }}r r hXo
--DATA--
return array()
--EXPECT--
-2
0
1
-20
--TEST--
Twig supports unary operators (not, -, +)
--TEMPLATE--
r r jR X {{r r j j½ r jà X notr r j j½ r j j r j j½ r jR X }}r r¡ hj r¢ jR X {{r£ r¤ j j½ r¥ jà X notr¦ r§ j j½ r¨ j j¯ r© j j½ rª jR X }}r« r¬ hj! r jR X {{r® r¯ j j½ r° hji r± j j r² j j½ r³ hji r´ j j½ rµ j j r¶ j j½ r· jR X }}r¸ r¹ hj rº jR X {{r» r¼ j j½ r½ hjv r¾ j j r¿ j j½ rÀ hjv rÁ j j½ r j j rà j j½ rÄ jR X }}rÅ rÆ hj! rÇ jR X {{rÈ rÉ j j½ rÊ jà X notrË rÌ j j½ rÍ hjr rÎ jû X falserÏ rÐ j j½ rÑ jà X orrÒ rÓ j j½ rÔ jû X truerÕ rÖ hjv r× j j½ rØ jR X }}rÙ rÚ hXP
--DATA--
return array()
--EXPECT--
/1
2/-2
--TEST--
"abs" filter
--TEMPLATE--
rÛ rÜ jR X {{rÝ rÞ j j½ rß hjr rà hjv rá j X 5.5râ rã hjv rä hjn rå j X absræ rç j j½ rè jR X }}ré rê hj! rë jR X {{rì rí j j½ rî hjr rï hjv rð j j rñ hjv rò hjn ró j X absrô rõ j j½ rö jR X }}r÷ rø hj! rù jR X {{rú rû j j½ rü hjr rý hjv rþ j j¯ rÿ hjv r hjn r j X absr r j j½ r jR X }}r r hj! r jR X {{r r j j½ r
j j¯ r hjn r j X absr
r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j j r hjn r j X absr r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j X 5.5r! r" hjn r# j X absr$ r% j j½ r& jR X }}r' r( hj! r) jR X {{r* r+ j j½ r, hxX number1r- r. hjn r/ j X absr0 r1 j j½ r2 jR X }}r3 r4 hj! r5 jR X {{r6 r7 j j½ r8 hxX number2r9 r: hjn r; j X absr< r= j j½ r> jR X }}r? r@ hj! rA jR X {{rB rC j j½ rD hxX number3rE rF hjn rG j X absrH rI j j½ rJ jR X }}rK rL hj! rM jR X {{rN rO j j½ rP hxX number4rQ rR hjn rS j X absrT rU j j½ rV jR X }}rW rX hj! rY jR X {{rZ r[ j j½ r\ hxX number5r] r^ hjn r_ j X absr` ra j j½ rb jR X }}rc rd hj! re jR X {{rf rg j j½ rh hxX number6ri rj hjn rk j X absrl rm j j½ rn jR X }}ro rp hXÎ
--DATA--
return array('number1' => -5.5, 'number2' => -5, 'number3' => -0, 'number4' => 0, 'number5' => 5, 'number6' => 5.5)
--EXPECT--
5.5
5
0
0
5
5.5
5.5
5
0
0
5
5.5
--TEST--
"batch" filter
--TEMPLATE--
rq rr jR X {%rs rt j j½ ru jà X forrv rw j j½ rx hxX rowry rz j j½ r{ jà X inr| r} j j½ r~ hxX itemsr r hjn r j X batchr r hjr r j X 3.1r
r hjv r j j½ r jR X %}r r hX
<div class=row>
r r jR X {%r r j j½ r jà X forr r j j½ r hxX columnr r j j½ r jà X inr r j j½ r hxX rowr r j j½ r jR X %}r r hX
<div class=item>r r jR X {{r r¡ j j½ r¢ hxX columnr£ r¤ j j½ r¥ jR X }}r¦ r§ hX </div>
r¨ r© jR X {%rª r« j j½ r¬ jà X endforr r® j j½ r¯ jR X %}r° r± hX
</div>
r² r³ jR X {%r´ rµ j j½ r¶ jà X endforr· r¸ j j½ r¹ jR X %}rº r» hX
--DATA--
return array('items' => array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'))
--EXPECT--
<div class=row>
<div class=item>a</div>
<div class=item>b</div>
<div class=item>c</div>
<div class=item>d</div>
</div>
<div class=row>
<div class=item>e</div>
<div class=item>f</div>
<div class=item>g</div>
<div class=item>h</div>
</div>
<div class=row>
<div class=item>i</div>
<div class=item>j</div>
</div>
--TEST--
"batch" filter
--TEMPLATE--
r¼ r½ jR X {%r¾ r¿ j j½ rÀ jà X forrÁ r j j½ rà hxX rowrÄ rÅ j j½ rÆ jà X inrÇ rÈ j j½ rÉ hxX itemsrÊ rË hjn rÌ j X batchrÍ rÎ hjr rÏ j jn rÐ hjv rÑ j j½ rÒ jR X %}rÓ rÔ hX
<div class=row>
rÕ rÖ jR X {%r× rØ j j½ rÙ jà X forrÚ rÛ j j½ rÜ hxX columnrÝ rÞ j j½ rß jà X inrà rá j j½ râ hxX rowrã rä j j½ rå jR X %}ræ rç hX
<div class=item>rè ré jR X {{rê rë j j½ rì hxX columnrí rî j j½ rï jR X }}rð rñ hX </div>
rò ró jR X {%rô rõ j j½ rö jà X endforr÷ rø j j½ rù jR X %}rú rû hX
</div>
rü rý jR X {%rþ rÿ j j½ r jà X endforr r j j½ r jR X %}r r hX1
--DATA--
return array('items' => array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'))
--EXPECT--
<div class=row>
<div class=item>a</div>
<div class=item>b</div>
<div class=item>c</div>
</div>
<div class=row>
<div class=item>d</div>
<div class=item>e</div>
<div class=item>f</div>
</div>
<div class=row>
<div class=item>g</div>
<div class=item>h</div>
<div class=item>i</div>
</div>
<div class=row>
<div class=item>j</div>
</div>
--TEST--
"batch" filter
--TEMPLATE--
<table>
r r jR X {%r r j j½ r
jà X forr r j j½ r
hxX rowr r j j½ r jà X inr r j j½ r hxX itemsr r hjn r j X batchr r hjr r j jn r hj r j j½ r j X ''r r hjv r j j½ r jR X %}r! r" hX
<tr>
r# r$ jR X {%r% r& j j½ r' jà X forr( r) j j½ r* hxX columnr+ r, j j½ r- jà X inr. r/ j j½ r0 hxX rowr1 r2 j j½ r3 jR X %}r4 r5 hX
<td>r6 r7 jR X {{r8 r9 j j½ r: hxX columnr; r< j j½ r= jR X }}r> r? hX </td>
r@ rA jR X {%rB rC j j½ rD jà X endforrE rF j j½ rG jR X %}rH rI hX
</tr>
rJ rK jR X {%rL rM j j½ rN jà X endforrO rP j j½ rQ jR X %}rR rS hX³
</table>
--DATA--
return array('items' => array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'))
--EXPECT--
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>d</td>
<td>e</td>
<td>f</td>
</tr>
<tr>
<td>g</td>
<td>h</td>
<td>i</td>
</tr>
<tr>
<td>j</td>
<td></td>
<td></td>
</tr>
</table>
--TEST--
"batch" filter
--TEMPLATE--
rT rU jR X {%rV rW j j½ rX jà X forrY rZ j j½ r[ hxX rowr\ r] j j½ r^ jà X inr_ r` j j½ ra hxX itemsrb rc hjn rd j X batchre rf hjr rg j jn rh hj ri j j½ rj j X 'fill'rk rl hjv rm j j½ rn jR X %}ro rp hX
<div class=row>
rq rr jR X {%rs rt j j½ ru jà X forrv rw j j½ rx hxX columnry rz j j½ r{ jà X inr| r} j j½ r~ hxX rowr r j j½ r jR X %}r r hX
<div class=item>r r
jR X {{r r j j½ r hxX columnr r j j½ r jR X }}r r hX </div>
r r jR X {%r r j j½ r jà X endforr r j j½ r jR X %}r r hX
</div>
r r jR X {%r r j j½ r jà X endforr r j j½ r jR X %}r r¡ hXw
--DATA--
return array('items' => array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'))
--EXPECT--
<div class=row>
<div class=item>a</div>
<div class=item>b</div>
<div class=item>c</div>
</div>
<div class=row>
<div class=item>d</div>
<div class=item>e</div>
<div class=item>f</div>
</div>
<div class=row>
<div class=item>g</div>
<div class=item>h</div>
<div class=item>i</div>
</div>
<div class=row>
<div class=item>j</div>
<div class=item>k</div>
<div class=item>l</div>
</div>
--TEST--
"batch" filter
--TEMPLATE--
<table>
r¢ r£ jR X {%r¤ r¥ j j½ r¦ jà X forr§ r¨ j j½ r© hxX rowrª r« j j½ r¬ jà X inr r® j j½ r¯ hxX itemsr° r± hjn r² j X batchr³ r´ hjr rµ j jn r¶ hj r· j j½ r¸ j X 'fill'r¹ rº hjv r» j j½ r¼ jR X %}r½ r¾ hX
<tr>
r¿ rÀ jR X {%rÁ r j j½ rà jà X forrÄ rÅ j j½ rÆ hxX columnrÇ rÈ j j½ rÉ jà X inrÊ rË j j½ rÌ hxX rowrÍ rÎ j j½ rÏ jR X %}rÐ rÑ hX
<td>rÒ rÓ jR X {{rÔ rÕ j j½ rÖ hxX columnr× rØ j j½ rÙ jR X }}rÚ rÛ hX </td>
rÜ rÝ jR X {%rÞ rß j j½ rà jà X endforrá râ j j½ rã jR X %}rä rå hX
</tr>
ræ rç jR X {%rè ré j j½ rê jà X endforrë rì j j½ rí jR X %}rî rï hX
</table>
--DATA--
return array('items' => array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'))
--EXPECT--
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>d</td>
<td>e</td>
<td>f</td>
</tr>
<tr>
<td>g</td>
<td>h</td>
<td>i</td>
</tr>
<tr>
<td>j</td>
<td>fill</td>
<td>fill</td>
</tr>
</table>
--TEST--
"convert_encoding" filter
--CONDITION--
function_exists('iconv') || function_exists('mb_convert_encoding')
--TEMPLATE--
rð rñ jR X {{rò ró j j½ rô jñ X "愛していますか?"rõ rö hjn r÷ j X convert_encodingrø rù hjr rú j X
'ISO-2022-JP'rû rü hj rý j j½ rþ j X 'UTF-8'rÿ r hjv r hjn r j X convert_encodingr r hjr r j X 'UTF-8'r r hj r j j½ r j X
'ISO-2022-JP'r
r hjv r j j½ r
jR X }}r r hX½
--DATA--
return array()
--EXPECT--
愛していますか?
--TEST--
"date" filter (interval support as of PHP 5.3)
--CONDITION--
version_compare(phpversion(), '5.3.0', '>=')
--TEMPLATE--
r r jR X {{r r j j½ r hxX date2r r hjn r j X dater r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX date2r! r" hjn r# j X dater$ r% hjr r& j X '%d days'r' r( hjv r) j j½ r* jR X }}r+ r, hXò
--DATA--
date_default_timezone_set('UTC');
$twig->getExtension('core')->setDateFormat('Y-m-d', '%d days %h hours');
return array(
'date2' => new DateInterval('P2D'),
)
--EXPECT--
2 days 0 hours
2 days
--TEST--
"date" filter
--TEMPLATE--
r- r. jR X {{r/ r0 j j½ r1 hxX date1r2 r3 hjn r4 j X dater5 r6 j j½ r7 jR X }}r8 r9 hj! r: jR X {{r; r< j j½ r= hxX date1r> r? hjn r@ j X daterA rB hjr rC j X 'd/m/Y'rD rE hjv rF j j½ rG jR X }}rH rI hX4
--DATA--
date_default_timezone_set('UTC');
$twig->getExtension('core')->setDateFormat('Y-m-d', '%d days %h hours');
return array(
'date1' => mktime(13, 45, 0, 10, 4, 2010),
)
--EXPECT--
2010-10-04
04/10/2010
--TEST--
"date" filter
--CONDITION--
version_compare(phpversion(), '5.5.0', '>=')
--TEMPLATE--
rJ rK jR X {{rL rM j j½ rN hxX date1rO rP hjn rQ j X daterR rS j j½ rT jR X }}rU rV hj! rW jR X {{rX rY j j½ rZ hxX date1r[ r\ hjn r] j X dater^ r_ hjr r` j X 'd/m/Y'ra rb hjv rc j j½ rd jR X }}re rf hj! rg jR X {{rh ri j j½ rj hxX date1rk rl hjn rm j X datern ro hjr rp j X
'd/m/Y H:i:s'rq rr hj rs j j½ rt j X 'Asia/Hong_Kong'ru rv hjv rw j j½ rx jR X }}ry rz hj! r{ jR X {{r| r} j j½ r~ hxX date1r r hjn r j X dater r hjr r j X
'd/m/Y H:i:s'r
r hj r j j½ r hxX timezone1r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX date1r r hjn r j X dater r hjr r j X
'd/m/Y H:i:s'r r hjv r j j½ r jR X }}r r hX
r r jR X {{r¡ r¢ j j½ r£ hxX date2r¤ r¥ hjn r¦ j X dater§ r¨ hjr r© j X 'd/m/Y H:i:s P'rª r« hj r¬ j j½ r j X 'Europe/Paris'r® r¯ hjv r° j j½ r± jR X }}r² r³ hj! r´ jR X {{rµ r¶ j j½ r· hxX date2r¸ r¹ hjn rº j X dater» r¼ hjr r½ j X 'd/m/Y H:i:s P'r¾ r¿ hj rÀ j j½ rÁ j X 'Asia/Hong_Kong'r rà hjv rÄ j j½ rÅ jR X }}rÆ rÇ hj! rÈ jR X {{rÉ rÊ j j½ rË hxX date2rÌ rÍ hjn rÎ j X daterÏ rÐ hjr rÑ j X 'd/m/Y H:i:s P'rÒ rÓ hj rÔ j j½ rÕ jû X falserÖ r× hjv rØ j j½ rÙ jR X }}rÚ rÛ hj! rÜ jR X {{rÝ rÞ j j½ rß hxX date2rà rá hjn râ j X daterã rä hjr rå j X 'e'ræ rç hj rè j j½ ré j X 'Europe/Paris'rê rë hjv rì j j½ rí jR X }}rî rï hj! rð jR X {{rñ rò j j½ ró hxX date2rô rõ hjn rö j X dater÷ rø hjr rù j X 'e'rú rû hj rü j j½ rý jû X falserþ rÿ hjv r j j½ r jR X }}r r hXp
--DATA--
date_default_timezone_set('Europe/Paris');
return array(
'date1' => new DateTimeImmutable('2010-10-04 13:45'),
'date2' => new DateTimeImmutable('2010-10-04 13:45', new DateTimeZone('America/New_York')),
'timezone1' => new DateTimeZone('America/New_York'),
)
--EXPECT--
October 4, 2010 13:45
04/10/2010
04/10/2010 19:45:00
04/10/2010 07:45:00
04/10/2010 13:45:00
04/10/2010 19:45:00 +02:00
05/10/2010 01:45:00 +08:00
04/10/2010 13:45:00 -04:00
Europe/Paris
America/New_York
--TEST--
"date" filter (interval support as of PHP 5.3)
--CONDITION--
version_compare(phpversion(), '5.3.0', '>=')
--TEMPLATE--
r r jR X {{r r j j½ r hxX date1r r
hjn r j X dater r
j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX date1r r hjn r j X dater r hjr r j X '%d days %h hours'r r hjv r j j½ r jR X }}r r hj! r! jR X {{r" r# j j½ r$ hxX date1r% r& hjn r' j X dater( r) hjr r* j X '%d days %h hours'r+ r, hj r- j j½ r. hxX timezone1r/ r0 hjv r1 j j½ r2 jR X }}r3 r4 hX5
--DATA--
date_default_timezone_set('UTC');
return array(
'date1' => new DateInterval('P2D'),
// This should have no effect on DateInterval formatting
'timezone1' => new DateTimeZone('America/New_York'),
)
--EXPECT--
2 days
2 days 0 hours
2 days 0 hours
--TEST--
"date_modify" filter
--TEMPLATE--
r5 r6 jR X {{r7 r8 j j½ r9 hxX date1r: r; hjn r< j X date_modifyr= r> hjr r? j X '-1day'r@ rA hjv rB hjn rC j X daterD rE hjr rF j X
'Y-m-d H:i:s'rG rH hjv rI j j½ rJ jR X }}rK rL hj! rM jR X {{rN rO j j½ rP hxX date2rQ rR hjn rS j X date_modifyrT rU hjr rV j X '-1day'rW rX hjv rY hjn rZ j X dater[ r\ hjr r] j X
'Y-m-d H:i:s'r^ r_ hjv r` j j½ ra jR X }}rb rc hXç
--DATA--
date_default_timezone_set('UTC');
return array(
'date1' => '2010-10-04 13:45',
'date2' => new DateTime('2010-10-04 13:45'),
)
--EXPECT--
2010-10-03 13:45:00
2010-10-03 13:45:00
--TEST--
"date" filter
--TEMPLATE--
rd re jR X {{rf rg j j½ rh hxX dateri rj hjn rk j X daterl rm hjr rn hxX formatro rp hj2 rq j X 'd/m/Y H:i:s P'rr rs hj rt j j½ ru hxX timezonerv rw hj2 rx j X 'America/Chicago'ry rz hjv r{ j j½ r| jR X }}r} r~ hj! r jR X {{r r j j½ r hxX dater r hjn r
j X dater r hjr r hxX timezoner r hj2 r j X 'America/Chicago'r r hj r j j½ r hxX formatr r hj2 r j X 'd/m/Y H:i:s P'r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX dater r hjn r j X dater r¡ hjr r¢ j X 'd/m/Y H:i:s P'r£ r¤ hj r¥ j j½ r¦ hxX timezoner§ r¨ hj2 r© j X 'America/Chicago'rª r« hjv r¬ j j½ r jR X }}r® r¯ hXã
--DATA--
date_default_timezone_set('UTC');
return array('date' => mktime(13, 45, 0, 10, 4, 2010))
--EXPECT--
04/10/2010 08:45:00 -05:00
04/10/2010 08:45:00 -05:00
04/10/2010 08:45:00 -05:00
--TEST--
"date" filter
--TEMPLATE--
r° r± jR X {{r² r³ j j½ r´ hxX date1rµ r¶ hjn r· j X dater¸ r¹ j j½ rº jR X }}r» r¼ hj! r½ jR X {{r¾ r¿ j j½ rÀ hxX date1rÁ r hjn rà j X daterÄ rÅ hjr rÆ j X 'd/m/Y'rÇ rÈ hjv rÉ j j½ rÊ jR X }}rË rÌ hj! rÍ jR X {{rÎ rÏ j j½ rÐ hxX date1rÑ rÒ hjn rÓ j X daterÔ rÕ hjr rÖ j X
'd/m/Y H:i:s'r× rØ hj rÙ j j½ rÚ j X 'Asia/Hong_Kong'rÛ rÜ hjv rÝ j j½ rÞ jR X }}rß rà hj! rá jR X {{râ rã j j½ rä hxX date1rå ræ hjn rç j X daterè ré hjr rê j X 'd/m/Y H:i:s P'rë rì hj rí j j½ rî j X 'Asia/Hong_Kong'rï rð hjv rñ j j½ rò jR X }}ró rô hj! rõ jR X {{rö r÷ j j½ rø hxX date1rù rú hjn rû j X daterü rý hjr rþ j X 'd/m/Y H:i:s P'rÿ r hj r j j½ r j X 'America/Chicago'r r hjv r j j½ r jR X }}r r hj! r jR X {{r
r j j½ r hxX date1r
r hjn r j X dater r hjr r j X 'e'r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX date1r r hjn r j X dater r! hjr r" j X
'd/m/Y H:i:s'r# r$ hjv r% j j½ r& jR X }}r' r( hX
r) r* jR X {{r+ r, j j½ r- hxX date2r. r/ hjn r0 j X dater1 r2 j j½ r3 jR X }}r4 r5 hj! r6 jR X {{r7 r8 j j½ r9 hxX date2r: r; hjn r< j X dater= r> hjr r? j X 'd/m/Y'r@ rA hjv rB j j½ rC jR X }}rD rE hj! rF jR X {{rG rH j j½ rI hxX date2rJ rK hjn rL j X daterM rN hjr rO j X
'd/m/Y H:i:s'rP rQ hj rR j j½ rS j X 'Asia/Hong_Kong'rT rU hjv rV j j½ rW jR X }}rX rY hj! rZ jR X {{r[ r\ j j½ r] e(hxX date2r^ r_ hjn r` j X datera rb hjr rc j X
'd/m/Y H:i:s'rd re hj rf j j½ rg hxX timezone1rh ri hjv rj j j½ rk jR X }}rl rm hj! rn jR X {{ro rp j j½ rq hxX date2rr rs hjn rt j X dateru rv hjr rw j X
'd/m/Y H:i:s'rx ry hjv rz j j½ r{ jR X }}r| r} hX
r~ r jR X {{r r j j½ r hxX date3r r hjn r
j X dater r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX date3r r hjn r j X dater r hjr r j X 'd/m/Y'r r hjv r j j½ r jR X }}r r hX
r r jR X {{r r j j½ r hxX date4r r¡ hjn r¢ j X dater£ r¤ j j½ r¥ jR X }}r¦ r§ hj! r¨ jR X {{r© rª j j½ r« hxX date4r¬ r hjn r® j X dater¯ r° hjr r± j X 'd/m/Y'r² r³ hjv r´ j j½ rµ jR X }}r¶ r· hX
r¸ r¹ jR X {{rº r» j j½ r¼ hxX date5r½ r¾ hjn r¿ j X daterÀ rÁ j j½ r jR X }}rà rÄ hj! rÅ jR X {{rÆ rÇ j j½ rÈ hxX date5rÉ rÊ hjn rË j X daterÌ rÍ hjr rÎ j X 'd/m/Y'rÏ rÐ hjv rÑ j j½ rÒ jR X }}rÓ rÔ hX
rÕ rÖ jR X {{r× rØ j j½ rÙ hxX date6rÚ rÛ hjn rÜ j X daterÝ rÞ hjr rß j X 'd/m/Y H:i:s P'rà rá hj râ j j½ rã j X 'Europe/Paris'rä rå hjv ræ j j½ rç jR X }}rè ré hj! rê jR X {{rë rì j j½ rí hxX date6rî rï hjn rð j X daterñ rò hjr ró j X 'd/m/Y H:i:s P'rô rõ hj rö j j½ r÷ j X 'Asia/Hong_Kong'rø rù hjv rú j j½ rû jR X }}rü rý hj! rþ jR X {{rÿ r j j½ r hxX date6r r hjn r j X dater r hjr r j X 'd/m/Y H:i:s P'r r hj r
j j½ r jû X falser r
hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX date6r r hjn r j X dater r hjr r j X 'e'r r hj r j j½ r j X 'Europe/Paris'r r! hjv r" j j½ r# jR X }}r$ r% hj! r& jR X {{r' r( j j½ r) hxX date6r* r+ hjn r, j X dater- r. hjr r/ j X 'e'r0 r1 hj r2 j j½ r3 jû X falser4 r5 hjv r6 j j½ r7 jR X }}r8 r9 hX
r: r; jR X {{r< r= j j½ r> hxX date7r? r@ hjn rA j X daterB rC j j½ rD jR X }}rE rF hXÀ
--DATA--
date_default_timezone_set('Europe/Paris');
return array(
'date1' => mktime(13, 45, 0, 10, 4, 2010),
'date2' => new DateTime('2010-10-04 13:45'),
'date3' => '2010-10-04 13:45',
'date4' => 1286199900, // DateTime::createFromFormat('Y-m-d H:i', '2010-10-04 13:45', new DateTimeZone('UTC'))->getTimestamp() -- A unixtimestamp is always GMT
'date5' => -189291360, // DateTime::createFromFormat('Y-m-d H:i', '1964-01-02 03:04', new DateTimeZone('UTC'))->getTimestamp(),
'date6' => new DateTime('2010-10-04 13:45', new DateTimeZone('America/New_York')),
'date7' => '2010-01-28T15:00:00+05:00',
'timezone1' => new DateTimeZone('America/New_York'),
)
--EXPECT--
October 4, 2010 13:45
04/10/2010
04/10/2010 19:45:00
04/10/2010 19:45:00 +08:00
04/10/2010 06:45:00 -05:00
Europe/Paris
04/10/2010 13:45:00
October 4, 2010 13:45
04/10/2010
04/10/2010 19:45:00
04/10/2010 07:45:00
04/10/2010 13:45:00
October 4, 2010 13:45
04/10/2010
October 4, 2010 15:45
04/10/2010
January 2, 1964 04:04
02/01/1964
04/10/2010 19:45:00 +02:00
05/10/2010 01:45:00 +08:00
04/10/2010 13:45:00 -04:00
Europe/Paris
America/New_York
January 28, 2010 11:00
--TEST--
"default" filter
--TEMPLATE--
Variable:
rG rH jR X {{rI rJ j j½ rK hxX
definedVarrL rM j X rN rO hjn rP j X defaultrQ rR hjr rS j X 'default'rT rU hjv rV j j½ rW jà X isrX rY j j½ rZ j X samer[ r\ j j½ r] hxX asr^ r_ hjr r` j X 'default'ra rb hjv rc j j½ rd hjÊ re j j½ rf j X 'ko'rg rh j j½ ri hj± rj j j½ rk j X 'ok'rl rm j j½ rn jR X }}ro rp hj! rq jR X {{rr rs j j½ rt hxX zeroVarru rv j X rw rx hjn ry j X defaultrz r{ hjr r| j X 'default'r} r~ hjv r j j½ r jà X isr r j j½ r j X samer r
j j½ r hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r j j½ r j X 'ko'r r j j½ r hj± r j j½ r j X 'ok'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX emptyVarr r j X r r¡ hjn r¢ j X defaultr£ r¤ hjr r¥ j X 'default'r¦ r§ hjv r¨ j j½ r© jà X isrª r« j j½ r¬ j X samer r® j j½ r¯ hxX asr° r± hjr r² j X 'default'r³ r´ hjv rµ j j½ r¶ hjÊ r· j j½ r¸ j X 'ok'r¹ rº j j½ r» hj± r¼ j j½ r½ j X 'ko'r¾ r¿ j j½ rÀ jR X }}rÁ r hj! rà jR X {{rÄ rÅ j j½ rÆ hxX nullVarrÇ rÈ j X rÉ rÊ hjn rË j X defaultrÌ rÍ hjr rÎ j X 'default'rÏ rÐ hjv rÑ j j½ rÒ jà X isrÓ rÔ j j½ rÕ j X samerÖ r× j j½ rØ hxX asrÙ rÚ hjr rÛ j X 'default'rÜ rÝ hjv rÞ j j½ rß hjÊ rà j j½ rá j X 'ok'râ rã j j½ rä hj± rå j j½ ræ j X 'ko'rç rè j j½ ré jR X }}rê rë hj! rì jR X {{rí rî j j½ rï hxX undefinedVarrð rñ j X rò ró hjn rô j X defaultrõ rö hjr r÷ j X 'default'rø rù hjv rú j j½ rû jà X isrü rý j j½ rþ j X samerÿ r j j½ r hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r j j½ r
j X 'ok'r r j j½ r
hj± r j j½ r j X 'ko'r r j j½ r jR X }}r r hX
Array access:
r r jR X {{r r j j½ r hxX nestedr r hxX .definedVarr r j X r r hjn r j X defaultr! r" hjr r# j X 'default'r$ r% hjv r& j j½ r' jà X isr( r) j j½ r* j X samer+ r, j j½ r- hxX asr. r/ hjr r0 j X 'default'r1 r2 hjv r3 j j½ r4 hjÊ r5 j j½ r6 j X 'ko'r7 r8 j j½ r9 hj± r: j j½ r; j X 'ok'r< r= j j½ r> jR X }}r? r@ hj! rA jR X {{rB rC j j½ rD hxX nestedrE rF hj= rG j X 'definedVar'rH rI hjA rJ j X rK rL hjn rM j X defaultrN rO hjr rP j X 'default'rQ rR hjv rS j j½ rT jà X isrU rV j j½ rW j X samerX rY j j½ rZ hxX asr[ r\ hjr r] j X 'default'r^ r_ hjv r` j j½ ra hjÊ rb j j½ rc j X 'ko'rd re j j½ rf hj± rg j j½ rh j X 'ok'ri rj j j½ rk jR X }}rl rm hj! rn jR X {{ro rp j j½ rq hxX nestedrr rs hxX .zeroVarrt ru j X rv rw hjn rx j X defaultry rz hjr r{ j X 'default'r| r} hjv r~ j j½ r jà X isr r j j½ r j X samer r j j½ r
hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r j j½ r j X 'ko'r r j j½ r hj± r j j½ r j X 'ok'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX nestedr r hxX .emptyVarr r j X
r¡ r¢ hjn r£ j X defaultr¤ r¥ hjr r¦ j X 'default'r§ r¨ hjv r© j j½ rª jà X isr« r¬ j j½ r j X samer® r¯ j j½ r° hxX asr± r² hjr r³ j X 'default'r´ rµ hjv r¶ j j½ r· hjÊ r¸ j j½ r¹ j X 'ok'rº r» j j½ r¼ hj± r½ j j½ r¾ j X 'ko'r¿ rÀ j j½ rÁ jR X }}r rà hj! rÄ jR X {{rÅ rÆ j j½ rÇ hxX nestedrÈ rÉ hxX .nullVarrÊ rË j X rÌ rÍ hjn rÎ j X defaultrÏ rÐ hjr rÑ j X 'default'rÒ rÓ hjv rÔ j j½ rÕ jà X isrÖ r× j j½ rØ j X samerÙ rÚ j j½ rÛ hxX asrÜ rÝ hjr rÞ j X 'default'rß rà hjv rá j j½ râ hjÊ rã j j½ rä j X 'ok'rå ræ j j½ rç hj± rè j j½ ré j X 'ko'rê rë j j½ rì jR X }}rí rî hj! rï jR X {{rð rñ j j½ rò hxX nestedró rô hxX
.undefinedVarrõ rö j X r÷ rø hjn rù j X defaultrú rû hjr rü j X 'default'rý rþ hjv rÿ j j½ r jà X isr r j j½ r j X samer r j j½ r hxX asr r hjr r j X 'default'r
r hjv r j j½ r
hjÊ r j j½ r j X 'ok'r r j j½ r hj± r j j½ r j X 'ko'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX nestedr r hj= r j X 'undefinedVar'r! r" hjA r# j X r$ r% hjn r& j X defaultr' r( hjr r) j X 'default'r* r+ hjv r, j j½ r- jà X isr. r/ j j½ r0 j X samer1 r2 j j½ r3 hxX asr4 r5 hjr r6 j X 'default'r7 r8 hjv r9 j j½ r: hjÊ r; j j½ r< j X 'ok'r= r> j j½ r? hj± r@ j j½ rA j X 'ko'rB rC j j½ rD jR X }}rE rF hj! rG jR X {{rH rI j j½ rJ hxX undefinedVarrK rL hxX .foorM rN j X rO rP hjn rQ j X defaultrR rS hjr rT j X 'default'rU rV hjv rW j j½ rX jà X isrY rZ j j½ r[ j X samer\ r] j j½ r^ hxX asr_ r` hjr ra j X 'default'rb rc hjv rd j j½ re hjÊ rf j j½ rg j X 'ok'rh ri j j½ rj hj± rk j j½ rl j X 'ko'rm rn j j½ ro jR X }}rp rq hX
Plain values:
rr rs jR X {{rt ru j j½ rv j X 'defined'rw rx j X ry rz hjn r{ j X defaultr| r} hjr r~ j X 'default'r r hjv r j j½ r jà X isr r j j½ r
j X samer r j j½ r hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r j j½ r j X 'ko'r r j j½ r hj± r j j½ r j X 'ok'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j j¯ r j X r¡ r¢ hjn r£ j X defaultr¤ r¥ hjr r¦ j X 'default'r§ r¨ hjv r© j j½ rª jà X isr« r¬ j j½ r j X samer® r¯ j j½ r° hxX asr± r² hjr r³ j X 'default'r´ rµ hjv r¶ j j½ r· hjÊ r¸ j j½ r¹ j X 'ko'rº r» j j½ r¼ hj± r½ j j½ r¾ j X 'ok'r¿ rÀ j j½ rÁ jR X }}r rà hj! rÄ jR X {{rÅ rÆ j j½ rÇ j X ''rÈ rÉ j X rÊ rË hjn rÌ j X defaultrÍ rÎ hjr rÏ j X 'default'rÐ rÑ hjv rÒ j j½ rÓ jà X isrÔ rÕ j j½ rÖ j X samer× rØ j j½ rÙ hxX asrÚ rÛ hjr rÜ j X 'default'rÝ rÞ hjv rß j j½ rà hjÊ rá j j½ râ j X 'ok'rã rä j j½ rå hj± ræ j j½ rç j X 'ko'rè ré j j½ rê jR X }}rë rì hj! rí jR X {{rî rï j j½ rð jû X nullrñ rò j X ró rô hjn rõ j X defaultrö r÷ hjr rø j X 'default'rù rú hjv rû j j½ rü jà X isrý rþ j j½ rÿ j X samer r j j½ r hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r
j j½ r j X 'ok'r r
j j½ r hj± r j j½ r j X 'ko'r r j j½ r jR X }}r r hX
Precedence:
r r jR X {{r r j j½ r j X 'o'r r j j½ r hj1 r j j½ r hxX nullVarr r! j X r" r# hjn r$ j X defaultr% r& hjr r' j X 'k'r( r) hjv r* j j½ r+ jR X }}r, r- hj! r. jR X {{r/ r0 j j½ r1 j X 'o'r2 r3 j j½ r4 hj1 r5 j j½ r6 hxX nestedr7 r8 hxX .nullVarr9 r: j X r; r< hjn r= j X defaultr> r? hjr r@ j X 'k'rA rB hjv rC j j½ rD jR X }}rE rF hX
Object methods:
rG rH jR X {{rI rJ j j½ rK hxX objectrL rM hxX .foorN rO j X rP rQ hjn rR j X defaultrS rT hjr rU j X 'default'rV rW hjv rX j j½ rY jà X isrZ r[ j j½ r\ j X samer] r^ j j½ r_ hxX asr` ra hjr rb j X 'default'rc rd hjv re j j½ rf hjÊ rg j j½ rh j X 'ko'ri rj j j½ rk hj± rl j j½ rm j X 'ok'rn ro j j½ rp jR X }}rq rr hj! rs jR X {{rt ru j j½ rv hxX objectrw rx hxX .undefinedMethodry rz j X r{ r| hjn r} j X defaultr~ r hjr r j X 'default'r r hjv r j j½ r jà X isr
r j j½ r j X samer r j j½ r hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r j j½ r j X 'ok'r r j j½ r hj± r j j½ r j X 'ko'r r j j½ r jR X }}r r hj! r jR X {{r r j j½ r¡ hxX objectr¢ r£ hxX .getFoor¤ r¥ hjr r¦ hjv r§ j X
r¨ r© hjn rª j X defaultr« r¬ hjr r j X 'default'r® r¯ hjv r° j j½ r± jà X isr² r³ j j½ r´ j X samerµ r¶ j j½ r· hxX asr¸ r¹ hjr rº j X 'default'r» r¼ hjv r½ j j½ r¾ hjÊ r¿ j j½ rÀ j X 'ko'rÁ r j j½ rà hj± rÄ j j½ rÅ j X 'ok'rÆ rÇ j j½ rÈ jR X }}rÉ rÊ hj! rË jR X {{rÌ rÍ j j½ rÎ hxX objectrÏ rÐ hxX .getFoorÑ rÒ hjr rÓ j X 'a'rÔ rÕ hjv rÖ j X
r× rØ hjn rÙ j X defaultrÚ rÛ hjr rÜ j X 'default'rÝ rÞ hjv rß j j½ rà jà X isrá râ j j½ rã j X samerä rå j j½ ræ hxX asrç rè hjr ré j X 'default'rê rë hjv rì j j½ rí hjÊ rî j j½ rï j X 'ko'rð rñ j j½ rò hj± ró j j½ rô j X 'ok'rõ rö j j½ r÷ jR X }}rø rù hj! rú jR X {{rû rü j j½ rý hxX objectrþ rÿ hxX .undefinedMethodr r hjr r hjv r j X r r hjn r j X defaultr r hjr r j X 'default'r
r hjv r j j½ r
jà X isr r j j½ r j X samer r j j½ r hxX asr r hjr r j X 'default'r r hjv r j j½ r hjÊ r j j½ r j X 'ok'r r j j½ r hj± r j j½ r! j X 'ko'r" r# j j½ r$ jR X }}r% r& hj! r' jR X {{r( r) j j½ r* hxX objectr+ r, hxX .undefinedMethodr- r. hjr r/ j X 'a'r0 r1 hjv r2 j j½ r3 hjn r4 j X defaultr5 r6 hjr r7 j X 'default'r8 r9 hjv r: j j½ r; jà X isr< r= j j½ r> j X samer? r@ j j½ rA hxX asrB rC hjr rD j X 'default'rE rF hjv rG j j½ rH hjÊ rI j j½ rJ j X 'ok'rK rL j j½ rM hj± rN j j½ rO j X 'ko'rP rQ j j½ rR jR X }}rS rT hX
Deep nested:
rU rV jR X {{rW rX j j½ rY hxX nestedrZ r[ hxX
.undefinedVarr\ r] hxX .foor^ r_ hxX .barr` ra j j½ rb hjn rc j X defaultrd re hjr rf j X 'default'rg rh hjv ri j j½ rj jà X isrk rl j j½ rm j X samern ro j j½ rp hxX asrq rr hjr rs j X 'default'rt ru hjv rv j j½ rw hjÊ rx j j½ ry j X 'ok'rz r{ j j½ r| hj± r} j j½ r~ j X 'ko'r r j j½ r jR X }}r r hj! r jR X {{r
r j j½ r hxX nestedr r hxX
.definedArrayr r j X .0r r j X r r hjn r j X defaultr r hjr r j X 'default'r r hjv r j j½ r jà X isr r j j½ r j X samer r j j½ r hxX asr r hjr r j X 'default'r¡ r¢ hjv r£ j j½ r¤ hjÊ r¥ j j½ r¦ j X 'ko'r§ r¨ j j½ r© hj± rª j j½ r« j X 'ok'r¬ r j j½ r® jR X }}r¯ r° hj! r± jR X {{r² r³ j j½ r´ hxX nestedrµ r¶ hj= r· j X 'definedArray'r¸ r¹ hjA rº hj= r» j j¯ r¼ hjA r½ j X r¾ r¿ hjn rÀ j X defaultrÁ r hjr rà j X 'default'rÄ rÅ hjv rÆ j j½ rÇ jà X isrÈ rÉ j j½ rÊ j X samerË rÌ j j½ rÍ hxX asrÎ rÏ hjr rÐ j X 'default'rÑ rÒ hjv rÓ j j½ rÔ hjÊ rÕ j j½ rÖ j X 'ko'r× rØ j j½ rÙ hj± rÚ j j½ rÛ j X 'ok'rÜ rÝ j j½ rÞ jR X }}rß rà hj! rá jR X {{râ rã j j½ rä hxX objectrå ræ hxX .selfrç rè hxX .fooré rê j X
rë rì hjn rí j X defaultrî rï hjr rð j X 'default'rñ rò hjv ró j j½ rô jà X isrõ rö j j½ r÷ j X samerø rù j j½ rú e(hxX asrû rü hjr rý j X 'default'rþ rÿ hjv r j j½ r hjÊ r j j½ r j X 'ko'r r j j½ r hj± r j j½ r j X 'ok'r r
j j½ r jR X }}r r
hj! r jR X {{r r j j½ r hxX objectr r hxX .selfr r hxX .undefinedMethodr r j j½ r hjn r j X defaultr r hjr r j X 'default'r r hjv r j j½ r jà X isr! r" j j½ r# j X samer$ r% j j½ r& hxX asr' r( hjr r) j X 'default'r* r+ hjv r, j j½ r- hjÊ r. j j½ r/ j X 'ok'r0 r1 j j½ r2 hj± r3 j j½ r4 j X 'ko'r5 r6 j j½ r7 jR X }}r8 r9 hj! r: jR X {{r; r< j j½ r= hxX objectr> r? hxX .undefinedMethodr@ rA hxX .selfrB rC j j½ rD hjn rE j X defaultrF rG hjr rH j X 'default'rI rJ hjv rK j j½ rL jà X isrM rN j j½ rO j X samerP rQ j j½ rR hxX asrS rT hjr rU j X 'default'rV rW hjv rX j j½ rY hjÊ rZ j j½ r[ j X 'ok'r\ r] j j½ r^ hj± r_ j j½ r` j X 'ko'ra rb j j½ rc jR X }}rd re hXÑ
--DATA--
return array(
'definedVar' => 'defined',
'zeroVar' => 0,
'emptyVar' => '',
'nullVar' => null,
'nested' => array(
'definedVar' => 'defined',
'zeroVar' => 0,
'emptyVar' => '',
'nullVar' => null,
'definedArray' => array(0),
),
'object' => new TwigTestFoo(),
)
--CONFIG--
return array('strict_variables' => false)
--EXPECT--
Variable:
ok
ok
ok
ok
ok
Array access:
ok
ok
ok
ok
ok
ok
ok
ok
Plain values:
ok
ok
ok
ok
Precedence:
ok
ok
Object methods:
ok
ok
ok
ok
ok
ok
Deep nested:
ok
ok
ok
ok
ok
ok
--DATA--
return array(
'definedVar' => 'defined',
'zeroVar' => 0,
'emptyVar' => '',
'nullVar' => null,
'nested' => array(
'definedVar' => 'defined',
'zeroVar' => 0,
'emptyVar' => '',
'nullVar' => null,
'definedArray' => array(0),
),
'object' => new TwigTestFoo(),
)
--CONFIG--
return array('strict_variables' => true)
--EXPECT--
Variable:
ok
ok
ok
ok
ok
Array access:
ok
ok
ok
ok
ok
ok
ok
ok
Plain values:
ok
ok
ok
ok
Precedence:
ok
ok
Object methods:
ok
ok
ok
ok
ok
ok
Deep nested:
ok
ok
ok
ok
ok
ok
--TEST--
dynamic filter
--TEMPLATE--
rf rg jR X {{rh ri j j½ rj j X 'bar'rk rl hjn rm j X foo_pathrn ro j j½ rp jR X }}rq rr hj! rs jR X {{rt ru j j½ rv j X 'bar'rw rx hjn ry j X a_foo_b_barrz r{ j j½ r| jR X }}r} r~ hX£
--DATA--
return array()
--EXPECT--
foo/bar
a/b/bar
--TEST--
"escape" filter does not escape with the html strategy when using the html_attr strategy
--TEMPLATE--
r r jR X {{r r j j½ r j X '<br />'r r
hjn r j X escaper r hjr r j X 'html_attr'r r hjv r j j½ r jR X }}r r hXa
--DATA--
return array()
--EXPECT--
<br />
--TEST--
"escape" filter
--TEMPLATE--
r r jR X {{r r j j½ r jñ X! "愛していますか? <br />"r r hjn r j X er r j j½ r jR X }}r r hXp
--DATA--
return array()
--EXPECT--
愛していますか? <br />
--TEST--
"escape" filter
--TEMPLATE--
r r jR X {{r r j j½ r¡ jñ X "foo <br />"r¢ r£ hjn r¤ j j r¥ j j½ r¦ jR X }}r§ r¨ hXZ
--DATA--
return array()
--EXPECT--
foo <br />
--TEST--
"first" filter
--TEMPLATE--
r© rª jR X {{r« r¬ j j½ r hj= r® j j r¯ hj r° j j½ r± j j r² hj r³ j j½ r´ j jn rµ hj r¶ j j½ r· j jÌ r¸ hjA r¹ hjn rº j X firstr» r¼ j j½ r½ jR X }}r¾ r¿ hj! rÀ jR X {{rÁ r j j½ rà hj rÄ hxj/ rÅ hj± rÆ j j½ rÇ j j rÈ hj rÉ j j½ rÊ hxjü rË hj± rÌ j j½ rÍ j j rÎ hj rÏ j j½ rÐ hxX crÑ rÒ hj± rÓ j j½ rÔ j jn rÕ hj rÖ j j½ r× hxX drØ rÙ hj± rÚ j j½ rÛ j jÌ rÜ hj½ rÝ hjn rÞ j X firstrß rà j j½ rá jR X }}râ rã hj! rä jR X {{rå ræ j j½ rç j X '1234'rè ré hjn rê j X firstrë rì j j½ rí jR X }}rî rï hj! rð jR X {{rñ rò j j½ ró hxX arrrô rõ hjn rö j X firstr÷ rø j j½ rù jR X }}rú rû hj! rü jR X {{rý rþ j j½ rÿ j X 'Ä€é'r r hjn r j X firstr r j j½ r jR X }}r r hj! r jR X {{r r
j j½ r j X ''r r
hjn r j X firstr r j j½ r jR X }}r r hX
--DATA--
return array('arr' => new ArrayObject(array(1, 2, 3, 4)))
--EXPECT--
1
1
1
1
Ä
--TEST--
"escape" filter
--TEMPLATE--
r r jR X {%r r j j½ r jà X setr r j j½ r hxX foor r j j½ r jR X %}r r hX
foo<br />
r! r" jR X {%r# r$ j j½ r% jà X endsetr& r' j j½ r( jR X %}r) r* hX
r+ r, jR X {{r- r. j j½ r/ hxX foor0 r1 hjn r2 j j r3 hjr r4 j X 'html'r5 r6 hjv r7 j j½ r8 j jv r9 jR X }}r: r; hj! r< jR X {{r= r> j j½ r? hxX foor@ rA hjn rB j j rC hjr rD j X 'js'rE rF hjv rG j j½ rH jR X }}rI rJ hj! rK jR X {%rL rM j j½ rN jà X
autoescaperO rP j j½ rQ jû X truerR rS j j½ rT jR X %}rU rV hX
rW rX jR X {{rY rZ j j½ r[ hxX foor\ r] j j½ r^ jR X }}r_ r` hj! ra jR X {%rb rc j j½ rd jà X
endautoescapere rf j j½ rg jR X %}rh ri hX
--DATA--
return array()
--EXPECT--
foo<br />
\x20\x20\x20\x20foo\x3Cbr\x20\x2F\x3E\x0A
foo<br />
--TEST--
"format" filter
--TEMPLATE--
rj rk jR X {{rl rm j j½ rn hxX stringro rp hjn rq j X formatrr rs hjr rt hxX fooru rv hj rw j j½ rx j jn ry hjv rz j j½ r{ jR X }}r| r} hXq
--DATA--
return array('string' => '%s/%d', 'foo' => 'bar')
--EXPECT--
bar/3
--TEST--
"join" filter
--TEMPLATE--
r~ r jR X {{r r j j½ r hj= r jñ X "foo"r r
hj r j j½ r jñ X "bar"r r hjA r hjn r j X joinr r hjr r j X ', 'r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX foor r hjn r j X joinr r hjr r j X ', 'r r hjv r¡ j j½ r¢ jR X }}r£ r¤ hj! r¥ jR X {{r¦ r§ j j½ r¨ hxX barr© rª hjn r« j X joinr¬ r hjr r® j X ', 'r¯ r° hjv r± j j½ r² jR X }}r³ r´ hX£
--DATA--
return array('foo' => new TwigTestFoo(), 'bar' => new ArrayObject(array(3, 4)))
--EXPECT--
foo, bar
1, 2
3, 4
--TEST--
"json_encode" filter
--TEMPLATE--
rµ r¶ jR X {{r· r¸ j j½ r¹ jñ X "foo"rº r» hjn r¼ j X json_encoder½ r¾ hjn r¿ j X rawrÀ rÁ j j½ r jR X }}rà rÄ hj! rÅ jR X {{rÆ rÇ j j½ rÈ hxX foorÉ rÊ hjn rË j X json_encoderÌ rÍ hjn rÎ j X rawrÏ rÐ j j½ rÑ jR X }}rÒ rÓ hj! rÔ jR X {{rÕ rÖ j j½ r× hj= rØ hxX foorÙ rÚ hj rÛ j j½ rÜ jñ X "foo"rÝ rÞ hjA rß hjn rà j X json_encoderá râ hjn rã j X rawrä rå j j½ ræ jR X }}rç rè hX
--DATA--
return array('foo' => new Twig_Markup('foo', 'UTF-8'))
--EXPECT--
"foo"
"foo"
["foo","foo"]
--TEST--
"last" filter
--TEMPLATE--
ré rê jR X {{rë rì j j½ rí hj= rî j j rï hj rð j j½ rñ j j rò hj ró j j½ rô j jn rõ hj rö j j½ r÷ j jÌ rø hjA rù hjn rú j X lastrû rü j j½ rý jR X }}rþ rÿ hj! r jR X {{r r j j½ r hj r hxj/ r hj± r j j½ r j j r hj r j j½ r
hxjü r hj± r j j½ r
j j r hj r j j½ r hxjÑ r hj± r j j½ r j jn r hj r j j½ r hxjØ r hj± r j j½ r j jÌ r hj½ r hjn r j X lastr r j j½ r jR X }}r r! hj! r" jR X {{r# r$ j j½ r% j X '1234'r& r' hjn r( j X lastr) r* j j½ r+ jR X }}r, r- hj! r. jR X {{r/ r0 j j½ r1 hxX arrr2 r3 hjn r4 j X lastr5 r6 j j½ r7 jR X }}r8 r9 hj! r: jR X {{r; r< j j½ r= j X 'Ä€é'r> r? hjn r@ j X lastrA rB j j½ rC jR X }}rD rE hj! rF jR X {{rG rH j j½ rI j X ''rJ rK hjn rL j X lastrM rN j j½ rO jR X }}rP rQ hX
--DATA--
return array('arr' => new ArrayObject(array(1, 2, 3, 4)))
--EXPECT--
4
4
4
4
é
--TEST--
"length" filter
--TEMPLATE--
rR rS jR X {{rT rU j j½ rV hxX arrayrW rX hjn rY j X lengthrZ r[ j j½ r\ jR X }}r] r^ hj! r_ jR X {{r` ra j j½ rb hxX stringrc rd hjn re j X lengthrf rg j j½ rh jR X }}ri rj hj! rk jR X {{rl rm j j½ rn hxX numberro rp hjn rq j X lengthrr rs j j½ rt jR X }}ru rv hj! rw jR X {{rx ry j j½ rz hxX markupr{ r| hjn r} j X lengthr~ r j j½ r jR X }}r r hXç
--DATA--
return array('array' => array(1, 4), 'string' => 'foo', 'number' => 1000, 'markup' => new Twig_Markup('foo', 'UTF-8'))
--EXPECT--
2
3
4
3
--TEST--
"length" filter
--CONDITION--
function_exists('mb_get_info')
--TEMPLATE--
r r jR X {{r
r j j½ r hxX stringr r hjn r j X lengthr r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hxX markupr r hjn r j X lengthr r j j½ r jR X }}r r hX
--DATA--
return array('string' => 'été', 'markup' => new Twig_Markup('foo', 'UTF-8'))
--EXPECT--
3
3
--TEST--
"merge" filter
--TEMPLATE--
r r jR X {{r r j j½ r hxX itemsr¡ r¢ hjn r£ j X merger¤ r¥ hjr r¦ hj r§ j X 'bar'r¨ r© hj± rª j j½ r« j X 'foo'r¬ r hj½ r® hjv r¯ hjn r° j X joinr± r² j j½ r³ jR X }}r´ rµ hj! r¶ jR X {{r· r¸ j j½ r¹ hxX itemsrº r» hjn r¼ j X merger½ r¾ hjr r¿ hj rÀ j X 'bar'rÁ r hj± rà j j½ rÄ j X 'foo'rÅ rÆ hj½ rÇ hjv rÈ hjn rÉ j X keysrÊ rË hjn rÌ j X joinrÍ rÎ j j½ rÏ jR X }}rÐ rÑ hj! rÒ jR X {{rÓ rÔ j j½ rÕ hj rÖ j X 'bar'r× rØ hj± rÙ j j½ rÚ j X 'foo'rÛ rÜ hj½ rÝ hjn rÞ j X mergerß rà hjr rá hxX itemsrâ rã hjv rä hjn rå j X joinræ rç j j½ rè jR X }}ré rê hj! rë jR X {{rì rí j j½ rî hj rï j X 'bar'rð rñ hj± rò j j½ ró j X 'foo'rô rõ hj½ rö hjn r÷ j X mergerø rù hjr rú hxX itemsrû rü hjv rý hjn rþ j X keysrÿ r hjn r j X joinr r j j½ r jR X }}r r hj! r jR X {{r r j j½ r
hxX numericsr r hjn r
j X merger r hjr r hj= r j jÌ r hj r j j½ r j j r hj r j j½ r j X 6r r hjA r hjv r hjn r j X joinr r j j½ r jR X }}r r! hXª
--DATA--
return array('items' => array('foo' => 'bar'), 'numerics' => array(1, 2, 3))
--EXPECT--
barfoo
foobar
foobar
barfoo
123456
--TEST--
"nl2br" filter
--TEMPLATE--
r" r# jR X {{r$ r% j j½ r& jñ X; "I like Twig.\nYou will like it too.\n\nEverybody like it!"r' r( hjn r) j X nl2brr* r+ j j½ r, jR X }}r- r. hj! r/ jR X {{r0 r1 j j½ r2 hxX textr3 r4 hjn r5 j X nl2brr6 r7 j j½ r8 jR X }}r9 r: hX=
--DATA--
return array('text' => "If you have some <strong>HTML</strong>\nit will be escaped.")
--EXPECT--
I like Twig.<br />
You will like it too.<br />
<br />
Everybody like it!
If you have some <strong>HTML</strong><br />
it will be escaped.
--TEST--
"number_format" filter with defaults.
--TEMPLATE--
r; r< jR X {{r= r> j j½ r? j j r@ j j¯ rA hjn rB j X
number_formatrC rD j j½ rE jR X }}rF rG hj! rH jR X {{rI rJ j j½ rK j j rL j X 0.25rM rN hjn rO j X
number_formatrP rQ j j½ rR jR X }}rS rT hj! rU jR X {{rV rW j j½ rX j j rY j X 0.25rZ r[ hjn r\ j X
number_formatr] r^ hjr r_ j j r` hjv ra j j½ rb jR X }}rc rd hj! re jR X {{rf rg j j½ rh j j ri j X 0.25rj rk hjn rl j X
number_formatrm rn hjr ro j j rp hj rq j j½ rr j X ','rs rt hjv ru j j½ rv jR X }}rw rx hj! ry jR X {{rz r{ j j½ r| j j r} j j¯ r~ j j r j X 0.25r r hjn r j X
number_formatr r j j½ r
jR X }}r r hj! r jR X {{r r j j½ r j j r j j¯ r j j r j X 0.25r r hjn r j X
number_formatr r hjr r j j r hj r j j½ r j X ','r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r¡ j j r¢ j j¯ r£ j j r¤ j X 0.25r¥ r¦ hjn r§ j X
number_formatr¨ r© hjr rª j j r« hj r¬ j j½ r j X ','r® r¯ hj r° j j½ r± j X '.'r² r³ hjv r´ j j½ rµ jR X }}r¶ r· hX¿
--DATA--
$twig->getExtension('core')->setNumberFormat(2, '!', '=');
return array();
--EXPECT--
20!00
20!25
20!3
20,25
1=020!25
1=020,25
1.020,25
--TEST--
"number_format" filter
--TEMPLATE--
r¸ r¹ jR X {{rº r» j j½ r¼ j j r½ j j¯ r¾ hjn r¿ j X
number_formatrÀ rÁ j j½ r jR X }}rà rÄ hj! rÅ jR X {{rÆ rÇ j j½ rÈ j j rÉ j X 0.25rÊ rË hjn rÌ j X
number_formatrÍ rÎ j j½ rÏ jR X }}rÐ rÑ hj! rÒ jR X {{rÓ rÔ j j½ rÕ j j rÖ j X 0.25r× rØ hjn rÙ j X
number_formatrÚ rÛ hjr rÜ j j rÝ hjv rÞ j j½ rß jR X }}rà rá hj! râ jR X {{rã rä j j½ rå j j ræ j X 0.25rç rè hjn ré j X
number_formatrê rë hjr rì j j rí hj rî j j½ rï j X ','rð rñ hjv rò j j½ ró jR X }}rô rõ hj! rö jR X {{r÷ rø j j½ rù j j rú j j¯ rû j j rü j X 0.25rý rþ hjn rÿ j X
number_formatr r hjr r j j r hj r j j½ r j X ','r r hjv r j j½ r jR X }}r
r hj! r jR X {{r
r j j½ r j j r j j¯ r j j r j X 0.25r r hjn r j X
number_formatr r hjr r j j r hj r j j½ r j X ','r r hj r j j½ r j X '.'r r! hjv r" j j½ r# jR X }}r$ r% hXp
--DATA--
return array();
--EXPECT--
20
20
20.25
20,25
1,020,25
1.020,25
--TEST--
"replace" filter
--TEMPLATE--
r& r' jR X {{r( r) j j½ r* jñ X "I like %this% and %that%."r+ r, hjn r- j X replacer. r/ hjr r0 hj r1 j X '%this%'r2 r3 hj± r4 j j½ r5 jñ X "foo"r6 r7 hj r8 j j½ r9 j X '%that%'r: r; hj± r< j j½ r= jñ X "bar"r> r? hj½ r@ hjv rA j j½ rB jR X }}rC rD hX_
--DATA--
return array()
--EXPECT--
I like foo and bar.
--TEST--
"reverse" filter
--TEMPLATE--
rE rF jR X {{rG rH j j½ rI hj= rJ j j rK hj rL j j½ rM j j rN hj rO j j½ rP j jn rQ hj rR j j½ rS j jÌ rT hjA rU hjn rV j X reverserW rX hjn rY j X joinrZ r[ hjr r\ j X ''r] r^ hjv r_ j j½ r` jR X }}ra rb hj! rc jR X {{rd re j j½ rf j X '1234évènement'rg rh hjn ri j X reverserj rk j j½ rl jR X }}rm rn hj! ro jR X {{rp rq j j½ rr hxX arrrs rt hjn ru j X reverserv rw hjn rx j X joinry rz hjr r{ j X ''r| r} hjv r~ j j½ r jR X }}r r hj! r jR X {{r r j j½ r
hj r j X 'a'r r hj± r j j½ r j X 'c'r r hj r j j½ r j X 'b'r r hj± r j j½ r j X 'a'r r hj½ r hjn r j X reverser r hjr r hjv r hjn r j X joinr r hjr r j X ','r r hjv r¡ j j½ r¢ jR X }}r£ r¤ hj! r¥ jR X {{r¦ r§ j j½ r¨ hj r© j X 'a'rª r« hj± r¬ j j½ r j X 'c'r® r¯ hj r° j j½ r± j X 'b'r² r³ hj± r´ j j½ rµ j X 'a'r¶ r· hj½ r¸ hjn r¹ j X reverserº r» hjr r¼ hxX preserveKeysr½ r¾ hj2 r¿ jû X truerÀ rÁ hjv r hjn rà j X joinrÄ rÅ hjr rÆ hxX gluerÇ rÈ hj2 rÉ j X ','rÊ rË hjv rÌ j j½ rÍ jR X }}rÎ rÏ hj! rÐ jR X {{rÑ rÒ j j½ rÓ hj rÔ j X 'a'rÕ rÖ hj± r× j j½ rØ j X 'c'rÙ rÚ hj rÛ j j½ rÜ j X 'b'rÝ rÞ hj± rß j j½ rà j X 'a'rá râ hj½ rã hjn rä j X reverserå ræ hjr rç hxX
preserve_keysrè ré hj2 rê jû X truerë rì hjv rí hjn rî j X joinrï rð hjr rñ hxX gluerò ró hj2 rô j X ','rõ rö hjv r÷ j j½ rø jR X }}rù rú hX
--DATA--
return array('arr' => new ArrayObject(array(1, 2, 3, 4)))
--EXPECT--
4321
tnemenèvé4321
4321
a,c
a,c
a,c
--TEST--
"round" filter
--TEMPLATE--
rû rü jR X {{rý rþ j j½ rÿ j X 2.7r r hjn r j X roundr r j j½ r jR X }}r r hj! r jR X {{r r
j j½ r j X 2.1r r
hjn r j X roundr r j j½ r jR X }}r r hj! r jR X {{r r j j½ r j X 2.1234r r hjn r j X roundr r hjr r j jn r hj r j j½ r j X 'floor'r! r" hjv r# j j½ r$ jR X }}r% r& hj! r' jR X {{r( r) j j½ r* j X 2.1r+ r, hjn r- j X roundr. r/ hjr r0 j j¯ r1 hj r2 j j½ r3 j X 'ceil'r4 r5 hjv r6 j j½ r7 jR X }}r8 r9 hX
r: r; jR X {{r< r= j j½ r> j j r? j X 1.3r@ rA hjn rB j X roundrC rD hjr rE hjv rF j j rG hjv rH jR X }}rI rJ hj! rK jR X {{rL rM j j½ rN j j rO j X 1.3rP rQ hjn rR j X roundrS rT hjr rU hjv rV j j rW hj rX j j½ rY j X 'ceil'rZ r[ hjv r\ jR X }}r] r^ hj! r_ jR X {{r` ra j j½ rb j j rc j X 1.3rd re hjn rf j X roundrg rh hjr ri hjv rj j j rk hj rl e(j j½ rm j X 'floor'rn ro hjv rp jR X }}rq rr hX_
--DATA--
return array()
--EXPECT--
3
2
2.123
3
20
30
20
--TEST--
"slice" filter
--TEMPLATE--
rs rt jR X {{ru rv j j½ rw hj= rx j j ry hj rz j j½ r{ j j r| hj r} j j½ r~ j jn r hj r j j½ r j jÌ r hjA r hj= r j j r
hj± r j j r hjA r hjn r j X joinr r hjr r j X ''r r hjv r j j½ r jR X }}r r hj! r jR X {{r r j j½ r hj r hxj/ r hj± r j j½ r j j r hj r j j½ r hxjü r hj± r j j½ r j j r¡ hj r¢ j j½ r£ hxjÑ r¤ hj± r¥ j j½ r¦ j jn r§ hj r¨ j j½ r© hxjØ rª hj± r« j j½ r¬ j jÌ r hj½ r® hj= r¯ j j r° hj± r± j j r² hjA r³ hjn r´ j X joinrµ r¶ hjr r· j X ''r¸ r¹ hjv rº j j½ r» jR X }}r¼ r½ hj! r¾ jR X {{r¿ rÀ j j½ rÁ hj= r j j rà hj rÄ j j½ rÅ j j rÆ hj rÇ j j½ rÈ j jn rÉ hj rÊ j j½ rË j jÌ rÌ hjA rÍ hj= rÎ hxX startrÏ rÐ hj± rÑ hxX lengthrÒ rÓ hjA rÔ hjn rÕ j X joinrÖ r× hjr rØ j X ''rÙ rÚ hjv rÛ j j½ rÜ jR X }}rÝ rÞ hj! rß jR X {{rà rá j j½ râ hj= rã j j rä hj rå j j½ ræ j j rç hj rè j j½ ré j jn rê hj rë j j½ rì j jÌ rí hjA rî hjn rï j X slicerð rñ hjr rò j j ró hj rô j j½ rõ j j rö hjv r÷ hjn rø j X joinrù rú hjr rû j X ''rü rý hjv rþ j j½ rÿ jR X }}r r hj! r jR X {{r r j j½ r hj= r j j r hj r j j½ r j j r
hj r j j½ r j jn r
hj r j j½ r j jÌ r hjA r hjn r j X slicer r hjr r j j r hj r j j½ r j j r hjv r hjn r j X keysr r hjn r j X joinr r hjr r! j X ''r" r# hjv r$ j j½ r% jR X }}r& r' hj! r( jR X {{r) r* j j½ r+ hj= r, j j r- hj r. j j½ r/ j j r0 hj r1 j j½ r2 j jn r3 hj r4 j j½ r5 j jÌ r6 hjA r7 hjn r8 j X slicer9 r: hjr r; j j r< hj r= j j½ r> j j r? hj r@ j j½ rA jû X truerB rC hjv rD hjn rE j X keysrF rG hjn rH j X joinrI rJ hjr rK j X ''rL rM hjv rN j j½ rO jR X }}rP rQ hj! rR jR X {{rS rT j j½ rU hj rV hxj/ rW hj± rX j j½ rY j j rZ hj r[ j j½ r\ hxjü r] hj± r^ j j½ r_ j j r` hj ra j j½ rb hxjÑ rc hj± rd j j½ re j jn rf hj rg j j½ rh hxjØ ri hj± rj j j½ rk j jÌ rl hj½ rm hjn rn j X slicero rp hjr rq j j rr hj rs j j½ rt j j ru hjv rv hjn rw j X joinrx ry hjr rz j X ''r{ r| hjv r} j j½ r~ jR X }}r r hj! r jR X {{r r j j½ r hj r
hxj/ r hj± r j j½ r j j r hj r j j½ r hxjü r hj± r j j½ r j j r hj r j j½ r hxjÑ r hj± r j j½ r j jn r hj r j j½ r hxjØ r hj± r j j½ r j jÌ r hj½ r hjn r j X slicer r hjr r j j r¡ hj r¢ j j½ r£ j j r¤ hjv r¥ hjn r¦ j X keysr§ r¨ hjn r© j X joinrª r« hjr r¬ j X ''r r® hjv r¯ j j½ r° jR X }}r± r² hj! r³ jR X {{r´ rµ j j½ r¶ j X '1234'r· r¸ hjn r¹ j X slicerº r» hjr r¼ j j r½ hj r¾ j j½ r¿ j j rÀ hjv rÁ j j½ r jR X }}rà rÄ hj! rÅ jR X {{rÆ rÇ j j½ rÈ j X '1234'rÉ rÊ hj= rË j j rÌ hj± rÍ j j rÎ hjA rÏ j j½ rÐ jR X }}rÑ rÒ hj! rÓ jR X {{rÔ rÕ j j½ rÖ hxX arrr× rØ hjn rÙ j X slicerÚ rÛ hjr rÜ j j rÝ hj rÞ j j½ rß j j rà hjv rá hjn râ j X joinrã rä hjr rå j X ''ræ rç hjv rè j j½ ré jR X }}rê rë hj! rì jR X {{rí rî j j½ rï hxX arrrð rñ hj= rò j j ró hj± rô j j rõ hjA rö hjn r÷ j X joinrø rù hjr rú j X ''rû rü hjv rý j j½ rþ jR X }}rÿ r ! hX
r! r! jR X {{r! r! j j½ r! hj= r! j j r! hj r! j j½ r ! j j r
! hj r! j j½ r! j jn r
! hj r! j j½ r! j jÌ r! hjA r! hjn r! j X slicer! r! hjr r! j j r! hjv r! hjn r! j X joinr! r! hjr r! j X ''r! r! hjv r! j j½ r! jR X }}r ! r!! hj! r"! jR X {{r#! r$! j j½ r%! hj= r&! j j r'! hj r(! j j½ r)! j j r*! hj r+! j j½ r,! j jn r-! hj r.! j j½ r/! j jÌ r0! hjA r1! hj= r2! j j r3! hj± r4! hjA r5! hjn r6! j X joinr7! r8! hjr r9! j X ''r:! r;! hjv r<! j j½ r=! jR X }}r>! r?! hj! r@! jR X {{rA! rB! j j½ rC! j X '1234'rD! rE! hjn rF! j X slicerG! rH! hjr rI! j j rJ! hjv rK! j j½ rL! jR X }}rM! rN! hj! rO! jR X {{rP! rQ! j j½ rR! j X '1234'rS! rT! hj= rU! j j rV! hj± rW! hjA rX! j j½ rY! jR X }}rZ! r[! hj! r\! jR X {{r]! r^! j j½ r_! j X '1234'r`! ra! hj= rb! hj± rc! j j rd! hjA re! j j½ rf! jR X }}rg! rh! hXÇ
--DATA--
return array('start' => 1, 'length' => 2, 'arr' => new ArrayObject(array(1, 2, 3, 4)))
--EXPECT--
23
23
23
23
01
12
23
bc
23
23
23
23
234
234
234
234
1
--TEST--
"sort" filter
--TEMPLATE--
ri! rj! jR X {{rk! rl! j j½ rm! hxX array1rn! ro! hjn rp! j X sortrq! rr! hjn rs! j X joinrt! ru! j j½ rv! jR X }}rw! rx! hj! ry! jR X {{rz! r{! j j½ r|! hxX array2r}! r~! hjn r! j X sortr! r! hjn r! j X joinr! r! j j½ r
! jR X }}r! r! hX
--DATA--
return array('array1' => array(4, 1), 'array2' => array('foo', 'bar'))
--EXPECT--
14
barfoo
--TEST--
"split" filter
--TEMPLATE--
r! r! jR X {{r! r! j j½ r! jñ X "one,two,three,four,five"r! r! hjn r! j X splitr! r! hjr r! j X ','r! r! hjv r! hjn r! j X joinr! r! hjr r! j X '-'r! r! hjv r! j j½ r! jR X }}r! r! hj! r ! jR X {{r¡! r¢! j j½ r£! hxX foor¤! r¥! hjn r¦! j X splitr§! r¨! hjr r©! j X ','rª! r«! hjv r¬! hjn r! j X joinr®! r¯! hjr r°! j X '-'r±! r²! hjv r³! j j½ r´! jR X }}rµ! r¶! hj! r·! jR X {{r¸! r¹! j j½ rº! hxX foor»! r¼! hjn r½! j X splitr¾! r¿! hjr rÀ! j X ','rÁ! rÂ! hj rÃ! j j½ rÄ! j jn rÅ! hjv rÆ! hjn rÇ! j X joinrÈ! rÉ! hjr rÊ! j X '-'rË! rÌ! hjv rÍ! j j½ rÎ! jR X }}rÏ! rÐ! hj! rÑ! jR X {{rÒ! rÓ! j j½ rÔ! hxX bazrÕ! rÖ! hjn r×! j X splitrØ! rÙ! hjr rÚ! j X ''rÛ! rÜ! hjv rÝ! hjn rÞ! j X joinrß! rà! hjr rá! j X '-'râ! rã! hjv rä! j j½ rå! jR X }}ræ! rç! hj! rè! jR X {{ré! rê! j j½ rë! hxX bazrì! rí! hjn rî! j X splitrï! rð! hjr rñ! j X ''rò! ró! hj rô! j j½ rõ! j j rö! hjv r÷! hjn rø! j X joinrù! rú! hjr rû! j X '-'rü! rý! hjv rþ! j j½ rÿ! jR X }}r " r" hj! r" jR X {{r" r" j j½ r" hxX foor" r" hjn r" j X splitr " r
" hjr r" j X ','r" r
" hj r" j j½ r" hjv r" j j r" hjv r" hjn r" j X joinr" r" hjr r" j X '-'r" r" hjv r" j j½ r" jR X }}r" r" hXä
--DATA--
return array('foo' => "one,two,three,four,five", 'baz' => '12345',)
--EXPECT--
one-two-three-four-five
one-two-three-four-five
one-two-three,four,five
1-2-3-4-5
12-34-5
one-two-three--TEST--
"trim" filter
--TEMPLATE--
r" r" jR X {{r" r " j j½ r!" jñ X " I like Twig. "r"" r#" hjn r$" j X trimr%" r&" j j½ r'" jR X }}r(" r)" hj! r*" jR X {{r+" r," j j½ r-" hxX textr." r/" hjn r0" j X trimr1" r2" j j½ r3" jR X }}r4" r5" hj! r6" jR X {{r7" r8" j j½ r9" jñ X " foo/"r:" r;" hjn r<" j X trimr=" r>" hjr r?" jñ X "/"r@" rA" hjv rB" j j½ rC" jR X }}rD" rE" hX4
--DATA--
return array('text' => " If you have some <strong>HTML</strong> it will be escaped. ")
--EXPECT--
I like Twig.
If you have some <strong>HTML</strong> it will be escaped.
foo
--TEST--
"url_encode" filter for PHP < 5.4 and HHVM
--CONDITION--
defined('PHP_QUERY_RFC3986')
--TEMPLATE--
rF" rG" jR X {{rH" rI" j j½ rJ" hj rK" hxX foorL" rM" hj± rN" j j½ rO" jñ X "bar"rP" rQ" hj rR" j j½ rS" hxX numberrT" rU" hj± rV" j j½ rW" j jn rX" hj rY" j j½ rZ" jñ X "spéßi%l"r[" r\" hj± r]" j j½ r^" jñ X "e%c0d@d"r_" r`" hj ra" j j½ rb" jñ X "spa ce"rc" rd" hj± re" j j½ rf" jñ X ""rg" rh" hj½ ri" hjn rj" j X
url_encoderk" rl" j j½ rm" jR X }}rn" ro" hj! rp" jR X {{rq" rr" j j½ rs" hj rt" hxX fooru" rv" hj± rw" j j½ rx" jñ X "bar"ry" rz" hj r{" j j½ r|" hxX numberr}" r~" hj± r" j j½ r" j jn r" hj r" j j½ r" jñ X "spéßi%l"r" r
" hj± r" j j½ r" jñ X "e%c0d@d"r" r" hj r" j j½ r" jñ X "spa ce"r" r" hj± r" j j½ r" jñ X ""r" r" hj½ r" hjn r" j X
url_encoder" r" hjn r" j X rawr" r" j j½ r" jR X }}r" r" hj! r" jR X {{r" r" j j½ r" hj r " hj½ r¡" hjn r¢" j X
url_encoder£" r¤" hjn r¥" j X defaultr¦" r§" hjr r¨" jñ X "default"r©" rª" hjv r«" j j½ r¬" jR X }}r" r®" hj! r¯" jR X {{r°" r±" j j½ r²" j X 'spéßi%le%c0d@dspa ce'r³" r´" hjn rµ" j X
url_encoder¶" r·" j j½ r¸" jR X }}r¹" rº" hX*
--DATA--
return array()
--EXPECT--
foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce=
foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce=
default
sp%C3%A9%C3%9Fi%25le%25c0d%40dspa%20ce
--TEST--
"url_encode" filter
--CONDITION--
defined('PHP_QUERY_RFC3986')
--TEMPLATE--
r»" r¼" jR X {{r½" r¾" j j½ r¿" hj rÀ" hxX foorÁ" rÂ" hj± rÃ" j j½ rÄ" jñ X "bar"rÅ" rÆ" hj rÇ" j j½ rÈ" hxX numberrÉ" rÊ" hj± rË" j j½ rÌ" j jn rÍ" hj rÎ" j j½ rÏ" jñ X "spéßi%l"rÐ" rÑ" hj± rÒ" j j½ rÓ" jñ X "e%c0d@d"rÔ" rÕ" hj rÖ" j j½ r×" jñ X "spa ce"rØ" rÙ" hj± rÚ" j j½ rÛ" jñ X ""rÜ" rÝ" hj½ rÞ" hjn rß" j X
url_encoderà" rá" j j½ râ" jR X }}rã" rä" hj! rå" jR X {{ræ" rç" j j½ rè" hj ré" hxX foorê" rë" hj± rì" j j½ rí" jñ X "bar"rî" rï" hj rð" j j½ rñ" hxX numberrò" ró" hj± rô" j j½ rõ" j jn rö" hj r÷" j j½ rø" jñ X "spéßi%l"rù" rú" hj± rû" j j½ rü" jñ X "e%c0d@d"rý" rþ" hj rÿ" j j½ r # jñ X "spa ce"r# r# hj± r# j j½ r# jñ X ""r# r# hj½ r# hjn r# j X
url_encoder # r
# hjn r# j X rawr# r
# j j½ r# jR X }}r# r# hj! r# jR X {{r# r# j j½ r# hj r# hj½ r# hjn r# j X
url_encoder# r# hjn r# j X defaultr# r# hjr r# jñ X "default"r# r# hjv r # j j½ r!# jR X }}r"# r## hj! r$# jR X {{r%# r&# j j½ r'# j X 'spéßi%le%c0d@dspa ce'r(# r)# hjn r*# j X
url_encoder+# r,# j j½ r-# jR X }}r.# r/# hX
--DATA--
return array()
--EXPECT--
foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce=
foo=bar&number=3&sp%C3%A9%C3%9Fi%25l=e%25c0d%40d&spa%20ce=
default
sp%C3%A9%C3%9Fi%25le%25c0d%40dspa%20ce
--TEST--
"attribute" function
--TEMPLATE--
r0# r1# jR X {{r2# r3# j j½ r4# hxX attributer5# r6# hjr r7# hxX objr8# r9# hj r:# j j½ r;# hxX methodr<# r=# hjv r># j j½ r?# jR X }}r@# rA# hj! rB# jR X {{rC# rD# j j½ rE# hxX attributerF# rG# hjr rH# hxX arrayrI# rJ# hj rK# j j½ rL# hxX itemrM# rN# hjv rO# j j½ rP# jR X }}rQ# rR# hj! rS# jR X {{rT# rU# j j½ rV# hxX attributerW# rX# hjr rY# hxX objrZ# r[# hj r\# j j½ r]# jñ X "bar"r^# r_# hj r`# j j½ ra# hj= rb# jñ X "a"rc# rd# hj re# j j½ rf# jñ X "b"rg# rh# hjA ri# hjv rj# j j½ rk# jR X }}rl# rm# hj! rn# jR X {{ro# rp# j j½ rq# hxX attributerr# rs# hjr rt# hxX objru# rv# hj rw# j j½ rx# jñ X "bar"ry# rz# hj r{# j j½ r|# hxX argumentsr}# r~# hjv r# j j½ r# jR X }}r# r# hj! r# jR X {{r# r
# j j½ r# hxX attributer# r# hjr r# hxX objr# r# hj r# j j½ r# hxX methodr# r# hjv r# j j½ r# jà X isr# r# j j½ r# j X definedr# r# j j½ r# hjÊ r# j j½ r# j X 'ok'r# r# j j½ r# hj± r# j j½ r# j X 'ko'r# r # j j½ r¡# jR X }}r¢# r£# hj! r¤# jR X {{r¥# r¦# j j½ r§# hxX attributer¨# r©# hjr rª# hxX objr«# r¬# hj r# j j½ r®# hxX nonmethodr¯# r°# hjv r±# j j½ r²# jà X isr³# r´# j j½ rµ# j X definedr¶# r·# j j½ r¸# hjÊ r¹# j j½ rº# j X 'ok'r»# r¼# j j½ r½# hj± r¾# j j½ r¿# j X 'ko'rÀ# rÁ# j j½ rÂ# jR X }}rÃ# rÄ# hXÿ
--DATA--
return array('obj' => new TwigTestFoo(), 'method' => 'foo', 'array' => array('foo' => 'bar'), 'item' => 'foo', 'nonmethod' => 'xxx', 'arguments' => array('a', 'b'))
--EXPECT--
foo
bar
bar_a-b
bar_a-b
ok
ko
--TEST--
"block" function
--TEMPLATE--
rÅ# rÆ# jR X {%rÇ# rÈ# j j½ rÉ# jà X extendsrÊ# rË# j j½ rÌ# j X 'base.twig'rÍ# rÎ# j j½ rÏ# jR X %}rÐ# rÑ# hj! rÒ# jR X {%rÓ# rÔ# j j½ rÕ# jà X blockrÖ# r×# j j½ rØ# hxX barrÙ# rÚ# j j½ rÛ# jR X %}rÜ# rÝ# hX BARrÞ# rß# jR X {%rà# rá# j j½ râ# jà X endblockrã# rä# j j½ rå# jR X %}ræ# rç# hX
--TEMPLATE(base.twig)--
rè# ré# jR X {%rê# rë# j j½ rì# jà X blockrí# rî# j j½ rï# hxX foorð# rñ# j j½ rò# jR X %}ró# rô# jR X {{rõ# rö# j j½ r÷# híX blockrø# rù# hjr rú# j X 'bar'rû# rü# hjv rý# j j½ rþ# jR X }}rÿ# r $ jR X {%r$ r$ j j½ r$ jà X endblockr$ r$ j j½ r$ jR X %}r$ r$ hj! r $ jR X {%r
$ r$ j j½ r$ jà X blockr
$ r$ j j½ r$ hxX barr$ r$ j j½ r$ jR X %}r$ r$ hX BAR_BASEr$ r$ jR X {%r$ r$ j j½ r$ jà X endblockr$ r$ j j½ r$ jR X %}r$ r$ hXU
--DATA--
return array()
--EXPECT--
BARBAR
--TEST--
"constant" function
--TEMPLATE--
r$ r $ jR X {{r!$ r"$ j j½ r#$ hxX constantr$$ r%$ hjr r&$ j X
'DATE_W3C'r'$ r($ hjv r)$ j j½ r*$ hX ==r+$ r,$ j j½ r-$ hxX expectr.$ r/$ j j½ r0$ hjÊ r1$ j j½ r2$ j X 'true'r3$ r4$ j j½ r5$ hj± r6$ j j½ r7$ j X 'false'r8$ r9$ j j½ r:$ jR X }}r;$ r<$ hj! r=$ jR X {{r>$ r?$ j j½ r@$ hxX constantrA$ rB$ hjr rC$ j X 'ARRAY_AS_PROPS'rD$ rE$ hj rF$ j j½ rG$ hxX objectrH$ rI$ hjv rJ$ j j½ rK$ jR X }}rL$ rM$ hX
--DATA--
return array('expect' => DATE_W3C, 'object' => new ArrayObject(array('hi')));
--EXPECT--
true
2
--TEST--
"cycle" function
--TEMPLATE--
rN$ rO$ jR X {%rP$ rQ$ j j½ rR$ jà X forrS$ rT$ j j½ rU$ hxjÜ rV$ j j½ rW$ jà X inrX$ rY$ j j½ rZ$ j X 0.r[$ r\$ j X .6r]$ r^$ j j½ r_$ jR X %}r`$ ra$ hj! rb$ jR X {{rc$ rd$ j j½ re$ hxX cyclerf$ rg$ hjr rh$ hxX array1ri$ rj$ hj rk$ j j½ rl$ hxjÜ rm$ hjv rn$ j j½ ro$ jR X }}rp$ rq$ hjv rr$ jR X {{rs$ rt$ j j½ ru$ hxX cyclerv$ rw$ hjr rx$ hxX array2ry$ rz$ hj r{$ j j½ r|$ hxjÜ r}$ hjv r~$ j j½ r$ jR X }}r$ r$ hj! r$ jR X {%r$ r$ j j½ r
$ jà X endforr$ r$ j j½ r$ jR X %}r$ r$ hXç
--DATA--
return array('array1' => array('odd', 'even'), 'array2' => array('apple', 'orange', 'citrus'))
--EXPECT--
odd-apple
even-orange
odd-citrus
even-apple
odd-orange
even-citrus
odd-apple
--TEST--
"date" function
--TEMPLATE--
r$ r$ jR X {{r$ r$ j j½ r$ hxX dater$ r$ hjr r$ hxX dater$ r$ hj r$ j j½ r$ jñ X "America/New_York"r$ r$ hjv r$ hjn r$ e(j X dater$ r$ hjr r$ j X 'd/m/Y H:i:s P'r$ r$ hj r $ j j½ r¡$ jû X falser¢$ r£$ hjv r¤$ j j½ r¥$ jR X }}r¦$ r§$ hj! r¨$ jR X {{r©$ rª$ j j½ r«$ hxX dater¬$ r$ hjr r®$ hxX timezoner¯$ r°$ hj2 r±$ jñ X "America/New_York"r²$ r³$ hj r´$ j j½ rµ$ hxX dater¶$ r·$ hj2 r¸$ hxX dater¹$ rº$ hjv r»$ hjn r¼$ j X dater½$ r¾$ hjr r¿$ j X 'd/m/Y H:i:s P'rÀ$ rÁ$ hj rÂ$ j j½ rÃ$ jû X falserÄ$ rÅ$ hjv rÆ$ j j½ rÇ$ jR X }}rÈ$ rÉ$ hXÊ
--DATA--
date_default_timezone_set('UTC');
return array('date' => mktime(13, 45, 0, 10, 4, 2010))
--EXPECT--
04/10/2010 09:45:00 -04:00
04/10/2010 09:45:00 -04:00
--TEST--
"date" function
--TEMPLATE--
rÊ$ rË$ jR X {{rÌ$ rÍ$ j j½ rÎ$ hxX daterÏ$ rÐ$ hjr rÑ$ hjv rÒ$ j j½ rÓ$ hX ==rÔ$ rÕ$ j j½ rÖ$ hxX dater×$ rØ$ hjr rÙ$ j X 'now'rÚ$ rÛ$ hjv rÜ$ j j½ rÝ$ hjÊ rÞ$ j j½ rß$ j X 'OK'rà$ rá$ j j½ râ$ hj± rã$ j j½ rä$ j X 'KO'rå$ ræ$ j j½ rç$ jR X }}rè$ ré$ hj! rê$ jR X {{rë$ rì$ j j½ rí$ hxX daterî$ rï$ hjr rð$ hxX date1rñ$ rò$ hjv ró$ j j½ rô$ hX ==rõ$ rö$ j j½ r÷$ hxX daterø$ rù$ hjr rú$ j X '2010-10-04 13:45'rû$ rü$ hjv rý$ j j½ rþ$ hjÊ rÿ$ j j½ r % j X 'OK'r% r% j j½ r% hj± r% j j½ r% j X 'KO'r% r% j j½ r% jR X }}r % r
% hj! r% jR X {{r% r
% j j½ r% hxX dater% r% hjr r% hxX date2r% r% hjv r% j j½ r% hX ==r% r% j j½ r% hxX dater% r% hjr r% j X '2010-10-04 13:45'r% r% hjv r% j j½ r% hjÊ r % j j½ r!% j X 'OK'r"% r#% j j½ r$% hj± r%% j j½ r&% j X 'KO'r'% r(% j j½ r)% jR X }}r*% r+% hj! r,% jR X {{r-% r.% j j½ r/% hxX dater0% r1% hjr r2% hxX date3r3% r4% hjv r5% j j½ r6% hX ==r7% r8% j j½ r9% hxX dater:% r;% hjr r<% j X '2010-10-04 13:45'r=% r>% hjv r?% j j½ r@% hjÊ rA% j j½ rB% j X 'OK'rC% rD% j j½ rE% hj± rF% j j½ rG% j X 'KO'rH% rI% j j½ rJ% jR X }}rK% rL% hj! rM% jR X {{rN% rO% j j½ rP% hxX daterQ% rR% hjr rS% hxX date4rT% rU% hjv rV% j j½ rW% hX ==rX% rY% j j½ rZ% hxX dater[% r\% hjr r]% j X '2010-10-04 13:45'r^% r_% hjv r`% j j½ ra% hjÊ rb% j j½ rc% j X 'OK'rd% re% j j½ rf% hj± rg% j j½ rh% j X 'KO'ri% rj% j j½ rk% jR X }}rl% rm% hj! rn% jR X {{ro% rp% j j½ rq% hxX daterr% rs% hjr rt% hxX date5ru% rv% hjv rw% j j½ rx% hX ==ry% rz% j j½ r{% hxX dater|% r}% hjr r~% j X '1964-01-02 03:04'r% r% hjv r% j j½ r% hjÊ r% j j½ r% j X 'OK'r
% r% j j½ r% hj± r% j j½ r% j X 'KO'r% r% j j½ r% jR X }}r% r% hXê
--DATA--
date_default_timezone_set('UTC');
return array(
'date1' => mktime(13, 45, 0, 10, 4, 2010),
'date2' => new DateTime('2010-10-04 13:45'),
'date3' => '2010-10-04 13:45',
'date4' => 1286199900, // DateTime::createFromFormat('Y-m-d H:i', '2010-10-04 13:45', new DateTimeZone('UTC'))->getTimestamp() -- A unixtimestamp is always GMT
'date5' => -189291360, // DateTime::createFromFormat('Y-m-d H:i', '1964-01-02 03:04', new DateTimeZone('UTC'))->getTimestamp(),
)
--EXPECT--
OK
OK
OK
OK
OK
OK
--TEST--
"dump" function, xdebug is not loaded or xdebug <2.2-dev is loaded
--CONDITION--
!extension_loaded('xdebug') || (($r = new ReflectionExtension('xdebug')) && version_compare($r->getVersion(), '2.2-dev', '<'))
--TEMPLATE--
r% r% jR X {{r% r% j j½ r% hxX dumpr% r% hjr r% hjv r% j j½ r% jR X }}r% r% hXÈ
--DATA--
return array('foo' => 'foo', 'bar' => 'bar')
--CONFIG--
return array('debug' => true, 'autoescape' => false);
--TEST--
"dump" function
--CONDITION--
!extension_loaded('xdebug')
--TEMPLATE--
r% r% jR X {{r% r% j j½ r% hxX dumpr % r¡% hjr r¢% j X 'foo'r£% r¤% hjv r¥% j j½ r¦% jR X }}r§% r¨% hj! r©% jR X {{rª% r«% j j½ r¬% hxX dumpr% r®% hjr r¯% j X 'foo'r°% r±% hj r²% j j½ r³% j X 'bar'r´% rµ% hjv r¶% j j½ r·% jR X }}r¸% r¹% hXÛ
--DATA--
return array('foo' => 'foo', 'bar' => 'bar')
--CONFIG--
return array('debug' => true, 'autoescape' => false);
--EXPECT--
string(3) "foo"
string(3) "foo"
string(3) "bar"
--TEST--
dynamic function
--TEMPLATE--
rº% r»% jR X {{r¼% r½% j j½ r¾% hxX foo_pathr¿% rÀ% hjr rÁ% j X 'bar'rÂ% rÃ% hjv rÄ% j j½ rÅ% jR X }}rÆ% rÇ% hj! rÈ% jR X {{rÉ% rÊ% j j½ rË% hxX a_foo_b_barrÌ% rÍ% hjr rÎ% j X 'bar'rÏ% rÐ% hjv rÑ% j j½ rÒ% jR X }}rÓ% rÔ% hX]
--DATA--
return array()
--EXPECT--
foo/bar
a/b/bar
--TEST--
"include" function
--TEMPLATE--
rÕ% rÖ% jR X {%r×% rØ% j j½ rÙ% jà X setrÚ% rÛ% j j½ rÜ% hxX tmprÝ% rÞ% j j½ rß% hj2 rà% j j½ rá% hxX includerâ% rã% hjr rä% jñ X
"foo.twig"rå% ræ% hjv rç% j j½ rè% jR X %}ré% rê% hX
FOOrë% rì% jR X {{rí% rî% j j½ rï% hxX tmprð% rñ% j j½ rò% jR X }}ró% rô% hX BAR
--TEMPLATE(foo.twig)--
FOOBAR
--DATA--
return array()
--EXPECT--
FOO
FOOBARBAR
--TEST--
"include" function is safe for auto-escaping
--TEMPLATE--
rõ% rö% jR X {{r÷% rø% j j½ rù% hxX includerú% rû% hjr rü% jñ X
"foo.twig"rý% rþ% hjv rÿ% j j½ r &