Core  3.2
PHP API documentation
 All Data Structures Namespaces Files Functions Variables Pages
PU_test_dcp_parsefunction.php
Go to the documentation of this file.
1 <?php
2 /*
3  * @author Anakeen
4  * @package Dcp\Pu
5 */
6 
7 namespace Dcp\Pu;
8 
9 require_once 'PU_testcase_dcp.php';
10 
12 {
13  /**
14  * @dataProvider dataGoodStruct
15  */
16  public function testParseFunctionCall($callName, $expectedStructs)
17  {
18  $err = '';
19 
20  $oParse = new \parseFamilyFunction();
21  $struct = $oParse->parse($callName);
22  $err = $struct->getError();
23 
24  $this->assertEmpty($err, sprintf("function struct error detected : %s, %s", $err, print_r($struct, true)));
25  foreach ($expectedStructs as $key => $expectedValue) {
26  if (is_array($expectedValue)) {
27  $values = $struct->$key;
28  foreach ($expectedValue as $kv => $singleValue) {
29  if (is_array($singleValue)) {
30  foreach ($singleValue as $k => $v) {
31  $this->assertEquals($v, $values[$kv]->$k, sprintf("test struct %s/%s [%s]", $key, $k . "[$kv]", print_r($values, true)));
32  }
33  } else {
34  $this->assertEquals($singleValue, $values[$kv], sprintf("testout struct %s/%s ", $key . "[$kv]", print_r($struct, true)));
35  }
36  }
37  } else {
38  $this->assertEquals($expectedValue, $struct->$key);
39  }
40  //$this->assertContains($expectedError, $err, sprintf("not the correct error reporting : %s", $err));
41 
42  }
43  }
44  /**
45  * test struct errors
46  * @dataProvider databadStruct
47  */
48  public function testParseFunctionCallErrors($callName, $expectedErrors)
49  {
50  $err = '';
51  $oParse = new \parseFamilyFunction();
52  $struct = $oParse->parse($callName);
53  $err = $struct->getError();
54 
55  $this->assertNotEmpty($err, "function struct no error detected");
56  foreach ($expectedErrors as $expectedError) {
57 
58  $this->assertContains($expectedError, $err, sprintf('not the correct error reporting : "%s" : %s', $err, print_r($struct, true)));
59  }
60  }
61 
62  public function dataGoodStruct()
63  {
64  return array(
65  // test simple function
66  array(
67  "good():OUT",
68  array(
69  "functionName" => "good",
70  "outputs" => array(
71  "OUT"
72  )
73  )
74  ) ,
75  // test simple function
76  array(
77  "good ():OUT",
78  array(
79  "functionName" => "good"
80  )
81  ) ,
82  // test simple function
83  array(
84  "good ():OUT1, OUT2",
85  array(
86  "functionName" => "good",
87  "outputs" => array(
88  "OUT1",
89  "OUT2"
90  )
91  )
92  ) ,
93  // test attr attribute arg
94  array(
95  "good(ONE):OUT",
96  array(
97  "functionName" => "good",
98  "inputs" => array(
99  array(
100  "name" => "ONE",
101  "type" => "any"
102  )
103  )
104  )
105  ) , // test attr attribute arg
106  array(
107  "good(ONE, CT):OUT",
108  array(
109  "functionName" => "good",
110  "inputs" => array(
111  array(
112  "name" => "ONE",
113  "type" => "any"
114  ) ,
115  array(
116  "name" => "CT",
117  "type" => "any"
118  )
119  )
120  )
121  ) , // test attr attribute arg
122  array(
123  "good(ONE, CT, 'CT'):OUT",
124  array(
125  "functionName" => "good",
126  "inputs" => array(
127  array(
128  "name" => "ONE",
129  "type" => "any"
130  ) ,
131  array(
132  "name" => "CT",
133  "type" => "any"
134  ) ,
135  array(
136  "name" => "CT",
137  "type" => "string"
138  )
139  )
140  )
141  ) ,
142  // test attr attribute arg
143  array(
144  'good( "ONE, TWO" ):OUT',
145  array(
146  "functionName" => "good",
147  "inputs" => array(
148  array(
149  "name" => "ONE, TWO",
150  "type" => "string"
151  )
152  )
153  )
154  ) ,
155  // test attr attribute arg
156  array(
157  'good( " ONE \'TWO\' " ):OUT',
158  array(
159  "functionName" => "good",
160  "inputs" => array(
161  array(
162  "name" => " ONE 'TWO' ",
163  "type" => "string"
164  )
165  )
166  )
167  ) ,
168  // test attr attribute arg
169  array(
170  "good( ONE ):OUT",
171  array(
172  "functionName" => "good",
173  "inputs" => array(
174  array(
175  "name" => "ONE",
176  "type" => "any"
177  )
178  )
179  )
180  ) ,
181  // test attr string arg
182  array(
183  'good("ONE"):OUT',
184  array(
185  "functionName" => "good",
186  "inputs" => array(
187  array(
188  "name" => "ONE",
189  "type" => "string"
190  )
191  )
192  )
193  ) ,
194  // test attr string arg
195  array(
196  'good( "ONE" ):OUT',
197  array(
198  "functionName" => "good",
199  "inputs" => array(
200  array(
201  "name" => "ONE",
202  "type" => "string"
203  )
204  )
205  )
206  ) ,
207  // test attr string arg
208  array(
209  'good("ONE\"TWO"):OUT',
210  array(
211  "functionName" => "good",
212  "inputs" => array(
213  array(
214  "name" => 'ONE"TWO',
215  "type" => "string"
216  )
217  )
218  )
219  ) ,
220  // test attr string arg
221  array(
222  'good("ONE","TWO"):OUT',
223  array(
224  "functionName" => "good",
225  "inputs" => array(
226  array(
227  "name" => 'ONE',
228  "type" => "string"
229  ) ,
230  array(
231  "name" => 'TWO',
232  "type" => "string"
233  )
234  )
235  )
236  ) ,
237  // test attr string arg
238  array(
239  "good('ONE'):OUT",
240  array(
241  "functionName" => "good",
242  "inputs" => array(
243  array(
244  "name" => "ONE",
245  "type" => "string"
246  )
247  )
248  )
249  ) ,
250  // test attr string arg
251  array(
252  "good('ONE,'TWO):OUT",
253  array(
254  "functionName" => "good",
255  "inputs" => array(
256  array(
257  "name" => 'ONE',
258  "type" => "string"
259  ) ,
260  array(
261  "name" => 'TWO',
262  "type" => "string"
263  )
264  )
265  )
266  ) ,
267  // test attr string arg
268  array(
269  "good('ONE','TWO'):OUT",
270  array(
271  "functionName" => "good",
272  "inputs" => array(
273  array(
274  "name" => 'ONE',
275  "type" => "string"
276  ) ,
277  array(
278  "name" => 'TWO',
279  "type" => "string"
280  )
281  )
282  )
283  ) ,
284  // test attr string arg
285  array(
286  "good('(ONE)',')TWO(:'):OUT",
287  array(
288  "functionName" => "good",
289  "inputs" => array(
290  array(
291  "name" => '(ONE)',
292  "type" => "string"
293  ) ,
294  array(
295  "name" => ')TWO(:',
296  "type" => "string"
297  )
298  )
299  )
300  ) ,
301  // test attr string arg
302  array(
303  "good('ONE', 'TWO'):OUT",
304  array(
305  "functionName" => "good",
306  "inputs" => array(
307  array(
308  "name" => 'ONE',
309  "type" => "string"
310  ) ,
311  array(
312  "name" => 'TWO',
313  "type" => "string"
314  )
315  )
316  )
317  ) ,
318  // test attr string arg
319  array(
320  "good('ONE'TWO):OUT",
321  array(
322  "functionName" => "good",
323  "inputs" => array(
324  array(
325  "name" => "ONE'TWO",
326  "type" => "string"
327  )
328  )
329  )
330  ) ,
331  // test attr string arg
332  array(
333  "good('ONE\\'TWO):OUT",
334  array(
335  "functionName" => "good",
336  "inputs" => array(
337  array(
338  "name" => "ONE'TWO",
339  "type" => "string"
340  )
341  )
342  )
343  ) , // test attr attribute arg
344  array(
345  "good( a simple text ):OUT",
346  array(
347  "functionName" => "good",
348  "inputs" => array(
349  array(
350  "name" => "a simple text",
351  "type" => "string"
352  )
353  )
354  )
355  ) ,
356  // test attr attribute arg
357  array(
358  "MY_APP:good(ONE):",
359  array(
360  "functionName" => "good",
361  "appName" => "MY_APP",
362  "inputs" => array(
363  array(
364  "name" => "ONE",
365  "type" => "any"
366  )
367  )
368  )
369  )
370  );
371  }
372 
373  public function databadStruct()
374  {
375  return array(
376  // test no parenthesis
377  array(
378  "test:out",
379  array(
380  "ATTR1201",
381  "test"
382  )
383  ) ,
384  // test invert parenthesis
385  array(
386  "test)(:out",
387  array(
388  "ATTR1201",
389  "test"
390  )
391  ) ,
392  // test space func name
393  array(
394  "test one():OUT",
395  array(
396  "ATTR1202",
397  "test one"
398  )
399  ) ,
400  // test space func name
401  array(
402  "testone() O:UT",
403  array(
404  "ATTR1201"
405  )
406  ) ,
407  // test double quote
408  array(
409  'test("ONE):OUT',
410  array(
411  "ATTR1204"
412  )
413  ) ,
414  // test double quote extra
415  array(
416  'test("ONE" a):OUT',
417  array(
418  "ATTR1204"
419  )
420  ) ,
421  // test without output
422  array(
423  'test("ONE")',
424  array(
425  "ATTR1206"
426  )
427  ) ,
428  // test simple function
429  array(
430  "good ():OUT 1",
431  array(
432  "ATTR1207"
433  )
434  ) ,
435  );
436  }
437 }
438 ?>
testParseFunctionCall($callName, $expectedStructs)
testParseFunctionCallErrors($callName, $expectedErrors)
if($file) if($subject==""&&$file) if($subject=="") $err
← centre documentaire © anakeen