OLD | NEW |
| (Empty) |
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
3 <html> | |
4 <!-- Copyright 2009 Google Inc. All rights reserved. --> | |
5 <head> | |
6 <title> SRPC Parameter Passing Test </title> | |
7 <META HTTP-EQUIV="Pragma" CONTENT="no-cache" /> | |
8 <META HTTP-EQUIV="Expires" CONTENT="-1" /> | |
9 <style type="text/css"> | |
10 td.notrun { background-color: skyblue } | |
11 td.pass { background-color: lime } | |
12 td.fail { background-color: red } | |
13 </style> | |
14 <script type="application/x-javascript"> | |
15 //<![CDATA[ | |
16 var SetTestResult = function(element_id, result) { | |
17 var element = document.getElementById(element_id); | |
18 element.className = result; | |
19 } | |
20 | |
21 // The NaCl module. | |
22 var server; | |
23 // The default socket address for the plugin. | |
24 var default_addr; | |
25 // The count of failing tests. Set from the queue length, and decremented | |
26 // whenever a test passes. | |
27 var failing_count; | |
28 | |
29 // The queue of small tests. | |
30 var testQueue = [ ]; | |
31 var appendTest = function(test_descr) { | |
32 testQueue[testQueue.length] = test_descr; | |
33 } | |
34 | |
35 var expectPass = function(element, has_return, fp) { | |
36 appendTest(new Array('pass', element, has_return, fp)); | |
37 } | |
38 | |
39 var expectFail = function(element, fp) { | |
40 appendTest(new Array('fail', element, fp)); | |
41 } | |
42 | |
43 // Tests passing scalar types. | |
44 var ScalarTypes = function() { | |
45 expectPass('bool_passret', | |
46 true, | |
47 function() { | |
48 if (!server.bool(true) && server.bool(false)) { | |
49 return true; | |
50 } | |
51 }); | |
52 expectFail('int_as_bool', | |
53 function() { | |
54 return server.bool(1); | |
55 }); | |
56 expectFail('array_as_bool', | |
57 function() { | |
58 return server.bool(new Array(10)); | |
59 }); | |
60 expectFail('handle_as_bool', | |
61 function() { | |
62 return server.bool(server.__defaultSocketAddress()); | |
63 }); | |
64 expectPass('double_passret', | |
65 true, | |
66 function() { | |
67 var dval = 3.1415; | |
68 if (server.double(dval) == -dval) { | |
69 return true; | |
70 } | |
71 }); | |
72 expectFail('bool_as_double', | |
73 function() { | |
74 return server.double(true); | |
75 }); | |
76 expectFail('array_as_double', | |
77 function() { | |
78 return server.double(new Array(10)); | |
79 }); | |
80 expectFail('handle_as_double', | |
81 function() { | |
82 return server.double(server.__defaultSocketAddress()); | |
83 }); | |
84 expectPass('int_passret', | |
85 true, | |
86 function() { | |
87 var ival = 12345; | |
88 if (server.int(ival) == -ival) { | |
89 return true; | |
90 } | |
91 }); | |
92 expectFail('bool_as_int', | |
93 function() { | |
94 return server.int(true); | |
95 }); | |
96 expectFail('array_as_int', | |
97 function() { | |
98 return server.int(new Array(10)); | |
99 }); | |
100 expectFail('handle_as_int', | |
101 function() { | |
102 return server.int(server.__defaultSocketAddress()); | |
103 }); | |
104 } | |
105 | |
106 // Tests passing array types. | |
107 var ArrayTypes = function() { | |
108 expectPass('chararr_passret', | |
109 true, | |
110 function() { | |
111 var carr = [ 72, 101, 108, 108, 111 ]; | |
112 var ret_arr = server.char_array(carr, 5); | |
113 if (ret_arr[0] == carr[4] && | |
114 ret_arr[1] == carr[3] && | |
115 ret_arr[2] == carr[2] && | |
116 ret_arr[3] == carr[1] && | |
117 ret_arr[4] == carr[0]) { | |
118 return true; | |
119 } | |
120 }); | |
121 expectFail('bool_as_char_array', | |
122 function() { | |
123 return server.char_array(true); | |
124 }); | |
125 expectFail('int_as_char_array', | |
126 function() { | |
127 return server.char_array(1); | |
128 }); | |
129 expectFail('double_as_char_array', | |
130 function() { | |
131 return server.char_array(1.0); | |
132 }); | |
133 expectFail('handle_as_char_array', | |
134 function() { | |
135 return server.char_array(server.__defaultSocketAddress()); | |
136 }); | |
137 expectPass('doublearr_passret', | |
138 true, | |
139 function() { | |
140 var darr = [ 3.1, 1.4, 4.1, 1.5, 5.9 ]; | |
141 var ret_arr = server.double_array(darr, 5); | |
142 if (ret_arr[0] == darr[4] && | |
143 ret_arr[1] == darr[3] && | |
144 ret_arr[2] == darr[2] && | |
145 ret_arr[3] == darr[1] && | |
146 ret_arr[4] == darr[0]) { | |
147 return true; | |
148 } | |
149 }); | |
150 expectFail('bool_as_double_array', | |
151 function() { | |
152 return server.double_array(true); | |
153 }); | |
154 expectFail('int_as_double_array', | |
155 function() { | |
156 return server.double_array(1); | |
157 }); | |
158 expectFail('double_as_double_array', | |
159 function() { | |
160 return server.double_array(1.0); | |
161 }); | |
162 expectFail('handle_as_double_array', | |
163 function() { | |
164 return server.double_array(server.__defaultSocketAddress()); | |
165 }); | |
166 expectPass('intarr_passret', | |
167 true, | |
168 function() { | |
169 var iarr = [ 1, 2, 3, 4, 5 ]; | |
170 var ret_arr = server.int_array(iarr, 5); | |
171 if (ret_arr[0] == iarr[4] && | |
172 ret_arr[1] == iarr[3] && | |
173 ret_arr[2] == iarr[2] && | |
174 ret_arr[3] == iarr[1] && | |
175 ret_arr[4] == iarr[0]) { | |
176 return true; | |
177 } | |
178 }); | |
179 expectFail('bool_as_int_array', | |
180 function() { | |
181 return server.int_array(true); | |
182 }); | |
183 expectFail('int_as_int_array', | |
184 function() { | |
185 return server.int_array(1); | |
186 }); | |
187 expectFail('double_as_int_array', | |
188 function() { | |
189 return server.int_array(1.0); | |
190 }); | |
191 expectFail('handle_as_int_array', | |
192 function() { | |
193 return server.int_array(server.__defaultSocketAddress()); | |
194 }); | |
195 } | |
196 | |
197 // Tests passing more complex or special-purpose types. | |
198 var SpecialTypes = function() { | |
199 expectPass('string_send', | |
200 true, | |
201 function() { | |
202 var str = 'one more test'; | |
203 var ret = server.string(str); | |
204 if (str.length == ret) { | |
205 return true; | |
206 } | |
207 }); | |
208 expectPass('string_return', | |
209 true, | |
210 function() { | |
211 var ret = server.stringret(0); | |
212 if ('string' == typeof(ret)) { | |
213 return true; | |
214 } | |
215 }); | |
216 expectFail('bool_as_string', | |
217 function() { | |
218 return server.string(true); | |
219 }); | |
220 expectFail('int_as_string', | |
221 function() { | |
222 return server.string(1); | |
223 }); | |
224 expectFail('double_as_string', | |
225 function() { | |
226 return server.string(1); | |
227 }); | |
228 expectFail('array_as_string', | |
229 function() { | |
230 var iarr = [ 1, 2, 3, 4, 5 ]; | |
231 return server.string(iarr); | |
232 }); | |
233 expectPass('handle_send', | |
234 false, | |
235 function() { | |
236 var hnd = server.__defaultSocketAddress(); | |
237 server.handle(hnd); | |
238 }); | |
239 expectPass('handle_return', | |
240 true, | |
241 function() { | |
242 var ret = server.handleret(); | |
243 if ('object' == typeof(ret)) { | |
244 return true; | |
245 } | |
246 }); | |
247 expectPass('invalid_handle_return', | |
248 true, | |
249 function() { | |
250 var ret = server.invalid_handle_ret(); | |
251 if ('object' == typeof(ret)) { | |
252 return true; | |
253 } | |
254 }); | |
255 expectPass('invalid_handle_send', | |
256 false, | |
257 function() { | |
258 var ret = server.invalid_handle_ret(); | |
259 if ('object' == typeof(ret)) { | |
260 server.invalid_handle(ret); | |
261 } | |
262 }); | |
263 expectFail('bool_as_handle', | |
264 function() { | |
265 return server.handle(true); | |
266 }); | |
267 expectFail('int_as_handle', | |
268 function() { | |
269 return server.handle(1); | |
270 }); | |
271 expectFail('double_as_handle', | |
272 function() { | |
273 return server.handle(1); | |
274 }); | |
275 expectFail('array_as_handle', | |
276 function() { | |
277 var iarr = [ 1, 2, 3, 4, 5 ]; | |
278 return server.handle(iarr); | |
279 }); | |
280 } | |
281 | |
282 // Functions to support running each of the tests. | |
283 var testExpectedPass = function(element, has_return, fp) { | |
284 var result = undefined; | |
285 try { | |
286 result = fp(); | |
287 if (has_return && (undefined == result)) { | |
288 SetTestResult(element, 'fail'); | |
289 } else { | |
290 SetTestResult(element, 'pass'); | |
291 --failing_count; | |
292 } | |
293 } catch (string) { | |
294 SetTestResult(element, 'fail'); | |
295 } | |
296 } | |
297 | |
298 var testExpectedFail = function(element, fp) { | |
299 var result = undefined; | |
300 try { | |
301 result = fp(); | |
302 SetTestResult(element, 'fail'); | |
303 } catch (string) { | |
304 if (undefined == result) { | |
305 SetTestResult(element, 'pass'); | |
306 --failing_count; | |
307 } else { | |
308 SetTestResult(element, 'fail'); | |
309 } | |
310 } | |
311 } | |
312 | |
313 var RunAllTests = function() { | |
314 var i; | |
315 var len = testQueue.length; | |
316 // All tests are considered failure until they have run successfully. | |
317 // This catches runs that end prematurely. | |
318 failing_count = len; | |
319 for (i = 0; i < len; ++i) { | |
320 var test_descr = testQueue[i]; | |
321 if ('pass' == test_descr[0]) { | |
322 testExpectedPass(test_descr[1], test_descr[2], test_descr[3]); | |
323 } else { | |
324 testExpectedFail(test_descr[1], test_descr[2]); | |
325 } | |
326 } | |
327 if (0 == failing_count) { | |
328 // Set the magic Selenium variable to signal success. | |
329 document.cookie = 'status=OK'; | |
330 } | |
331 } | |
332 | |
333 var EnqueueAndRunTests = function() { | |
334 // Setup -- abort entire test if this fails. | |
335 try { | |
336 // If these fail at the beginning, all the tests will abort. | |
337 // Otherwise more specific tests are done on them. | |
338 default_addr = server.__defaultSocketAddress(); | |
339 } catch (string) { | |
340 window.alert('Socket address test setup failed.'); | |
341 return; | |
342 } | |
343 // Enqueue the tests. | |
344 ScalarTypes(); | |
345 ArrayTypes(); | |
346 SpecialTypes(); | |
347 // Run them all. | |
348 RunAllTests(); | |
349 } | |
350 //]]> | |
351 </script> | |
352 </head> | |
353 <body onload="nacllib.waitForModulesAndRunTests();" | |
354 onunload="nacllib.cleanUp();" > | |
355 <h1> SRPC Parameter Passing Test </h1> | |
356 <table cellspacing=5 cellpadding=5 border=5 summary="Test status table"> | |
357 <tr> | |
358 <td> | |
359 </td> | |
360 <td> | |
361 <b> Scalar types </b> | |
362 </td> | |
363 <td> | |
364 <b> Array types </b> | |
365 </td> | |
366 <td> | |
367 <b> Special types </b> | |
368 </td> | |
369 </tr> | |
370 <tr> | |
371 <td> | |
372 <b> Boolean </b> | |
373 </td> | |
374 <td valign=top> | |
375 <table summary="Boolean test status"> | |
376 <tr> | |
377 <td id="bool_passret" class="notrun"> | |
378 pass/return | |
379 </td> | |
380 </tr> | |
381 <tr> | |
382 <td id="int_as_bool" class="notrun"> | |
383 int as bool | |
384 </td> | |
385 </tr> | |
386 <tr> | |
387 <td id="array_as_bool" class="notrun"> | |
388 array as bool | |
389 </td> | |
390 </tr> | |
391 <tr> | |
392 <td id="handle_as_bool" class="notrun"> | |
393 handle as bool | |
394 </td> | |
395 </tr> | |
396 </table> | |
397 </td> | |
398 <td valign=top> | |
399 </td> | |
400 <td valign=top> | |
401 </td> | |
402 </tr> | |
403 <tr> | |
404 <td> | |
405 <b> Character (1-byte) </b> | |
406 </td> | |
407 <td valign=top> | |
408 </td> | |
409 <td valign=top> | |
410 <table summary="Character test status"> | |
411 <tr> | |
412 <td id="chararr_passret" class="notrun"> | |
413 pass/return | |
414 </td> | |
415 </tr> | |
416 <tr> | |
417 <td id="bool_as_char_array" class="notrun"> | |
418 bool as char array | |
419 </td> | |
420 </tr> | |
421 <tr> | |
422 <td id="int_as_char_array" class="notrun"> | |
423 int as char array | |
424 </td> | |
425 </tr> | |
426 <tr> | |
427 <td id="double_as_char_array" class="notrun"> | |
428 double as char array | |
429 </td> | |
430 </tr> | |
431 <tr> | |
432 <td id="handle_as_char_array" class="notrun"> | |
433 handle as char array | |
434 </td> | |
435 </tr> | |
436 </table> | |
437 </td> | |
438 <td> | |
439 </td> | |
440 </tr> | |
441 <tr> | |
442 <td> | |
443 <b> Double (8-byte fp) </b> | |
444 </td> | |
445 <td valign=top> | |
446 <table summary="Double test status"> | |
447 <tr> | |
448 <td id="double_passret" class="notrun"> | |
449 pass/return | |
450 </td> | |
451 </tr> | |
452 <tr> | |
453 <td id="bool_as_double" class="notrun"> | |
454 bool as double | |
455 </td> | |
456 </tr> | |
457 <tr> | |
458 <td id="array_as_double" class="notrun"> | |
459 array as double | |
460 </td> | |
461 </tr> | |
462 <tr> | |
463 <td id="handle_as_double" class="notrun"> | |
464 handle as double | |
465 </td> | |
466 </tr> | |
467 </table> | |
468 </td> | |
469 <td valign=top> | |
470 <table summary="Double array test status"> | |
471 <tr> | |
472 <td id="doublearr_passret" class="notrun"> | |
473 pass/return | |
474 </td> | |
475 </tr> | |
476 <tr> | |
477 <td id="bool_as_double_array" class="notrun"> | |
478 bool as double array | |
479 </td> | |
480 </tr> | |
481 <tr> | |
482 <td id="int_as_double_array" class="notrun"> | |
483 int as double array | |
484 </td> | |
485 </tr> | |
486 <tr> | |
487 <td id="double_as_double_array" class="notrun"> | |
488 double as double array | |
489 </td> | |
490 </tr> | |
491 <tr> | |
492 <td id="handle_as_double_array" class="notrun"> | |
493 handle as double array | |
494 </td> | |
495 </tr> | |
496 </table> | |
497 </td> | |
498 <td> | |
499 </td> | |
500 </tr> | |
501 <tr> | |
502 <td> | |
503 <b> Integer (4-byte) </b> | |
504 </td> | |
505 <td valign=top> | |
506 <table summary="Integer test status"> | |
507 <tr> | |
508 <td id="int_passret" class="notrun"> | |
509 pass/return | |
510 </td> | |
511 </tr> | |
512 <tr> | |
513 <td id="bool_as_int" class="notrun"> | |
514 bool as int | |
515 </td> | |
516 </tr> | |
517 <tr> | |
518 <td id="array_as_int" class="notrun"> | |
519 array as int | |
520 </td> | |
521 </tr> | |
522 <tr> | |
523 <td id="handle_as_int" class="notrun"> | |
524 handle as int | |
525 </td> | |
526 </tr> | |
527 </table> | |
528 </td> | |
529 <td valign=top> | |
530 <table summary="Integer array test status"> | |
531 <tr> | |
532 <td id="intarr_passret" class="notrun"> | |
533 pass/return | |
534 </td> | |
535 </tr> | |
536 <tr> | |
537 <td id="bool_as_int_array" class="notrun"> | |
538 bool as int array | |
539 </td> | |
540 </tr> | |
541 <tr> | |
542 <td id="int_as_int_array" class="notrun"> | |
543 int as int array | |
544 </td> | |
545 </tr> | |
546 <tr> | |
547 <td id="double_as_int_array" class="notrun"> | |
548 double as int array | |
549 </td> | |
550 </tr> | |
551 <tr> | |
552 <td id="handle_as_int_array" class="notrun"> | |
553 handle as int array | |
554 </td> | |
555 </tr> | |
556 </table> | |
557 </td> | |
558 <td valign=top> | |
559 </td> | |
560 </tr> | |
561 <tr> | |
562 <td> | |
563 <b> Strings (NUL-terminated) </b> | |
564 </td> | |
565 <td valign=top> | |
566 </td> | |
567 <td valign=top> | |
568 </td> | |
569 <td valign=top> | |
570 <table summary="String tests status"> | |
571 <tr> | |
572 <td id="string_send" class="notrun"> | |
573 send to NaCl | |
574 </td> | |
575 </tr> | |
576 <tr> | |
577 <td id="bool_as_string" class="notrun"> | |
578 bool as string | |
579 </td> | |
580 </tr> | |
581 <tr> | |
582 <td id="int_as_string" class="notrun"> | |
583 int as string | |
584 </td> | |
585 </tr> | |
586 <tr> | |
587 <td id="double_as_string" class="notrun"> | |
588 double as string | |
589 </td> | |
590 </tr> | |
591 <tr> | |
592 <td id="array_as_string" class="notrun"> | |
593 array as string | |
594 </td> | |
595 </tr> | |
596 <tr> | |
597 <td id="string_return" class="notrun"> | |
598 return from NaCl | |
599 </td> | |
600 </tr> | |
601 </table> | |
602 </td> | |
603 </tr> | |
604 <tr> | |
605 <td> | |
606 <b> Handle (descriptor) </b> | |
607 </td> | |
608 <td valign=top> | |
609 <table summary="Handle tests"> | |
610 </table> | |
611 </td> | |
612 <td valign=top> | |
613 <table summary="Handle tests"> | |
614 </table> | |
615 </td> | |
616 <td valign=top> | |
617 <table summary="Handle tests status"> | |
618 <tr> | |
619 <td id="handle_send" class="notrun"> | |
620 send to NaCl | |
621 </td> | |
622 </tr> | |
623 <tr> | |
624 <td id="bool_as_handle" class="notrun"> | |
625 bool as handle | |
626 </td> | |
627 </tr> | |
628 <tr> | |
629 <td id="int_as_handle" class="notrun"> | |
630 int as handle | |
631 </td> | |
632 </tr> | |
633 <tr> | |
634 <td id="double_as_handle" class="notrun"> | |
635 double as handle | |
636 </td> | |
637 </tr> | |
638 <tr> | |
639 <td id="array_as_handle" class="notrun"> | |
640 array as handle | |
641 </td> | |
642 </tr> | |
643 <tr> | |
644 <td id="handle_return" class="notrun"> | |
645 return from NaCl | |
646 </td> | |
647 </tr> | |
648 <tr> | |
649 <td id="invalid_handle_send" class="notrun"> | |
650 send invalid to NaCl | |
651 </td> | |
652 </tr> | |
653 <tr> | |
654 <td id="invalid_handle_return" class="notrun"> | |
655 return invalid from NaCl | |
656 </td> | |
657 </tr> | |
658 </table> | |
659 </td> | |
660 </tr> | |
661 </table> | |
662 | |
663 <table summary="The color codes used for identifying test outcomes"> | |
664 <tr> <td align="center"> <em> Legend </em> </td> </tr> | |
665 <tr> <td align="center" class="notrun"> Test not run </td> </tr> | |
666 <tr> <td align="center" class="pass"> Test passed </td> </tr> | |
667 <tr> <td align="center" class="fail"> Test failed </td> </tr> | |
668 </table> | |
669 <p> | |
670 <b> | |
671 NOTE: Some versions of some WebKit-based browsers do not correctly report | |
672 JavaScript exceptions raised by NPAPI plugins. This can cause some of | |
673 the above tests to spuriously report failure. | |
674 </b> | |
675 </p> | |
676 | |
677 <div id=status>NO-STATUS</div> | |
678 | |
679 <embed type="application/x-nacl" id="nacl_server" name="nacl_module" | |
680 width="0" height="0" src="srpc_test.nexe" /> | |
681 | |
682 <script type="text/javascript" src="nacl_js_lib.js"></script> | |
683 <script type="text/javascript"> | |
684 //<![CDATA[ | |
685 var nacllib = new NaclLib("nacl_module", "status", 500); | |
686 | |
687 nacllib.test = function() { | |
688 server = document.getElementById("nacl_server"); | |
689 EnqueueAndRunTests(); | |
690 if (0 == testQueue.length) { | |
691 return "No tests run."; | |
692 } else if (0 != failing_count) { | |
693 return "Tests failed."; | |
694 } else { | |
695 return ""; | |
696 } | |
697 } | |
698 //]]> | |
699 </script> | |
700 </body> | |
701 </html> | |
OLD | NEW |