xref: /haiku/src/tests/kits/app/bmessenger/BMessengerTester.cpp (revision f801a327554e9f58acf619a452ca95ceb21dae5d)
1 //------------------------------------------------------------------------------
2 //	BMessengerTester.cpp
3 //
4 //------------------------------------------------------------------------------
5 
6 // Standard Includes -----------------------------------------------------------
7 #include <stdio.h>
8 
9 // System Includes -------------------------------------------------------------
10 #include <Application.h>
11 #include <Handler.h>
12 #include <Looper.h>
13 #include <Message.h>
14 #include <Messenger.h>
15 #include <OS.h>
16 
17 #define CHK	CPPUNIT_ASSERT
18 
19 // Project Includes ------------------------------------------------------------
20 #include <TestShell.h>
21 #include <TestUtils.h>
22 #include <cppunit/TestAssert.h>
23 
24 // Local Includes --------------------------------------------------------------
25 #include "BMessengerTester.h"
26 #include "AppRunner.h"
27 #include "Helpers.h"
28 
29 // Local Defines ---------------------------------------------------------------
30 
31 // Globals ---------------------------------------------------------------------
32 
33 //------------------------------------------------------------------------------
34 
35 // check_messenger
36 static
37 void
check_messenger(const BMessenger & messenger,bool valid,bool local,team_id team,BLooper * looper=NULL,BHandler * handler=NULL,team_id altTeam=-1)38 check_messenger(const BMessenger &messenger, bool valid, bool local,
39 				team_id team, BLooper *looper = NULL, BHandler *handler = NULL,
40 				team_id altTeam = -1)
41 {
42 	CHK(messenger.IsValid() == valid);
43 	CHK(messenger.IsTargetLocal() == local);
44 	BLooper *resultLooper = NULL;
45 	CHK(messenger.Target(&resultLooper) == handler);
46 	CHK(resultLooper == looper);
47 	if (altTeam >= 0)
48 		CHK(messenger.Team() == team || messenger.Team() == altTeam);
49 	else
50 {
51 if (messenger.Team() != team)
52 printf("team is %ld, but should be %ld\n", messenger.Team(), team);
53 		CHK(messenger.Team() == team);
54 }
55 }
56 
57 static const char *kRunTestApp1Signature
58 	= "application/x-vnd.obos-app-run-testapp1";
59 //static const char *kBMessengerTestApp1Signature
60 //	= "application/x-vnd.obos-bmessenger-testapp1";
61 
62 
63 /*
64 	BMessenger()
65 	@case 1
66 	@results		IsValid() should return false.
67 					IsTargetLocal() should return false.
68 					Target() should return NULL and NULL for looper.
69 					Team() should return -1.
70  */
BMessenger1()71 void TBMessengerTester::BMessenger1()
72 {
73 	BMessenger messenger;
74 	CHK(messenger.IsValid() == false);
75 	CHK(messenger.IsTargetLocal() == false);
76 	BLooper *looper;
77 	CHK(messenger.Target(&looper) == NULL);
78 	CHK(looper == NULL);
79 	CHK(messenger.Team() == -1);
80 }
81 
82 /*
83 	BMessenger(const BHandler *handler, const BLooper *looper,
84 			   status_t *result)
85 	@case 1			handler is NULL, looper is NULL, result is NULL
86 	@results		IsValid() and IsTargetLocal() should return false
87 					Target() should return NULL and NULL for looper.
88 					Team() should return -1.
89  */
BMessenger2()90 void TBMessengerTester::BMessenger2()
91 {
92 	BMessenger messenger((const BHandler*)NULL, NULL, NULL);
93 	CHK(messenger.IsValid() == false);
94 	CHK(messenger.IsTargetLocal() == false);
95 	BLooper *looper;
96 	CHK(messenger.Target(&looper) == NULL);
97 	CHK(looper == NULL);
98 	CHK(messenger.Team() == -1);
99 }
100 
101 /*
102 	BMessenger(const BHandler *handler, const BLooper *looper,
103 			   status_t *result)
104 	@case 2			handler is NULL, looper is NULL, result is not NULL
105 	@results		IsValid() and IsTargetLocal() should return false.
106 					Target() should return NULL and NULL for looper.
107 					Team() should return -1.
108 					result is set to B_BAD_VALUE.
109  */
BMessenger3()110 void TBMessengerTester::BMessenger3()
111 {
112 	status_t result = B_OK;
113 	BMessenger messenger((const BHandler*)NULL, NULL, &result);
114 	CHK(messenger.IsValid() == false);
115 	CHK(messenger.IsTargetLocal() == false);
116 	BLooper *looper;
117 	CHK(messenger.Target(&looper) == NULL);
118 	CHK(looper == NULL);
119 	CHK(messenger.Team() == -1);
120 	CHK(result == B_BAD_VALUE);
121 }
122 
123 /*
124 	BMessenger(const BHandler *handler, const BLooper *looper,
125 			   status_t *result)
126 	@case 3			handler is NULL, looper is not NULL, result is not NULL
127 	@results		IsValid() and IsTargetLocal() should return true.
128 					Target() should return NULL and the correct value for
129 					looper.
130 					Team() should return this team.
131 					result is set to B_OK.
132  */
BMessenger4()133 void TBMessengerTester::BMessenger4()
134 {
135 	status_t result = B_OK;
136 	BLooper *looper = new BLooper;
137 	looper->Run();
138 	LooperQuitter quitter(looper);
139 	BMessenger messenger(NULL, looper, &result);
140 	CHK(messenger.IsValid() == true);
141 	CHK(messenger.IsTargetLocal() == true);
142 	BLooper *resultLooper;
143 	CHK(messenger.Target(&resultLooper) == NULL);
144 	CHK(resultLooper == looper);
145 	CHK(messenger.Team() == get_this_team());
146 	CHK(result == B_OK);
147 }
148 
149 /*
150 	BMessenger(const BHandler *handler, const BLooper *looper,
151 			   status_t *result)
152 	@case 4			handler is not NULL, looper is NULL, result is not NULL,
153 					handler doesn't belong to a looper
154 	@results		IsValid() and IsTargetLocal() should return false.
155 					Target() should return NULL and NULL for looper.
156 					Team() should return -1.
157 					result is set to B_MISMATCHED_VALUES.
158  */
BMessenger5()159 void TBMessengerTester::BMessenger5()
160 {
161 	status_t result = B_OK;
162 	BHandler *handler = new BHandler;
163 	HandlerDeleter deleter(handler);
164 	BMessenger messenger(handler, NULL, &result);
165 	CHK(messenger.IsValid() == false);
166 	CHK(messenger.IsTargetLocal() == false);
167 	BLooper *resultLooper;
168 	CHK(messenger.Target(&resultLooper) == NULL);
169 	CHK(resultLooper == NULL);
170 	CHK(messenger.Team() == -1);
171 	CHK(result == B_MISMATCHED_VALUES);
172 }
173 
174 /*
175 	BMessenger(const BHandler *handler, const BLooper *looper,
176 			   status_t *result)
177 	@case 5			handler is not NULL, looper is NULL, result is not NULL
178 					handler does belong to a looper
179 	@results		IsValid() and IsTargetLocal() should return true.
180 					Target() should return the correct handler and the
181 					handler->Looper() for looper.
182 					Team() should return this team.
183 					result is set to B_OK.
184  */
BMessenger6()185 void TBMessengerTester::BMessenger6()
186 {
187 	// create looper and handler
188 	status_t result = B_OK;
189 	BLooper *looper = new BLooper;
190 	looper->Run();
191 	LooperQuitter quitter(looper);
192 	BHandler *handler = new BHandler;
193 	HandlerDeleter deleter(handler);
194 	CHK(looper->Lock());
195 	looper->AddHandler(handler);
196 	looper->Unlock();
197 	// create the messenger and do the checks
198 	BMessenger messenger(handler, NULL, &result);
199 	CHK(messenger.IsValid() == true);
200 	CHK(messenger.IsTargetLocal() == true);
201 	BLooper *resultLooper;
202 	CHK(messenger.Target(&resultLooper) == handler);
203 	CHK(resultLooper == looper);
204 	CHK(messenger.Team() == get_this_team());
205 //printf("result: %lx\n", result);
206 	CHK(result == B_OK);
207 }
208 
209 /*
210 	BMessenger(const BHandler *handler, const BLooper *looper,
211 			   status_t *result)
212 	@case 6			handler is not NULL, looper is not NULL, result is not NULL
213 					handler does belong to the looper
214 	@results		IsValid() and IsTargetLocal() should return true.
215 					Target() should return the correct handler and the correct value
216 					for looper.
217 					Team() should return this team.
218 					result is set to B_OK.
219  */
BMessenger7()220 void TBMessengerTester::BMessenger7()
221 {
222 	// create looper and handler
223 	status_t result = B_OK;
224 	BLooper *looper = new BLooper;
225 	looper->Run();
226 	LooperQuitter quitter(looper);
227 	BHandler *handler = new BHandler;
228 	HandlerDeleter deleter(handler);
229 	CHK(looper->Lock());
230 	looper->AddHandler(handler);
231 	looper->Unlock();
232 	// create the messenger and do the checks
233 	BMessenger messenger(handler, looper, &result);
234 	CHK(messenger.IsValid() == true);
235 	CHK(messenger.IsTargetLocal() == true);
236 	BLooper *resultLooper;
237 	CHK(messenger.Target(&resultLooper) == handler);
238 	CHK(resultLooper == looper);
239 	CHK(messenger.Team() == get_this_team());
240 //printf("result: %lx\n", result);
241 	CHK(result == B_OK);
242 }
243 
244 /*
245 	BMessenger(const BHandler *handler, const BLooper *looper,
246 			   status_t *result)
247 	@case 7			handler is not NULL, looper is not NULL, result is not NULL
248 					handler does belong to a different looper
249 	@results		IsValid() and IsTargetLocal() should return false.
250 					Target() should return NULL and NULL for looper.
251 					Team() should return -1.
252 					result is set to B_MISMATCHED_VALUES.
253  */
BMessenger8()254 void TBMessengerTester::BMessenger8()
255 {
256 	// create loopers and handler
257 	status_t result = B_OK;
258 	BLooper *looper = new BLooper;
259 	looper->Run();
260 	LooperQuitter quitter(looper);
261 	BLooper *looper2 = new BLooper;
262 	looper2->Run();
263 	LooperQuitter quitter2(looper2);
264 	BHandler *handler = new BHandler;
265 	HandlerDeleter deleter(handler);
266 	CHK(looper->Lock());
267 	looper->AddHandler(handler);
268 	looper->Unlock();
269 	// create the messenger and do the checks
270 	BMessenger messenger(handler, looper2, &result);
271 	CHK(messenger.IsValid() == false);
272 	CHK(messenger.IsTargetLocal() == false);
273 	BLooper *resultLooper;
274 	CHK(messenger.Target(&resultLooper) == NULL);
275 	CHK(resultLooper == NULL);
276 	CHK(messenger.Team() == -1);
277 //printf("result: %lx\n", result);
278 	CHK(result == B_MISMATCHED_VALUES);
279 }
280 
281 /*
282 	BMessenger(const BMessenger &from)
283 	@case 1			from is uninitialized
284 	@results		IsValid() and IsTargetLocal() should return false
285 					Target() should return NULL and NULL for looper.
286 					Team() should return -1.
287  */
BMessenger9()288 void TBMessengerTester::BMessenger9()
289 {
290 	BMessenger from;
291 	BMessenger messenger(from);
292 	CHK(messenger.IsValid() == false);
293 	CHK(messenger.IsTargetLocal() == false);
294 	BLooper *looper;
295 	CHK(messenger.Target(&looper) == NULL);
296 	CHK(looper == NULL);
297 	CHK(messenger.Team() == -1);
298 }
299 
300 
301 /*
302 	BMessenger(const BMessenger &from)
303 	@case 2			from is properly initialized to a local target
304 	@results		IsValid() and IsTargetLocal() should return true
305 					Target() should return the same values as for from.
306 					Team() should return this team.
307  */
BMessenger10()308 void TBMessengerTester::BMessenger10()
309 {
310 	// create looper and handler
311 	status_t result = B_OK;
312 	BLooper *looper = new BLooper;
313 	looper->Run();
314 	LooperQuitter quitter(looper);
315 	BHandler *handler = new BHandler;
316 	HandlerDeleter deleter(handler);
317 	CHK(looper->Lock());
318 	looper->AddHandler(handler);
319 	looper->Unlock();
320 	// create the from messenger
321 	BMessenger from(handler, looper, &result);
322 	CHK(from.IsValid() == true);
323 	CHK(from.IsTargetLocal() == true);
324 	BLooper *resultLooper;
325 	CHK(from.Target(&resultLooper) == handler);
326 	CHK(resultLooper == looper);
327 	CHK(from.Team() == get_this_team());
328 	CHK(result == B_OK);
329 	// create the messenger and do the checks
330 	BMessenger messenger(from);
331 	CHK(messenger.IsValid() == true);
332 	CHK(messenger.IsTargetLocal() == true);
333 	resultLooper = NULL;
334 	CHK(messenger.Target(&resultLooper) == handler);
335 	CHK(resultLooper == looper);
336 	CHK(messenger.Team() == get_this_team());
337 }
338 
339 
340 /*
341 	BMessenger(const char *signature, team_id team, status_t *result)
342 	@case 1			signature is NULL, team is -1, result is (not) NULL
343 	@results		IsValid() and IsTargetLocal() should return false
344 					Target() should return NULL and NULL for looper.
345 					Team() should return -1.
346 					(result should be set to B_BAD_TYPE.)
347  */
BMessengerD1()348 void TBMessengerTester::BMessengerD1()
349 {
350 	BApplication app("application/x-vnd.obos-bmessenger-test");
351 	// run the remote app
352 	AppRunner runner(true);
353 	CHK(runner.Run("AppRunTestApp1") == B_OK);
354 	// create and check the messengers
355 	BMessenger messenger1(NULL, -1, NULL);
356 	check_messenger(messenger1, false, false, -1);
357 	status_t error;
358 	BMessenger messenger2(NULL, -1, &error);
359 	check_messenger(messenger2, false, false, -1);
360 	CHK(error == B_BAD_TYPE);
361 	// quit the remote app
362 	runner.WaitFor(true);
363 }
364 
365 /*
366 	BMessenger(const char *signature, team_id team, status_t *result)
367 	@case 2			signature is not NULL, but identifies no running
368 					application, team is -1, result is (not) NULL
369 	@results		IsValid() and IsTargetLocal() should return false
370 					Target() should return NULL and NULL for looper.
371 					Team() should return -1.
372 					(result should be set to B_BAD_VALUE.)
373  */
BMessengerD2()374 void TBMessengerTester::BMessengerD2()
375 {
376 	// create and check the messengers
377 	BMessenger messenger1(kRunTestApp1Signature, -1, NULL);
378 	check_messenger(messenger1, false, false, -1);
379 	status_t error;
380 	BMessenger messenger2(kRunTestApp1Signature, -1, &error);
381 	check_messenger(messenger2, false, false, -1);
382 	CHK(error == B_BAD_VALUE);
383 }
384 
385 /*
386 	BMessenger(const char *signature, team_id team, status_t *result)
387 	@case 3			signature is NULL, team is > 0, but identifies no running
388 					application, result is (not) NULL
389 	@results		IsValid() and IsTargetLocal() should return false
390 					Target() should return NULL and NULL for looper.
391 					Team() should return -1.
392 					(result should be set to B_BAD_TEAM_ID.)
393  */
BMessengerD3()394 void TBMessengerTester::BMessengerD3()
395 {
396 	BApplication app("application/x-vnd.obos-bmessenger-test");
397 	// run the remote app
398 	AppRunner runner(true);
399 	CHK(runner.Run("AppRunTestApp1") == B_OK);
400 	team_id team = runner.Team();
401 	// quit the remote app
402 	runner.WaitFor(true);
403 	snooze(10000);
404 	// create and check the messengers
405 	BMessenger messenger1(NULL, team, NULL);
406 	check_messenger(messenger1, false, false, -1);
407 	status_t error;
408 	BMessenger messenger2(NULL, team, &error);
409 	check_messenger(messenger2, false, false, -1);
410 	CHK(error == B_BAD_TEAM_ID);
411 }
412 
413 /*
414 	BMessenger(const char *signature, team_id team, status_t *result)
415 	@case 4			signature is not NULL and identifies a running B_ARGV_ONLY
416 					application, team is -1, result is (not) NULL
417 	@results		IsValid() and IsTargetLocal() should return false
418 					Target() should return NULL and NULL for looper.
419 					Team() should return the remote app's team ID.
420 					(result should be set to B_BAD_TYPE.)
421  */
BMessengerD4()422 void TBMessengerTester::BMessengerD4()
423 {
424 	BApplication app("application/x-vnd.obos-bmessenger-test");
425 	// run the remote app
426 	AppRunner runner(true);
427 	CHK(runner.Run("AppRunTestApp1") == B_OK);
428 	// create and check the messengers
429 	BMessenger messenger1(kRunTestApp1Signature, -1, NULL);
430 	check_messenger(messenger1, false, false, runner.Team());
431 	status_t error;
432 	BMessenger messenger2(kRunTestApp1Signature, -1, &error);
433 	check_messenger(messenger2, false, false, runner.Team());
434 	CHK(error == B_BAD_TYPE);
435 	// quit the remote app
436 	runner.WaitFor(true);
437 }
438 
439 /*
440 	BMessenger(const char *signature, team_id team, status_t *result)
441 	@case 5			signature is NULL,
442 					team is > 0 and identifies a running B_ARGV_ONLY
443 					application, result is (not) NULL
444 	@results		IsValid() and IsTargetLocal() should return false
445 					Target() should return NULL and NULL for looper.
446 					Team() should return the remote app's team ID.
447 					(result should be set to B_BAD_TYPE.)
448  */
BMessengerD5()449 void TBMessengerTester::BMessengerD5()
450 {
451 	BApplication app("application/x-vnd.obos-bmessenger-test");
452 	// run the remote app
453 	AppRunner runner(true);
454 	CHK(runner.Run("AppRunTestApp1") == B_OK);
455 	// create and check the messengers
456 	BMessenger messenger1(NULL, runner.Team(), NULL);
457 	check_messenger(messenger1, false, false, runner.Team());
458 	status_t error;
459 	BMessenger messenger2(NULL, runner.Team(), &error);
460 	check_messenger(messenger2, false, false, runner.Team());
461 	CHK(error == B_BAD_TYPE);
462 	// quit the remote app
463 	runner.WaitFor(true);
464 }
465 
466 /*
467 	BMessenger(const char *signature, team_id team, status_t *result)
468 	@case 6			signature is not NULL and identifies a "normal" running
469 					application, team is -1, result is (not) NULL
470 	@results		IsValid() should return true
471 					IsTargetLocal() should return false
472 					Target() should return NULL and NULL for looper.
473 					Team() should return the team ID of the remote application.
474 					(result should be set to B_OK.)
475  */
BMessengerD6()476 void TBMessengerTester::BMessengerD6()
477 {
478 	BApplication app("application/x-vnd.obos-bmessenger-test");
479 	// run the remote apps
480 	AppRunner runner1(true);
481 	AppRunner runner2(true);
482 	CHK(runner1.Run("AppRunTestApp2") == B_OK);
483 	CHK(runner2.Run("AppRunTestApp2") == B_OK);
484 	// create and check the messengers
485 	BMessenger messenger1(kRunTestApp1Signature, -1, NULL);
486 	check_messenger(messenger1, true, false, runner1.Team(), NULL, NULL,
487 					runner2.Team());
488 	status_t error;
489 	BMessenger messenger2(kRunTestApp1Signature, -1, &error);
490 	check_messenger(messenger2, true, false, runner1.Team(), NULL, NULL,
491 					runner2.Team());
492 	CHK(error == B_OK);
493 	// quit the remote apps
494 	runner1.WaitFor(true);
495 	runner2.WaitFor(true);
496 }
497 
498 /*
499 	BMessenger(const char *signature, team_id team, status_t *result)
500 	@case 7			signature is NULL,
501 					team is > 0 and identifies a "normal" running application,
502 					result is (not) NULL
503 	@results		IsValid() should return true
504 					IsTargetLocal() should return false
505 					Target() should return NULL and NULL for looper.
506 					Team() should return the team ID of the remote application (team).
507 					(result should be set to B_OK.)
508  */
BMessengerD7()509 void TBMessengerTester::BMessengerD7()
510 {
511 	BApplication app("application/x-vnd.obos-bmessenger-test");
512 	// run the remote apps
513 	AppRunner runner1(true);
514 	AppRunner runner2(true);
515 	CHK(runner1.Run("AppRunTestApp2") == B_OK);
516 	CHK(runner2.Run("AppRunTestApp2") == B_OK);
517 	// create and check the messengers
518 	BMessenger messenger1(NULL, runner1.Team(), NULL);
519 	check_messenger(messenger1, true, false, runner1.Team());
520 	status_t error;
521 	BMessenger messenger2(NULL, runner1.Team(), &error);
522 	check_messenger(messenger2, true, false, runner1.Team());
523 	CHK(error == B_OK);
524 	// quit the remote apps
525 	runner1.WaitFor(true);
526 	runner2.WaitFor(true);
527 	snooze(10000);
528 	// check the messengers again
529 	check_messenger(messenger1, false, false, runner1.Team());
530 	check_messenger(messenger2, false, false, runner1.Team());
531 }
532 
533 /*
534 	BMessenger(const char *signature, team_id team, status_t *result)
535 	@case 8			signature is not NULL and team is > 0, but both identify
536 					different applications, result is (not) NULL
537 	@results		IsValid() and IsTargetLocal() should return false
538 					Target() should return NULL and NULL for looper.
539 					Team() should return -1.
540 					(result should be set to B_MISMATCHED_VALUES.)
541  */
BMessengerD8()542 void TBMessengerTester::BMessengerD8()
543 {
544 	BApplication app("application/x-vnd.obos-bmessenger-test");
545 	// run the remote apps
546 	AppRunner runner1(true);
547 	AppRunner runner2(true);
548 	CHK(runner1.Run("BMessengerTestApp1") == B_OK);
549 	CHK(runner2.Run("AppRunTestApp2") == B_OK);
550 	// create and check the messengers
551 	BMessenger messenger1(kRunTestApp1Signature, runner1.Team(), NULL);
552 	check_messenger(messenger1, false, false, -1);
553 	status_t error;
554 	BMessenger messenger2(kRunTestApp1Signature, runner1.Team(), &error);
555 	check_messenger(messenger2, false, false, -1);
556 	CHK(error == B_MISMATCHED_VALUES);
557 	// quit the remote apps
558 	runner1.WaitFor(true);
559 	runner2.WaitFor(true);
560 }
561 
562 /*
563 	BMessenger(const char *signature, team_id team, status_t *result)
564 	@case 9			signature is not NULL, team is > 0 and both identify the
565 					same application (more than one app with the given
566 					signature are running), result is (not) NULL
567 	@results		IsValid() should return true
568 					IsTargetLocal() should return false
569 					Target() should return NULL and NULL for looper.
570 					Team() should return the team ID of the remote application (team).
571 					(result should be set to B_OK.)
572  */
BMessengerD9()573 void TBMessengerTester::BMessengerD9()
574 {
575 	BApplication app("application/x-vnd.obos-bmessenger-test");
576 	// run the remote apps
577 	AppRunner runner1(true);
578 	AppRunner runner2(true);
579 	CHK(runner1.Run("AppRunTestApp2") == B_OK);
580 	CHK(runner2.Run("AppRunTestApp2") == B_OK);
581 	// create and check the messengers
582 	BMessenger messenger1(kRunTestApp1Signature, runner1.Team(), NULL);
583 	check_messenger(messenger1, true, false, runner1.Team());
584 	status_t error;
585 	BMessenger messenger2(kRunTestApp1Signature, runner1.Team(), &error);
586 	check_messenger(messenger2, true, false, runner1.Team());
587 	CHK(error == B_OK);
588 	BMessenger messenger3(kRunTestApp1Signature, runner2.Team(), NULL);
589 	check_messenger(messenger3, true, false, runner2.Team());
590 	BMessenger messenger4(kRunTestApp1Signature, runner2.Team(), &error);
591 	check_messenger(messenger4, true, false, runner2.Team());
592 	CHK(error == B_OK);
593 	// quit the remote apps
594 	runner1.WaitFor(true);
595 	runner2.WaitFor(true);
596 }
597 
598 
Suite()599 Test* TBMessengerTester::Suite()
600 {
601 	TestSuite* SuiteOfTests = new TestSuite;
602 
603 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger1);
604 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger2);
605 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger3);
606 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger4);
607 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger5);
608 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger6);
609 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger7);
610 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger8);
611 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger9);
612 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessenger10);
613 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD1);
614 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD2);
615 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD3);
616 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD4);
617 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD5);
618 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD6);
619 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD7);
620 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD8);
621 	ADD_TEST4(BMessenger, SuiteOfTests, TBMessengerTester, BMessengerD9);
622 
623 	return SuiteOfTests;
624 }
625 
626 
627 
628