| 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 |