1 //------------------------------------------------------------------------------ 2 // AppRunTester.cpp 3 // 4 //------------------------------------------------------------------------------ 5 6 // Standard Includes ----------------------------------------------------------- 7 #include <stdio.h> 8 9 // System Includes ------------------------------------------------------------- 10 #include <Message.h> 11 #include <OS.h> 12 #include <Application.h> 13 #include <Handler.h> 14 #include <Looper.h> 15 #include <String.h> 16 17 // Project Includes ------------------------------------------------------------ 18 #include <TestShell.h> 19 #include <TestUtils.h> 20 #include <cppunit/TestAssert.h> 21 22 // Local Includes -------------------------------------------------------------- 23 #include "AppRunner.h" 24 #include "AppRunTester.h" 25 26 // Local Defines --------------------------------------------------------------- 27 28 // Globals --------------------------------------------------------------------- 29 30 //------------------------------------------------------------------------------ 31 32 // check_output 33 static 34 void 35 check_output(AppRunner &runner, const char *expectedOutput) 36 { 37 BString buffer; 38 CHK(runner.GetOutput(&buffer) == B_OK); 39 if (buffer != expectedOutput) 40 printf("result is `%s', but should be `%s'\n", buffer.String(), 41 expectedOutput); 42 CHK(buffer == expectedOutput); 43 } 44 45 /* 46 thread_id Run() 47 @case 1 launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY, 48 no command line args, send B_QUIT_REQUESTED to both of 49 them 50 @results first app: ReadyToRun(), QuitRequested() 51 second app: ReadyToRun(), QuitRequested() 52 */ 53 void AppRunTester::RunTest1() 54 { 55 BApplication app("application/x-vnd.obos-app-run-test"); 56 const char *output1 = 57 "error: 0\n" 58 "InitCheck(): 0\n" 59 "BApplication::ReadyToRun()\n" 60 "BApplication::QuitRequested()\n" 61 "BApplication::Run() done: 1\n"; 62 const char *output2 = output1; 63 // run the apps 64 AppRunner runner1, runner2; 65 CHK(runner1.Run("AppRunTestApp1") == B_OK); 66 CHK(runner2.Run("AppRunTestApp1") == B_OK); 67 runner1.WaitFor(true); 68 runner2.WaitFor(true); 69 // get the outputs and compare the results 70 check_output(runner1, output1); 71 check_output(runner2, output2); 72 } 73 74 /* 75 thread_id Run() 76 @case 2 launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY, 77 command line args, send B_QUIT_REQUESTED to both of 78 them 79 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 80 second app: ArgvReceived(), ReadyToRun(), QuitRequested() 81 */ 82 void AppRunTester::RunTest2() 83 { 84 BApplication app("application/x-vnd.obos-app-run-test"); 85 const char *output1 = 86 "error: 0\n" 87 "InitCheck(): 0\n" 88 "BApplication::ArgvReceived()\n" 89 "args: a b\n" 90 "BApplication::ReadyToRun()\n" 91 "BApplication::QuitRequested()\n" 92 "BApplication::Run() done: 1\n"; 93 const char *output2 = 94 "error: 0\n" 95 "InitCheck(): 0\n" 96 "BApplication::ArgvReceived()\n" 97 "args: c d e\n" 98 "BApplication::ReadyToRun()\n" 99 "BApplication::QuitRequested()\n" 100 "BApplication::Run() done: 1\n"; 101 // run the apps 102 AppRunner runner1, runner2; 103 CHK(runner1.Run("AppRunTestApp1", "a b") == B_OK); 104 CHK(runner2.Run("AppRunTestApp1", "c d e") == B_OK); 105 runner1.WaitFor(true); 106 runner2.WaitFor(true); 107 // get the outputs and compare the results 108 check_output(runner1, output1); 109 check_output(runner2, output2); 110 } 111 112 /* 113 thread_id Run() 114 @case 3 launch the app two times: B_MULTIPLE_LAUNCH, 115 no command line args, send B_QUIT_REQUESTED to both of them 116 @results first app: ReadyToRun(), QuitRequested() 117 second app: ReadyToRun(), QuitRequested() 118 */ 119 void AppRunTester::RunTest3() 120 { 121 BApplication app("application/x-vnd.obos-app-run-test"); 122 const char *output1 = 123 "error: 0\n" 124 "InitCheck(): 0\n" 125 "BApplication::ReadyToRun()\n" 126 "BApplication::QuitRequested()\n" 127 "BApplication::Run() done: 1\n"; 128 const char *output2 = output1; 129 // run the apps 130 AppRunner runner1, runner2; 131 CHK(runner1.Run("AppRunTestApp2") == B_OK); 132 CHK(runner2.Run("AppRunTestApp2") == B_OK); 133 runner1.WaitFor(true); 134 runner2.WaitFor(true); 135 // get the outputs and compare the results 136 check_output(runner1, output1); 137 check_output(runner2, output2); 138 } 139 140 /* 141 thread_id Run() 142 @case 4 launch the app two times: B_MULTIPLE_LAUNCH, 143 command line args, send B_QUIT_REQUESTED to both of them 144 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 145 second app: ArgvReceived(), ReadyToRun(), QuitRequested() 146 */ 147 void AppRunTester::RunTest4() 148 { 149 BApplication app("application/x-vnd.obos-app-run-test"); 150 const char *output1 = 151 "error: 0\n" 152 "InitCheck(): 0\n" 153 "BApplication::ArgvReceived()\n" 154 "args: a b\n" 155 "BApplication::ReadyToRun()\n" 156 "BApplication::QuitRequested()\n" 157 "BApplication::Run() done: 1\n"; 158 const char *output2 = 159 "error: 0\n" 160 "InitCheck(): 0\n" 161 "BApplication::ArgvReceived()\n" 162 "args: c d e\n" 163 "BApplication::ReadyToRun()\n" 164 "BApplication::QuitRequested()\n" 165 "BApplication::Run() done: 1\n"; 166 // run the apps 167 AppRunner runner1, runner2; 168 CHK(runner1.Run("AppRunTestApp2", "a b") == B_OK); 169 CHK(runner2.Run("AppRunTestApp2", "c d e") == B_OK); 170 runner1.WaitFor(true); 171 runner2.WaitFor(true); 172 // get the outputs and compare the results 173 check_output(runner1, output1); 174 check_output(runner2, output2); 175 } 176 177 /* 178 thread_id Run() 179 @case 5 launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY, 180 no command line args, send B_QUIT_REQUESTED to both of them 181 @results first app: ReadyToRun(), QuitRequested() 182 second app: quits 183 */ 184 void AppRunTester::RunTest5() 185 { 186 BApplication app("application/x-vnd.obos-app-run-test"); 187 const char *output1 = 188 "error: 0\n" 189 "InitCheck(): 0\n" 190 "BApplication::ReadyToRun()\n" 191 "BApplication::QuitRequested()\n" 192 "BApplication::Run() done: 1\n"; 193 const char *output2 = 194 "error: 80002004\n" 195 "InitCheck(): 80002004\n"; 196 // run the apps 197 AppRunner runner1, runner2; 198 CHK(runner1.Run("AppRunTestApp3") == B_OK); 199 CHK(runner2.Run("AppRunTestApp3") == B_OK); 200 runner1.WaitFor(true); 201 runner2.WaitFor(true); 202 // get the outputs and compare the results 203 check_output(runner1, output1); 204 check_output(runner2, output2); 205 } 206 207 /* 208 thread_id Run() 209 @case 6 launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY, 210 command line args, send B_QUIT_REQUESTED to both of them 211 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 212 second app: quits 213 */ 214 void AppRunTester::RunTest6() 215 { 216 BApplication app("application/x-vnd.obos-app-run-test"); 217 const char *output1 = 218 "error: 0\n" 219 "InitCheck(): 0\n" 220 "BApplication::ArgvReceived()\n" 221 "args: a b\n" 222 "BApplication::ReadyToRun()\n" 223 "BApplication::QuitRequested()\n" 224 "BApplication::Run() done: 1\n"; 225 const char *output2 = 226 "error: 80002004\n" 227 "InitCheck(): 80002004\n"; 228 // run the apps 229 AppRunner runner1, runner2; 230 CHK(runner1.Run("AppRunTestApp3", "a b") == B_OK); 231 CHK(runner2.Run("AppRunTestApp3", "c d e") == B_OK); 232 runner1.WaitFor(true); 233 runner2.WaitFor(true); 234 // get the outputs and compare the results 235 check_output(runner1, output1); 236 check_output(runner2, output2); 237 } 238 239 /* 240 thread_id Run() 241 @case 7 launch the app two times: B_SINGLE_LAUNCH, 242 no command line args, send B_QUIT_REQUESTED to both of them 243 @results first app: ReadyToRun(), QuitRequested() 244 second app: quits 245 */ 246 void AppRunTester::RunTest7() 247 { 248 BApplication app("application/x-vnd.obos-app-run-test"); 249 const char *output1 = 250 "error: 0\n" 251 "InitCheck(): 0\n" 252 "BApplication::ReadyToRun()\n" 253 "BApplication::QuitRequested()\n" 254 "BApplication::Run() done: 1\n"; 255 const char *output2 = 256 "error: 80002004\n" 257 "InitCheck(): 80002004\n"; 258 // run the apps 259 AppRunner runner1, runner2; 260 CHK(runner1.Run("AppRunTestApp4") == B_OK); 261 CHK(runner2.Run("AppRunTestApp4") == B_OK); 262 runner1.WaitFor(true); 263 runner2.WaitFor(true); 264 // get the outputs and compare the results 265 check_output(runner1, output1); 266 check_output(runner2, output2); 267 } 268 269 /* 270 thread_id Run() 271 @case 8 launch the app two times: B_SINGLE_LAUNCH, 272 command line args, send B_QUIT_REQUESTED to both of them 273 @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), 274 QuitRequested() 275 second app: quits 276 */ 277 void AppRunTester::RunTest8() 278 { 279 BApplication app("application/x-vnd.obos-app-run-test"); 280 const char *output1 = 281 "error: 0\n" 282 "InitCheck(): 0\n" 283 "BApplication::ArgvReceived()\n" 284 "args: a b\n" 285 "BApplication::ReadyToRun()\n" 286 "BApplication::ArgvReceived()\n" 287 "args: c d e\n" 288 "BApplication::QuitRequested()\n" 289 "BApplication::Run() done: 1\n"; 290 const char *output2 = 291 "error: 80002004\n" 292 "InitCheck(): 80002004\n"; 293 // run the apps 294 AppRunner runner1, runner2; 295 CHK(runner1.Run("AppRunTestApp4", "a b") == B_OK); 296 CHK(runner2.Run("AppRunTestApp4", "c d e") == B_OK); 297 runner1.WaitFor(true); 298 runner2.WaitFor(true); 299 // get the outputs and compare the results 300 check_output(runner1, output1); 301 check_output(runner2, output2); 302 } 303 304 /* 305 thread_id Run() 306 @case 9 launch two apps with the same signature: 307 B_SINGLE_LAUNCH | B_ARGV_ONLY, 308 no command line args, send B_QUIT_REQUESTED to both of them 309 @results first app: ReadyToRun(), QuitRequested() 310 second app: ReadyToRun(), QuitRequested() 311 */ 312 void AppRunTester::RunTest9() 313 { 314 BApplication app("application/x-vnd.obos-app-run-test"); 315 const char *output1 = 316 "error: 0\n" 317 "InitCheck(): 0\n" 318 "BApplication::ReadyToRun()\n" 319 "BApplication::QuitRequested()\n" 320 "BApplication::Run() done: 1\n"; 321 const char *output2 = output1; 322 // run the apps 323 AppRunner runner1, runner2; 324 CHK(runner1.Run("AppRunTestApp3") == B_OK); 325 CHK(runner2.Run("AppRunTestApp3a") == B_OK); 326 runner1.WaitFor(true); 327 runner2.WaitFor(true); 328 // get the outputs and compare the results 329 check_output(runner1, output1); 330 check_output(runner2, output2); 331 } 332 333 /* 334 thread_id Run() 335 @case 10 launch two apps with the same signature: 336 B_SINGLE_LAUNCH | B_ARGV_ONLY, 337 command line args, send B_QUIT_REQUESTED to both of them 338 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 339 second app: ArgvReceived(), ReadyToRun(), QuitRequested() 340 */ 341 void AppRunTester::RunTest10() 342 { 343 BApplication app("application/x-vnd.obos-app-run-test"); 344 const char *output1 = 345 "error: 0\n" 346 "InitCheck(): 0\n" 347 "BApplication::ArgvReceived()\n" 348 "args: a b\n" 349 "BApplication::ReadyToRun()\n" 350 "BApplication::QuitRequested()\n" 351 "BApplication::Run() done: 1\n"; 352 const char *output2 = 353 "error: 0\n" 354 "InitCheck(): 0\n" 355 "BApplication::ArgvReceived()\n" 356 "args: c d e\n" 357 "BApplication::ReadyToRun()\n" 358 "BApplication::QuitRequested()\n" 359 "BApplication::Run() done: 1\n"; 360 // run the apps 361 AppRunner runner1, runner2; 362 CHK(runner1.Run("AppRunTestApp3", "a b") == B_OK); 363 CHK(runner2.Run("AppRunTestApp3a", "c d e") == B_OK); 364 runner1.WaitFor(true); 365 runner2.WaitFor(true); 366 // get the outputs and compare the results 367 check_output(runner1, output1); 368 check_output(runner2, output2); 369 } 370 371 /* 372 thread_id Run() 373 @case 11 launch two apps with the same signature: 374 B_SINGLE_LAUNCH, 375 no command line args, send B_QUIT_REQUESTED to both of them 376 @results first app: ReadyToRun(), QuitRequested() 377 second app: ReadyToRun(), QuitRequested() 378 */ 379 void AppRunTester::RunTest11() 380 { 381 BApplication app("application/x-vnd.obos-app-run-test"); 382 const char *output1 = 383 "error: 0\n" 384 "InitCheck(): 0\n" 385 "BApplication::ReadyToRun()\n" 386 "BApplication::QuitRequested()\n" 387 "BApplication::Run() done: 1\n"; 388 const char *output2 = output1; 389 // run the apps 390 AppRunner runner1, runner2; 391 CHK(runner1.Run("AppRunTestApp4") == B_OK); 392 CHK(runner2.Run("AppRunTestApp4a") == B_OK); 393 runner1.WaitFor(true); 394 runner2.WaitFor(true); 395 // get the outputs and compare the results 396 check_output(runner1, output1); 397 check_output(runner2, output2); 398 } 399 400 /* 401 thread_id Run() 402 @case 12 launch two apps with the same signature: 403 B_SINGLE_LAUNCH, 404 command line args, send B_QUIT_REQUESTED to both of them 405 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 406 second app: ArgvReceived(), ReadyToRun(), QuitRequested() 407 */ 408 void AppRunTester::RunTest12() 409 { 410 BApplication app("application/x-vnd.obos-app-run-test"); 411 const char *output1 = 412 "error: 0\n" 413 "InitCheck(): 0\n" 414 "BApplication::ArgvReceived()\n" 415 "args: a b\n" 416 "BApplication::ReadyToRun()\n" 417 "BApplication::QuitRequested()\n" 418 "BApplication::Run() done: 1\n"; 419 const char *output2 = 420 "error: 0\n" 421 "InitCheck(): 0\n" 422 "BApplication::ArgvReceived()\n" 423 "args: c d e\n" 424 "BApplication::ReadyToRun()\n" 425 "BApplication::QuitRequested()\n" 426 "BApplication::Run() done: 1\n"; 427 // run the apps 428 AppRunner runner1, runner2; 429 CHK(runner1.Run("AppRunTestApp4", "a b") == B_OK); 430 CHK(runner2.Run("AppRunTestApp4a", "c d e") == B_OK); 431 runner1.WaitFor(true); 432 runner2.WaitFor(true); 433 // get the outputs and compare the results 434 check_output(runner1, output1); 435 check_output(runner2, output2); 436 } 437 438 /* 439 thread_id Run() 440 @case 13 launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, 441 no command line args, send B_QUIT_REQUESTED to both of them 442 @results first app: ReadyToRun(), QuitRequested() 443 second app: quits 444 */ 445 void AppRunTester::RunTest13() 446 { 447 BApplication app("application/x-vnd.obos-app-run-test"); 448 const char *output1 = 449 "error: 0\n" 450 "InitCheck(): 0\n" 451 "BApplication::ReadyToRun()\n" 452 "BApplication::QuitRequested()\n" 453 "BApplication::Run() done: 1\n"; 454 const char *output2 = 455 "error: 80002004\n" 456 "InitCheck(): 80002004\n"; 457 // run the apps 458 AppRunner runner1, runner2; 459 CHK(runner1.Run("AppRunTestApp5") == B_OK); 460 CHK(runner2.Run("AppRunTestApp5") == B_OK); 461 runner1.WaitFor(true); 462 runner2.WaitFor(true); 463 // get the outputs and compare the results 464 check_output(runner1, output1); 465 check_output(runner2, output2); 466 } 467 468 /* 469 thread_id Run() 470 @case 14 launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, 471 command line args, send B_QUIT_REQUESTED to both of them 472 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 473 second app: quits 474 */ 475 void AppRunTester::RunTest14() 476 { 477 BApplication app("application/x-vnd.obos-app-run-test"); 478 const char *output1 = 479 "error: 0\n" 480 "InitCheck(): 0\n" 481 "BApplication::ArgvReceived()\n" 482 "args: a b\n" 483 "BApplication::ReadyToRun()\n" 484 "BApplication::QuitRequested()\n" 485 "BApplication::Run() done: 1\n"; 486 const char *output2 = 487 "error: 80002004\n" 488 "InitCheck(): 80002004\n"; 489 // run the apps 490 AppRunner runner1, runner2; 491 CHK(runner1.Run("AppRunTestApp5", "a b") == B_OK); 492 CHK(runner2.Run("AppRunTestApp5", "c d e") == B_OK); 493 runner1.WaitFor(true); 494 runner2.WaitFor(true); 495 // get the outputs and compare the results 496 check_output(runner1, output1); 497 check_output(runner2, output2); 498 } 499 500 /* 501 thread_id Run() 502 @case 15 launch the app two times: B_EXCLUSIVE_LAUNCH, 503 no command line args, send B_QUIT_REQUESTED to both of them 504 @results first app: ReadyToRun(), QuitRequested() 505 second app: quits 506 */ 507 void AppRunTester::RunTest15() 508 { 509 BApplication app("application/x-vnd.obos-app-run-test"); 510 const char *output1 = 511 "error: 0\n" 512 "InitCheck(): 0\n" 513 "BApplication::ReadyToRun()\n" 514 "BApplication::QuitRequested()\n" 515 "BApplication::Run() done: 1\n"; 516 const char *output2 = 517 "error: 80002004\n" 518 "InitCheck(): 80002004\n"; 519 // run the apps 520 AppRunner runner1, runner2; 521 CHK(runner1.Run("AppRunTestApp6") == B_OK); 522 CHK(runner2.Run("AppRunTestApp6") == B_OK); 523 runner1.WaitFor(true); 524 runner2.WaitFor(true); 525 // get the outputs and compare the results 526 check_output(runner1, output1); 527 check_output(runner2, output2); 528 } 529 530 /* 531 thread_id Run() 532 @case 16 launch the app two times: B_EXCLUSIVE_LAUNCH, 533 command line args, send B_QUIT_REQUESTED to both of them 534 @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), 535 QuitRequested() 536 second app: quits 537 */ 538 void AppRunTester::RunTest16() 539 { 540 BApplication app("application/x-vnd.obos-app-run-test"); 541 const char *output1 = 542 "error: 0\n" 543 "InitCheck(): 0\n" 544 "BApplication::ArgvReceived()\n" 545 "args: a b\n" 546 "BApplication::ReadyToRun()\n" 547 "BApplication::ArgvReceived()\n" 548 "args: c d e\n" 549 "BApplication::QuitRequested()\n" 550 "BApplication::Run() done: 1\n"; 551 const char *output2 = 552 "error: 80002004\n" 553 "InitCheck(): 80002004\n"; 554 // run the apps 555 AppRunner runner1, runner2; 556 CHK(runner1.Run("AppRunTestApp6", "a b") == B_OK); 557 CHK(runner2.Run("AppRunTestApp6", "c d e") == B_OK); 558 runner1.WaitFor(true); 559 runner2.WaitFor(true); 560 // get the outputs and compare the results 561 check_output(runner1, output1); 562 check_output(runner2, output2); 563 } 564 565 /* 566 thread_id Run() 567 @case 17 launch two apps with the same signature: 568 B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, 569 no command line args, send B_QUIT_REQUESTED to both of them 570 @results first app: ReadyToRun(), QuitRequested() 571 second app: quits 572 */ 573 void AppRunTester::RunTest17() 574 { 575 BApplication app("application/x-vnd.obos-app-run-test"); 576 const char *output1 = 577 "error: 0\n" 578 "InitCheck(): 0\n" 579 "BApplication::ReadyToRun()\n" 580 "BApplication::QuitRequested()\n" 581 "BApplication::Run() done: 1\n"; 582 const char *output2 = 583 "error: 80002004\n" 584 "InitCheck(): 80002004\n"; 585 // run the apps 586 AppRunner runner1, runner2; 587 CHK(runner1.Run("AppRunTestApp5") == B_OK); 588 CHK(runner2.Run("AppRunTestApp5a") == B_OK); 589 runner1.WaitFor(true); 590 runner2.WaitFor(true); 591 // get the outputs and compare the results 592 check_output(runner1, output1); 593 check_output(runner2, output2); 594 } 595 596 /* 597 thread_id Run() 598 @case 18 launch two apps with the same signature: 599 B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, 600 command line args, send B_QUIT_REQUESTED to both of them 601 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 602 second app: quits 603 */ 604 void AppRunTester::RunTest18() 605 { 606 BApplication app("application/x-vnd.obos-app-run-test"); 607 const char *output1 = 608 "error: 0\n" 609 "InitCheck(): 0\n" 610 "BApplication::ArgvReceived()\n" 611 "args: a b\n" 612 "BApplication::ReadyToRun()\n" 613 "BApplication::QuitRequested()\n" 614 "BApplication::Run() done: 1\n"; 615 const char *output2 = 616 "error: 80002004\n" 617 "InitCheck(): 80002004\n"; 618 // run the apps 619 AppRunner runner1, runner2; 620 CHK(runner1.Run("AppRunTestApp5", "a b") == B_OK); 621 CHK(runner2.Run("AppRunTestApp5a", "c d e") == B_OK); 622 runner1.WaitFor(true); 623 runner2.WaitFor(true); 624 // get the outputs and compare the results 625 check_output(runner1, output1); 626 check_output(runner2, output2); 627 } 628 629 /* 630 thread_id Run() 631 @case 19 launch two apps with the same signature: B_EXCLUSIVE_LAUNCH, 632 no command line args, send B_QUIT_REQUESTED to both of them 633 @results first app: ReadyToRun(), QuitRequested() 634 second app: quits 635 */ 636 void AppRunTester::RunTest19() 637 { 638 BApplication app("application/x-vnd.obos-app-run-test"); 639 const char *output1 = 640 "error: 0\n" 641 "InitCheck(): 0\n" 642 "BApplication::ReadyToRun()\n" 643 "BApplication::QuitRequested()\n" 644 "BApplication::Run() done: 1\n"; 645 const char *output2 = 646 "error: 80002004\n" 647 "InitCheck(): 80002004\n"; 648 // run the apps 649 AppRunner runner1, runner2; 650 CHK(runner1.Run("AppRunTestApp6") == B_OK); 651 CHK(runner2.Run("AppRunTestApp6a") == B_OK); 652 runner1.WaitFor(true); 653 runner2.WaitFor(true); 654 // get the outputs and compare the results 655 check_output(runner1, output1); 656 check_output(runner2, output2); 657 } 658 659 /* 660 thread_id Run() 661 @case 20 launch two apps with the same signature: B_EXCLUSIVE_LAUNCH, 662 command line args, send B_QUIT_REQUESTED to both of them 663 @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), 664 QuitRequested() 665 second app: quits 666 */ 667 void AppRunTester::RunTest20() 668 { 669 BApplication app("application/x-vnd.obos-app-run-test"); 670 const char *output1 = 671 "error: 0\n" 672 "InitCheck(): 0\n" 673 "BApplication::ArgvReceived()\n" 674 "args: a b\n" 675 "BApplication::ReadyToRun()\n" 676 "BApplication::ArgvReceived()\n" 677 "args: c d e\n" 678 "BApplication::QuitRequested()\n" 679 "BApplication::Run() done: 1\n"; 680 const char *output2 = 681 "error: 80002004\n" 682 "InitCheck(): 80002004\n"; 683 // run the apps 684 AppRunner runner1, runner2; 685 CHK(runner1.Run("AppRunTestApp6", "a b") == B_OK); 686 CHK(runner2.Run("AppRunTestApp6a", "c d e") == B_OK); 687 runner1.WaitFor(true); 688 runner2.WaitFor(true); 689 // get the outputs and compare the results 690 check_output(runner1, output1); 691 check_output(runner2, output2); 692 } 693 694 /* 695 thread_id Run() 696 @case 21 launch the app two times: first: B_EXCLUSIVE_LAUNCH, 697 second: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, 698 command line args, send B_QUIT_REQUESTED to both of them 699 @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), 700 QuitRequested() 701 second app: quits 702 */ 703 void AppRunTester::RunTest21() 704 { 705 BApplication app("application/x-vnd.obos-app-run-test"); 706 const char *output1 = 707 "error: 0\n" 708 "InitCheck(): 0\n" 709 "BApplication::ArgvReceived()\n" 710 "args: a b\n" 711 "BApplication::ReadyToRun()\n" 712 "BApplication::ArgvReceived()\n" 713 "args: c d e\n" 714 "BApplication::QuitRequested()\n" 715 "BApplication::Run() done: 1\n"; 716 const char *output2 = 717 "error: 80002004\n" 718 "InitCheck(): 80002004\n"; 719 // run the apps 720 AppRunner runner1, runner2; 721 CHK(runner1.Run("AppRunTestApp6", "a b") == B_OK); 722 CHK(runner2.Run("AppRunTestApp5", "c d e") == B_OK); 723 runner1.WaitFor(true); 724 runner2.WaitFor(true); 725 // get the outputs and compare the results 726 check_output(runner1, output1); 727 check_output(runner2, output2); 728 } 729 730 /* 731 thread_id Run() 732 @case 22 launch the app two times: 733 first: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, 734 second: B_EXCLUSIVE_LAUNCH, 735 command line args, send B_QUIT_REQUESTED to both of them 736 @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() 737 second app: quits 738 */ 739 void AppRunTester::RunTest22() 740 { 741 BApplication app("application/x-vnd.obos-app-run-test"); 742 const char *output1 = 743 "error: 0\n" 744 "InitCheck(): 0\n" 745 "BApplication::ArgvReceived()\n" 746 "args: a b\n" 747 "BApplication::ReadyToRun()\n" 748 "BApplication::QuitRequested()\n" 749 "BApplication::Run() done: 1\n"; 750 const char *output2 = 751 "error: 80002004\n" 752 "InitCheck(): 80002004\n"; 753 // run the apps 754 AppRunner runner1, runner2; 755 CHK(runner1.Run("AppRunTestApp5", "a b") == B_OK); 756 CHK(runner2.Run("AppRunTestApp6", "c d e") == B_OK); 757 runner1.WaitFor(true); 758 runner2.WaitFor(true); 759 // get the outputs and compare the results 760 check_output(runner1, output1); 761 check_output(runner2, output2); 762 } 763 764 765 Test* AppRunTester::Suite() 766 { 767 TestSuite* SuiteOfTests = new TestSuite; 768 769 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest1); 770 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest2); 771 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest3); 772 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest4); 773 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest5); 774 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest6); 775 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest7); 776 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest8); 777 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest9); 778 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest10); 779 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest11); 780 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest12); 781 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest13); 782 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest14); 783 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest15); 784 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest16); 785 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest17); 786 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest18); 787 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest19); 788 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest20); 789 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest21); 790 ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest22); 791 792 return SuiteOfTests; 793 } 794 795 796 797