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 Shared Memory API 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. Used to produce handles and for __shmFactory invocations. | |
22 var server; | |
23 // All shared memory regions will have this size. | |
24 var shm_size = 65536; | |
25 // Handle to a shared memory object returned by a NaCl module | |
26 var nacl_shm_handle; | |
27 // Shared memory object resulting from mapping a handle from a NaCl module. | |
28 var nacl_shm; | |
29 // A mapped shared memory object created by the __shmFactory method. | |
30 var factory_shm; | |
31 // The epitome of a test string. | |
32 var test_str = 'Hello, world.'; | |
33 // The test string's length. | |
34 var str_len = test_str.length; | |
35 // The count of failing tests. Set from the queue length, and decremented | |
36 // whenever a test passes. | |
37 var failing_count; | |
38 | |
39 // The queue of small tests. | |
40 var testQueue = [ ]; | |
41 var appendTest = function(test_descr) { | |
42 testQueue[testQueue.length] = test_descr; | |
43 } | |
44 | |
45 var expectPass = function(element, has_return, fp) { | |
46 appendTest(new Array('pass', element, has_return, fp)); | |
47 } | |
48 | |
49 var expectFail = function(element, fp) { | |
50 appendTest(new Array('fail', element, fp)); | |
51 } | |
52 | |
53 var SharedMemoryFactory = function() { | |
54 // Test the creation of shared memory objects. | |
55 // Attempt to create with the wrong number of parameters. | |
56 expectFail('factory_too_few', | |
57 function() { | |
58 return server.__shmFactory(); | |
59 }); | |
60 expectFail('factory_too_many', | |
61 function() { | |
62 return server.__shmFactory(shm_size, 'extra'); | |
63 }); | |
64 // Attempt to create a shared memory region with size of invalid type. | |
65 expectFail('factory_size_null', | |
66 function() { | |
67 return server.__shmFactory(undefined); | |
68 }); | |
69 expectFail('factory_size_string', | |
70 function() { | |
71 return server.__shmFactory('string'); | |
72 }); | |
73 expectFail('factory_size_object', | |
74 function() { | |
75 return server.__shmFactory(new Array(10)); | |
76 }); | |
77 // Attempt to create a shared memory region with an invalid size. | |
78 expectFail('factory_size_invalid', | |
79 function() { | |
80 return server.__shmFactory(-1); | |
81 }); | |
82 // Attempt to create a shared memory region with a valid size. | |
83 expectPass('factory_conforming', | |
84 true, | |
85 function() { | |
86 return server.__shmFactory(shm_size); | |
87 }); | |
88 } | |
89 | |
90 var SharedMemoryMaps = function() { | |
91 // Test the map method of a handle object. | |
92 // Get a handle to an invalid shared memory object from a NaCl module. | |
93 expectPass('map_invalid', | |
94 true, | |
95 function() { | |
96 return server.get_invalid_handle(); | |
97 }); | |
98 // Attempt to map with the wrong number of parameters. | |
99 expectFail('map_too_many', | |
100 function() { | |
101 nacl_shm_handle.map(1); | |
102 }); | |
103 // Attempt to map with the correct number of parameters. | |
104 expectPass('map_valid', | |
105 true, | |
106 function() { | |
107 return nacl_shm_handle.map(); | |
108 }); | |
109 // Attempt to write to a negative offset. | |
110 expectFail('map_offset_neg', | |
111 function() { | |
112 nacl_shm.write(-1, str_len, test_str); | |
113 }); | |
114 // Attempt to write to an offset larger than the region size. | |
115 expectFail('map_offset_big', | |
116 function() { | |
117 nacl_shm.write(shm_size, str_len, test_str); | |
118 }); | |
119 // Attempt to write with a negative length. | |
120 expectFail('map_length_neg', | |
121 function() { | |
122 nacl_shm.write(0, -1, test_str); | |
123 }); | |
124 // Attempt to write with a length larger than the region size. | |
125 expectFail('map_length_big', | |
126 function() { | |
127 nacl_shm.write(0, str_len + 1, test_str); | |
128 }); | |
129 // Attempt to write to a valid offset. | |
130 expectPass('map_conforming', false, | |
131 function() { | |
132 nacl_shm.write(0, str_len, test_str); | |
133 }); | |
134 } | |
135 | |
136 var SharedMemoryWrites = function() { | |
137 // Test the write method. | |
138 // Attempt to write with the wrong number of parameters. | |
139 expectFail('write_too_few', | |
140 function() { | |
141 factory_shm.write(0, str_len); | |
142 }); | |
143 expectFail('write_too_many', | |
144 function() { | |
145 factory_shm.write(0, str_len, test_str, 'extra'); | |
146 }); | |
147 // Attempt to write with a badly typed offset parameter. | |
148 expectFail('write_offset_null', | |
149 function() { | |
150 factory_shm.write(undefined, str_len, test_str); | |
151 }); | |
152 expectFail('write_offset_string', | |
153 function() { | |
154 factory_shm.write('string', str_len, test_str); | |
155 }); | |
156 expectFail('write_offset_object', | |
157 function() { | |
158 factory_shm.write(new Array(10), str_len, test_str); | |
159 }); | |
160 // Attempt to write to a negative offset. | |
161 expectFail('write_offset_neg', | |
162 function() { | |
163 factory_shm.write(-1, str_len, test_str); | |
164 }); | |
165 // Attempt to write to an offset larger than the region size. | |
166 expectFail('write_offset_big', | |
167 function() { | |
168 factory_shm.write(shm_size + 1, str_len, test_str); | |
169 }); | |
170 // Attempt to write with a badly typed length parameter. | |
171 expectFail('write_length_null', | |
172 function() { | |
173 factory_shm.write(0, undefined, test_str); | |
174 }); | |
175 expectFail('write_length_string', | |
176 function() { | |
177 factory_shm.write(0, 'string', test_str); | |
178 }); | |
179 expectFail('write_length_object', | |
180 function() { | |
181 factory_shm.write(0, new Array(10), test_str); | |
182 }); | |
183 // Attempt to write with a negative length. | |
184 expectFail('write_length_neg', | |
185 function() { | |
186 factory_shm.write(0, -1, test_str); | |
187 }); | |
188 // Attempt to write with a length larger than the region size. | |
189 expectFail('write_length_big', | |
190 function() { | |
191 factory_shm.write(0, shm_size + 1, test_str); | |
192 }); | |
193 // Attempt to write with a badly typed string parameter. | |
194 expectFail('write_string_null', | |
195 function() { | |
196 factory_shm.write(0, str_len, undefined); | |
197 }); | |
198 expectFail('write_string_integer', | |
199 function() { | |
200 factory_shm.write(0, str_len, 10); | |
201 }); | |
202 expectFail('write_string_object', | |
203 function() { | |
204 factory_shm.write(0, str_len, new Array(10)); | |
205 }); | |
206 // Attempt to write overlapping the end of the region. | |
207 expectFail('write_overlap', | |
208 function() { | |
209 factory_shm.write(shm_size - str_len + 1, str_len, test_str); | |
210 }); | |
211 // Attempt to write with string.length != length. | |
212 expectFail('write_length_mismatch', | |
213 function() { | |
214 factory_shm.write(0, str_len + 1, test_str); | |
215 }); | |
216 // Attempt a valid write. This should pass. | |
217 expectPass('write_conforming', | |
218 false, | |
219 function() { | |
220 factory_shm.write(0, str_len, test_str); | |
221 }); | |
222 } | |
223 | |
224 var SharedMemoryReads = function() { | |
225 // Test the read method. | |
226 // Attempt to read with the wrong number of parameters. | |
227 expectFail('read_too_few', | |
228 function() { | |
229 return factory_shm.read(0); | |
230 }); | |
231 expectFail('read_too_many', | |
232 function() { | |
233 return factory_shm.read(0, str_len, 'extra'); | |
234 }); | |
235 // Attempt to read with a badly typed offset parameter. | |
236 expectFail('read_offset_null', | |
237 function() { | |
238 return factory_shm.read(undefined, str_len); | |
239 }); | |
240 expectFail('read_offset_string', | |
241 function() { | |
242 return factory_shm.read('string', str_len); | |
243 }); | |
244 expectFail('read_offset_object', | |
245 function() { | |
246 return factory_shm.read(new Array(10), str_len); | |
247 }); | |
248 // Attempt to read from a negative offset. | |
249 expectFail('read_offset_neg', | |
250 function() { | |
251 return factory_shm.read(-1, str_len); | |
252 }); | |
253 // Attempt to read from an offset larger than the region size. | |
254 expectFail('read_offset_big', | |
255 function() { | |
256 return factory_shm.read(shm_size + 1, str_len); | |
257 }); | |
258 // Attempt to read with a badly typed length parameter. | |
259 expectFail('read_length_null', | |
260 function() { | |
261 return factory_shm.read(0, undefined); | |
262 }); | |
263 expectFail('read_length_string', | |
264 function() { | |
265 return factory_shm.read(0, 'string'); | |
266 }); | |
267 expectFail('read_length_object', | |
268 function() { | |
269 return factory_shm.read(0, new Array(10)); | |
270 }); | |
271 // Attempt to read with a negative length. | |
272 expectFail('read_length_neg', | |
273 function() { | |
274 return factory_shm.read(0, -1); | |
275 }); | |
276 // Attempt to read with a length larger than the region size. | |
277 expectFail('read_length_big', | |
278 function() { | |
279 return factory_shm.read(0, shm_size + 1); | |
280 }); | |
281 // Attempt to read overlapping the end of the region. | |
282 expectFail('read_overlap', | |
283 function() { | |
284 return factory_shm.read(shm_size - str_len + 1, str_len); | |
285 }); | |
286 // Attempt a valid read, and ensure return is correct. This should pass. | |
287 expectPass('read_conforming', | |
288 true, | |
289 function() { | |
290 return factory_shm.read(0, str_len); | |
291 }); | |
292 } | |
293 | |
294 // The test run functions. | |
295 var testExpectedPass = function(element, has_return, fp) { | |
296 var result = undefined; | |
297 try { | |
298 result = fp(); | |
299 if (has_return && (undefined == result)) { | |
300 SetTestResult(element, 'fail'); | |
301 } else { | |
302 SetTestResult(element, 'pass'); | |
303 --failing_count; | |
304 } | |
305 } catch (string) { | |
306 SetTestResult(element, 'fail'); | |
307 } | |
308 } | |
309 | |
310 var testExpectedFail = function(element, fp) { | |
311 var result = undefined; | |
312 try { | |
313 result = fp(); | |
314 SetTestResult(element, 'fail'); | |
315 } catch (string) { | |
316 if (undefined == result) { | |
317 SetTestResult(element, 'pass'); | |
318 --failing_count; | |
319 } else { | |
320 SetTestResult(element, 'fail'); | |
321 } | |
322 } | |
323 } | |
324 | |
325 var RunAllTests = function() { | |
326 var i; | |
327 var len = testQueue.length; | |
328 // All tests are considered failure until they have run successfully. | |
329 // This catches runs that end prematurely. | |
330 failing_count = len; | |
331 for (i = 0; i < len; ++i) { | |
332 var test_descr = testQueue[i]; | |
333 if ('pass' == test_descr[0]) { | |
334 testExpectedPass(test_descr[1], test_descr[2], test_descr[3]); | |
335 } else { | |
336 testExpectedFail(test_descr[1], test_descr[2]); | |
337 } | |
338 } | |
339 } | |
340 | |
341 var EnqueueAndRunTests = function() { | |
342 // Setup -- abort entire test if this fails. | |
343 try { | |
344 nacl_shm_handle = server.get_shm_handle(shm_size); | |
345 nacl_shm = server.get_shm_handle(shm_size).map(); | |
346 factory_shm = server.__shmFactory(shm_size); | |
347 } catch (string) { | |
348 window.alert('Memory Maps test setup failed.'); | |
349 return; | |
350 } | |
351 // Enqueue the tests. | |
352 SharedMemoryFactory(); | |
353 SharedMemoryMaps(); | |
354 SharedMemoryWrites(); | |
355 SharedMemoryReads(); | |
356 // Run them all. | |
357 RunAllTests(); | |
358 } | |
359 //]]> | |
360 </script> | |
361 </head> | |
362 <body onload="nacllib.waitForModulesAndRunTests();" | |
363 onunload="nacllib.cleanUp();" > | |
364 <h1> SRPC Shared Memory API Test </h1> | |
365 <table cellspacing=5 cellpadding=5 border=5 summary="Test status table"> | |
366 <tr> | |
367 <td> | |
368 </td> | |
369 <td> | |
370 <b> __shmFactory tests </b> | |
371 </td> | |
372 <td> | |
373 <b> handle mapping tests </b> | |
374 </td> | |
375 <td> | |
376 <b> write method tests </b> | |
377 </td> | |
378 <td> | |
379 <b> read method tests </b> | |
380 </td> | |
381 </tr> | |
382 <tr> | |
383 <td> | |
384 <b> Argument count tests </b> | |
385 </td> | |
386 <td valign=top> | |
387 <table summary="Factory arugments tests"> | |
388 <tr> | |
389 <td id="factory_too_few" class="notrun"> | |
390 argc: too few | |
391 </td> | |
392 </tr> | |
393 <tr> | |
394 <td id="factory_too_many" class="notrun"> | |
395 argc: too many | |
396 </td> | |
397 </tr> | |
398 </table> | |
399 </td> | |
400 <td> | |
401 <table summary="Map arguments test"> | |
402 <tr> | |
403 <td id="map_too_many" class="notrun"> | |
404 argc: too many | |
405 </td> | |
406 </tr> | |
407 </table> | |
408 </td> | |
409 <td> | |
410 <table summary="Write argument tests"> | |
411 <tr> | |
412 <td id="write_too_few" class="notrun"> | |
413 argc: too few | |
414 </td> | |
415 </tr> | |
416 <tr> | |
417 <td id="write_too_many" class="notrun"> | |
418 argc: too many | |
419 </td> | |
420 </tr> | |
421 </table> | |
422 </td> | |
423 <td> | |
424 <table summary="Read arguments tests"> | |
425 <tr> | |
426 <td id="read_too_few" class="notrun"> | |
427 argc: too few | |
428 </td> | |
429 </tr> | |
430 <tr> | |
431 <td id="read_too_many" class="notrun"> | |
432 argc: too many | |
433 </td> | |
434 </tr> | |
435 </table> | |
436 </td> | |
437 </tr> | |
438 <tr> | |
439 <td> | |
440 <b> Argument type tests </b> | |
441 </td> | |
442 <td valign=top> | |
443 <table summary="Factory size tests"> | |
444 <tr> | |
445 <td id="factory_size_null" class="notrun"> | |
446 arg[0]: (size) undefined | |
447 </td> | |
448 </tr> | |
449 <tr> | |
450 <td id="factory_size_string" class="notrun"> | |
451 arg[0]: (size) string | |
452 </td> | |
453 </tr> | |
454 <tr> | |
455 <td id="factory_size_object" class="notrun"> | |
456 arg[0]: (size) object | |
457 </td> | |
458 </tr> | |
459 </table> | |
460 </td> | |
461 <td valign=top> | |
462 </td> | |
463 <td valign=top> | |
464 <table summary="Write offset tests"> | |
465 <tr> | |
466 <td id="write_offset_null" class="notrun"> | |
467 arg[0]: (offset) undefined | |
468 </td> | |
469 </tr> | |
470 <tr> | |
471 <td id="write_offset_string" class="notrun"> | |
472 arg[0]: (offset) string | |
473 </td> | |
474 </tr> | |
475 <tr> | |
476 <td id="write_offset_object" class="notrun"> | |
477 arg[0]: (offset) object | |
478 </td> | |
479 </tr> | |
480 <tr> | |
481 <td id="write_length_null" class="notrun"> | |
482 arg[1]: (length) undefined | |
483 </td> | |
484 </tr> | |
485 <tr> | |
486 <td id="write_length_string" class="notrun"> | |
487 arg[1]: (length) string | |
488 </td> | |
489 </tr> | |
490 <tr> | |
491 <td id="write_length_object" class="notrun"> | |
492 arg[1]: (length) object | |
493 </td> | |
494 </tr> | |
495 <tr> | |
496 <td id="write_string_null" class="notrun"> | |
497 arg[2]: (string) undefined | |
498 </td> | |
499 </tr> | |
500 <tr> | |
501 <td id="write_string_integer" class="notrun"> | |
502 arg[2]: (string) integer | |
503 </td> | |
504 </tr> | |
505 <tr> | |
506 <td id="write_string_object" class="notrun"> | |
507 arg[2]: (string) object | |
508 </td> | |
509 </tr> | |
510 </table> | |
511 </td> | |
512 <td valign=top> | |
513 <table summary="Read offset tests"> | |
514 <tr> | |
515 <td id="read_offset_null" class="notrun"> | |
516 arg[0]: (offset) undefined | |
517 </td> | |
518 </tr> | |
519 <tr> | |
520 <td id="read_offset_string" class="notrun"> | |
521 arg[0]: (offset) string | |
522 </td> | |
523 </tr> | |
524 <tr> | |
525 <td id="read_offset_object" class="notrun"> | |
526 arg[0]: (offset) object | |
527 </td> | |
528 </tr> | |
529 <tr> | |
530 <td id="read_length_null" class="notrun"> | |
531 arg[1]: (length) undefined | |
532 </td> | |
533 </tr> | |
534 <tr> | |
535 <td id="read_length_string" class="notrun"> | |
536 arg[1]: (length) string | |
537 </td> | |
538 </tr> | |
539 <tr> | |
540 <td id="read_length_object" class="notrun"> | |
541 arg[1]: (length) object | |
542 </td> | |
543 </tr> | |
544 </table> | |
545 </td> | |
546 </tr> | |
547 | |
548 <tr> | |
549 <td> | |
550 <b> Argument range tests </b> | |
551 </td> | |
552 <td valign=top> | |
553 <table summary="Factory invalid size test"> | |
554 <tr> | |
555 <td id="factory_size_invalid" class="notrun"> | |
556 arg[0]: (size) invalid/negative | |
557 </td> | |
558 </tr> | |
559 </table> | |
560 </td> | |
561 <td valign=top> | |
562 <table summary="Map invalid offset tests"> | |
563 <tr> | |
564 <td id="map_offset_neg" class="notrun"> | |
565 arg[0]: (offset) negative | |
566 </td> | |
567 </tr> | |
568 <tr> | |
569 <td id="map_offset_big" class="notrun"> | |
570 arg[0]: (offset) too big | |
571 </td> | |
572 </tr> | |
573 <tr> | |
574 <td id="map_length_neg" class="notrun"> | |
575 arg[1]: (length) negative | |
576 </td> | |
577 </tr> | |
578 <tr> | |
579 <td id="map_length_big" class="notrun"> | |
580 arg[1]: (length) too big | |
581 </td> | |
582 </tr> | |
583 </table> | |
584 </td> | |
585 <td valign=top> | |
586 <table summary="Write invalid offset tests"> | |
587 <tr> | |
588 <td id="write_offset_neg" class="notrun"> | |
589 arg[0]: (offset) negative | |
590 </td> | |
591 </tr> | |
592 <tr> | |
593 <td id="write_offset_big" class="notrun"> | |
594 arg[0]: (offset) too big | |
595 </td> | |
596 </tr> | |
597 <tr> | |
598 <td id="write_length_neg" class="notrun"> | |
599 arg[1]: (length) negative | |
600 </td> | |
601 </tr> | |
602 <tr> | |
603 <td id="write_length_big" class="notrun"> | |
604 arg[1]: (length) too big | |
605 </td> | |
606 </tr> | |
607 </table> | |
608 </td> | |
609 <td valign=top> | |
610 <table summary="Read invalid offset tests"> | |
611 <tr> | |
612 <td id="read_offset_neg" class="notrun"> | |
613 arg[0]: (offset) negative | |
614 </td> | |
615 </tr> | |
616 <tr> | |
617 <td id="read_offset_big" class="notrun"> | |
618 arg[0]: (offset) too big | |
619 </td> | |
620 </tr> | |
621 <tr> | |
622 <td id="read_length_neg" class="notrun"> | |
623 arg[1]: (length) negative | |
624 </td> | |
625 </tr> | |
626 <tr> | |
627 <td id="read_length_big" class="notrun"> | |
628 arg[1]: (length) too big | |
629 </td> | |
630 </tr> | |
631 </table> | |
632 </td> | |
633 </tr> | |
634 | |
635 <tr> | |
636 <td> | |
637 <b> Semantic error tests </b> | |
638 </td> | |
639 <td> | |
640 </td> | |
641 <td valign=top> | |
642 <table summary="Invalid map test"> | |
643 <tr> | |
644 <td id="map_invalid" class="notrun"> | |
645 NaCl module returns invalid handle | |
646 </td> | |
647 </tr> | |
648 </table> | |
649 </td> | |
650 <td valign=top> | |
651 <table summary="Write error tests"> | |
652 <tr> | |
653 <td id="write_overlap" class="notrun"> | |
654 Write overlaps end of region | |
655 </td> | |
656 </tr> | |
657 <tr> | |
658 <td id="write_length_mismatch" class="notrun"> | |
659 Length disagrees with str.length | |
660 </td> | |
661 </tr> | |
662 </table> | |
663 </td> | |
664 <td valign=top> | |
665 <table summary="Read error tests"> | |
666 <tr> | |
667 <td id="read_overlap" class="notrun"> | |
668 Read overlaps end of region | |
669 </td> | |
670 </tr> | |
671 </table> | |
672 </td> | |
673 </tr> | |
674 | |
675 <tr> | |
676 <td> | |
677 <b> Expected behavior </b> | |
678 </td> | |
679 <td valign=top> | |
680 <table summary="Factory conforming test"> | |
681 <tr> | |
682 <td id="factory_conforming" class="notrun"> | |
683 Conforming usage | |
684 </td> | |
685 </tr> | |
686 </table> | |
687 </td> | |
688 <td valign=top> | |
689 <table summary="Map conforming tests"> | |
690 <tr> | |
691 <td id="map_valid" class="notrun"> | |
692 Conforming invocation of map | |
693 </td> | |
694 </tr> | |
695 <tr> | |
696 <td id="map_conforming" class="notrun"> | |
697 Conforming write to shared memory | |
698 </td> | |
699 </tr> | |
700 </table> | |
701 </td> | |
702 <td valign=top> | |
703 <table summary="Write conforming test"> | |
704 <tr> | |
705 <td id="write_conforming" class="notrun"> | |
706 Conforming usage | |
707 </td> | |
708 </tr> | |
709 </table> | |
710 </td> | |
711 <td valign=top> | |
712 <table summary="Read conforming test"> | |
713 <tr> | |
714 <td id="read_conforming" class="notrun"> | |
715 Conforming usage | |
716 </td> | |
717 </tr> | |
718 </table> | |
719 </td> | |
720 </tr> | |
721 </table> | |
722 | |
723 <table summary="The color codes used for identifying test outcomes"> | |
724 <tr> <td align="center"> <em> Legend </em> </td> </tr> | |
725 <tr> <td align="center" class="notrun"> Test not run </td> </tr> | |
726 <tr> <td align="center" class="pass"> Test passed </td> </tr> | |
727 <tr> <td align="center" class="fail"> Test failed </td> </tr> | |
728 </table> | |
729 <p> | |
730 <b> | |
731 NOTE: Some versions of some WebKit-based browsers do not correctly report | |
732 JavaScript exceptions raised by NPAPI plugins. This can cause some of | |
733 the above tests to spuriously report failure. | |
734 </b> | |
735 </p> | |
736 | |
737 <div id=status>NO-STATUS</div> | |
738 | |
739 <embed type="application/x-ppapi-nacl-srpc" id="nacl_server" | |
740 name="nacl_module" width="0" height="0" src="srpc_shm.nexe" /> | |
741 | |
742 <script type="text/javascript" src="nacl_js_lib.js"></script> | |
743 <script type="text/javascript"> | |
744 //<![CDATA[ | |
745 var nacllib = new NaclLib("nacl_module", "status", 500); | |
746 | |
747 nacllib.test = function() { | |
748 server = document.getElementById("nacl_server"); | |
749 EnqueueAndRunTests(); | |
750 if (0 == testQueue.length) { | |
751 return "No tests run."; | |
752 } else if (0 != failing_count) { | |
753 return "Tests failed."; | |
754 } else { | |
755 return ""; | |
756 } | |
757 } | |
758 //]]> | |
759 </script> | |
760 </body> | |
761 </html> | |
OLD | NEW |