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
check_output(AppRunner & runner,const char * expectedOutput)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 */
RunTest1()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 */
RunTest2()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 */
RunTest3()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 */
RunTest4()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 */
RunTest5()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 */
RunTest6()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 */
RunTest7()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 */
RunTest8()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 */
RunTest9()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 */
RunTest10()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 */
RunTest11()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 */
RunTest12()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 */
RunTest13()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 */
RunTest14()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 */
RunTest15()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 */
RunTest16()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 */
RunTest17()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 */
RunTest18()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 */
RunTest19()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 */
RunTest20()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 */
RunTest21()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 */
RunTest22()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
Suite()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