33 * Smarty PHPunit tests assignByRef method
44 */
55
6+ use Smarty \Data ;
7+
68/**
79 * Class for assignByRef tests
810 */
@@ -22,7 +24,7 @@ public function testInit()
2224 /**
2325 * Test assignByRef for nullable string property
2426 */
25- public function testAssignByRefForNullableStringProperry ()
27+ public function testAssignByRefForNullableStringProperty ()
2628 {
2729 $ this ->smarty ->assignByRef ('myVar ' , $ this ->testStr );
2830 $ this ->assertEquals (null , $ this ->smarty ->fetch ('eval:{$myVar} ' ));
@@ -67,4 +69,188 @@ public function testAssignByRefReturnsThis()
6769 $ this ->smarty ->assignByRef ('dummy ' , $ var )->fetch ('eval:{$dummy} ' )
6870 );
6971 }
72+
73+ /**
74+ * Test duplicate assignByRef
75+ */
76+ public function testDuplicateAssignByRef ()
77+ {
78+ $ var1 = array (
79+ 'a ' => 'A ' ,
80+ );
81+ $ var2 = array (
82+ 'z ' => 'Z ' ,
83+ );
84+ $ this ->smarty ->assignByRef ('myVar ' , $ var1 );
85+ $ this ->smarty ->assignByRef ('myVar ' , $ var2 );
86+ $ this ->assertEquals ('{"z":"Z"} ' , $ this ->smarty ->fetch ('eval:{$myVar|json_encode} ' ));
87+ $ var1 ['b ' ] = 'B ' ;
88+ $ var2 ['y ' ] = 'Y ' ;
89+ $ this ->assertEquals ('{"z":"Z","y":"Y"} ' , $ this ->smarty ->fetch ('eval:{$myVar|json_encode} ' ));
90+ }
91+
92+ /**
93+ * Test assignByRef for parent scope
94+ */
95+ public function testAssignByRefForParentScope ()
96+ {
97+ $ data1 = $ this ->smarty ->createData ($ this ->smarty );
98+ $ data2 = $ this ->smarty ->createData ($ data1 );
99+ $ var1 = array (
100+ 'a1 ' => 'A1 '
101+ );
102+ $ var2 = array (
103+ 'b1 ' => 'B1 '
104+ );
105+ $ var3 = array (
106+ 'c1 ' => 'C1 '
107+ );
108+ $ data1 ->assignByRef ('var1 ' , $ var1 );
109+ $ data2 ->assignByRef ('var2 ' , $ var2 , false , Data::SCOPE_PARENT );
110+ $ data2 ->assignByRef ('var3 ' , $ var3 );
111+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
112+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
113+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
114+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
115+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' ));
116+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' , false ));
117+
118+ $ var1 ['a2 ' ] = 'A2 ' ;
119+ $ var2 ['b2 ' ] = 'B2 ' ;
120+ $ var3 ['c2 ' ] = 'C2 ' ;
121+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
122+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
123+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
124+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
125+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' ));
126+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' , false ));
127+ }
128+
129+ /**
130+ * Test assignByRef for root scope
131+ */
132+ public function testAssignByRefForRootScope ()
133+ {
134+ $ data1 = $ this ->smarty ->createData ($ this ->smarty );
135+ $ data2 = $ this ->smarty ->createData ($ data1 );
136+ $ data3 = $ this ->smarty ->createData ($ data2 );
137+ $ var1 = array (
138+ 'a1 ' => 'A1 '
139+ );
140+ $ var2 = array (
141+ 'b1 ' => 'B1 '
142+ );
143+ $ var3 = array (
144+ 'c1 ' => 'C1 '
145+ );
146+ $ data1 ->assignByRef ('var1 ' , $ var1 );
147+ $ data2 ->assignByRef ('var2 ' , $ var2 , false , Data::SCOPE_PARENT );
148+ $ data3 ->assignByRef ('var3 ' , $ var3 , false , Data::SCOPE_ROOT );
149+ $ this ->assertEquals ($ var3 , $ data1 ->getTemplateVars ('var3 ' ));
150+ $ this ->assertEquals ($ var3 , $ data1 ->getTemplateVars ('var3 ' , false ));
151+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
152+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
153+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
154+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
155+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' ));
156+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var3 ' , false ));
157+
158+ $ var1 ['a2 ' ] = 'A2 ' ;
159+ $ var2 ['b2 ' ] = 'B2 ' ;
160+ $ var3 ['c2 ' ] = 'C2 ' ;
161+ $ this ->assertEquals ($ var3 , $ data1 ->getTemplateVars ('var3 ' ));
162+ $ this ->assertEquals ($ var3 , $ data1 ->getTemplateVars ('var3 ' , false ));
163+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
164+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
165+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
166+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
167+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' ));
168+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var3 ' , false ));
169+ }
170+
171+ /**
172+ * Test assignByRef for TPL global scope
173+ */
174+ public function testAssignByRefForGlobalScope ()
175+ {
176+ $ data1 = $ this ->smarty ->createData ($ this ->smarty );
177+ $ data2 = $ this ->smarty ->createData ($ data1 );
178+ $ data3 = $ this ->smarty ->createData ($ data2 );
179+ $ var1 = array (
180+ 'a1 ' => 'A1 '
181+ );
182+ $ var2 = array (
183+ 'b1 ' => 'B1 '
184+ );
185+ $ var3 = array (
186+ 'c1 ' => 'C1 '
187+ );
188+ $ data1 ->assignByRef ('var1 ' , $ var1 );
189+ $ data2 ->assignByRef ('var2 ' , $ var2 , false , Data::SCOPE_PARENT );
190+ $ data3 ->assignByRef ('var3 ' , $ var3 , false , Data::SCOPE_GLOBAL );
191+ $ this ->assertEquals ($ var3 , $ this ->smarty ->getTemplateVars ('var3 ' ));
192+ $ this ->assertEquals ($ var3 , $ this ->smarty ->getTemplateVars ('var3 ' , false ));
193+ $ this ->assertEquals ($ var3 , $ data1 ->getTemplateVars ('var3 ' ));
194+ $ this ->assertEquals (null , $ data1 ->getTemplateVars ('var3 ' , false ));
195+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
196+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
197+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
198+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
199+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' ));
200+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var3 ' , false ));
201+
202+ $ var1 ['a2 ' ] = 'A2 ' ;
203+ $ var2 ['b2 ' ] = 'B2 ' ;
204+ $ var3 ['c2 ' ] = 'C2 ' ;
205+ $ this ->assertEquals ($ var3 , $ this ->smarty ->getTemplateVars ('var3 ' ));
206+ $ this ->assertEquals ($ var3 , $ this ->smarty ->getTemplateVars ('var3 ' , false ));
207+ $ this ->assertEquals ($ var3 , $ data1 ->getTemplateVars ('var3 ' ));
208+ $ this ->assertEquals (null , $ data1 ->getTemplateVars ('var3 ' , false ));
209+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
210+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
211+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
212+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
213+ $ this ->assertEquals ($ var3 , $ data2 ->getTemplateVars ('var3 ' ));
214+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var3 ' , false ));
215+ }
216+
217+ /**
218+ * Test assignByRef for TPL root scope
219+ */
220+ public function testAssignByRefForTplRootScope ()
221+ {
222+ $ data1 = $ this ->smarty ->createData ($ this ->smarty );
223+ $ tpl1 = $ this ->smarty ->createTemplate ('eval:{$var2|json_encode} ' , $ data1 );
224+ $ tpl2 = $ this ->smarty ->createTemplate ('eval:{$var2|json_encode} ' , $ tpl1 );
225+ $ data2 = $ tpl2 ->createData ($ tpl2 );
226+ $ var1 = array (
227+ 'a1 ' => 'A1 '
228+ );
229+ $ var2 = array (
230+ 'b1 ' => 'B1 '
231+ );
232+ $ var3 = array (
233+ 'c1 ' => 'C1 '
234+ );
235+ $ data1 ->assignByRef ('var1 ' , $ var1 );
236+ $ data2 ->assignByRef ('var2 ' , $ var2 , false , Data::SCOPE_TPL_ROOT );
237+ $ this ->assertEquals ('{"b1":"B1"} ' , $ tpl1 ->fetch ());
238+ $ this ->assertEquals ($ var2 , $ tpl1 ->getTemplateVars ('var2 ' ));
239+ $ this ->assertEquals ($ var2 , $ tpl1 ->getTemplateVars ('var2 ' , false ));
240+ $ this ->assertEquals (null , $ data1 ->getTemplateVars ('var2 ' ));
241+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
242+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
243+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
244+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
245+
246+ $ var1 ['a2 ' ] = 'A2 ' ;
247+ $ var2 ['b2 ' ] = 'B2 ' ;
248+ $ this ->assertEquals ($ var2 , $ tpl1 ->getTemplateVars ('var2 ' ));
249+ $ this ->assertEquals ($ var2 , $ tpl1 ->getTemplateVars ('var2 ' , false ));
250+ $ this ->assertEquals (null , $ data1 ->getTemplateVars ('var2 ' ));
251+ $ this ->assertEquals ($ var1 , $ data2 ->getTemplateVars ('var1 ' ));
252+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var1 ' , false ));
253+ $ this ->assertEquals ($ var2 , $ data2 ->getTemplateVars ('var2 ' ));
254+ $ this ->assertEquals (null , $ data2 ->getTemplateVars ('var2 ' , false ));
255+ }
70256}
0 commit comments