Skip to content

Commit 69b5477

Browse files
committed
Add more tests
1 parent 8526a15 commit 69b5477

File tree

1 file changed

+187
-1
lines changed

1 file changed

+187
-1
lines changed

tests/UnitTests/SmartyMethodsTests/AssignByRef/AssignByRefTest.php

Lines changed: 187 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
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

Comments
 (0)