xref: /haiku/src/tests/kits/app/broster/TeamForTester.cpp (revision 1214ef1b2100f2b3299fc9d8d6142e46f70a4c3f)
1 //------------------------------------------------------------------------------
2 //	TeamForTester.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 <Handler.h>
13 #include <Looper.h>
14 #include <Roster.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 "TeamForTester.h"
25 
26 // Local Defines ---------------------------------------------------------------
27 
28 // Globals ---------------------------------------------------------------------
29 
30 //------------------------------------------------------------------------------
31 
32 /*
33 	team_id TeamFor(const char *signature) const
34 	@case 1			signature is NULL
35 	@results		Should return B_BAD_VALUE.
36 */
37 void TeamForTester::TeamForTestA1()
38 {
39 // R5: crashes when passing a NULL signature
40 #ifndef TEST_R5
41 	BRoster roster;
42 	CHK(roster.TeamFor((const char*)NULL) == B_BAD_VALUE);
43 #endif
44 }
45 
46 /*
47 	team_id TeamFor(const char *signature) const
48 	@case 2			signature is not NULL, but no app with this signature is
49 					running
50 	@results		Should return B_ERROR.
51 */
52 void TeamForTester::TeamForTestA2()
53 {
54 	BRoster roster;
55 	CHK(roster.TeamFor("application/x-vnd.obos-app-run-testapp1") == B_ERROR);
56 }
57 
58 /*
59 	team_id TeamFor(const char *signature) const
60 	@case 3			signature is not NULL and an (two) app(s) with this
61 					signature is (are) running; quit one; quit the second one
62 	@results		Should return the ID of one of the teams;
63 					the ID of the second team; B_ERROR.
64 */
65 void TeamForTester::TeamForTestA3()
66 {
67 	// run the remote apps
68 	AppRunner runner1(true);
69 	AppRunner runner2(true);
70 	CHK(runner1.Run("AppRunTestApp1") == B_OK);
71 	CHK(runner2.Run("AppRunTestApp1") == B_OK);
72 	// create the BRoster and perform the tests
73 	BRoster roster;
74 	team_id team = roster.TeamFor("application/x-vnd.obos-app-run-testapp1");
75 	CHK(team == runner1.Team() || team == runner2.Team());
76 	// quit app 1
77 	runner1.WaitFor(true);
78 	CHK(roster.TeamFor("application/x-vnd.obos-app-run-testapp1")
79 		== runner2.Team());
80 	// quit app 2
81 	runner2.WaitFor(true);
82 	CHK(roster.TeamFor("application/x-vnd.obos-app-run-testapp1") == B_ERROR);
83 }
84 
85 /*
86 	team_id TeamFor(entry_ref *ref) const
87 	@case 1			ref is NULL
88 	@results		Should return B_BAD_VALUE.
89 */
90 void TeamForTester::TeamForTestB1()
91 {
92 // R5: crashes when passing a NULL ref
93 #ifndef TEST_R5
94 	BRoster roster;
95 	CHK(roster.TeamFor((entry_ref*)NULL) == B_BAD_VALUE);
96 #endif
97 }
98 
99 /*
100 	team_id TeamFor(entry_ref *ref) const
101 	@case 2			ref is not NULL, but no app with this ref is running
102 	@results		Should return B_ERROR.
103 */
104 void TeamForTester::TeamForTestB2()
105 {
106 	BRoster roster;
107 	entry_ref ref;
108 	CHK(find_test_app("AppRunTestApp1", &ref) == B_OK);
109 	CHK(roster.TeamFor(&ref) == B_ERROR);
110 }
111 
112 /*
113 	team_id TeamFor(entry_ref *ref) const
114 	@case 3			ref is not NULL and an (two) app(s) with this ref is (are)
115 					running; quit one; quit the second one
116 	@results		Should return the ID of one of the teams;
117 					the ID of the second team; B_ERROR.
118 */
119 void TeamForTester::TeamForTestB3()
120 {
121 	entry_ref ref;
122 	CHK(find_test_app("AppRunTestApp1", &ref) == B_OK);
123 	// run the remote apps
124 	AppRunner runner1(true);
125 	AppRunner runner2(true);
126 	CHK(runner1.Run("AppRunTestApp1") == B_OK);
127 	CHK(runner2.Run("AppRunTestApp1") == B_OK);
128 	// create the BRoster and perform the tests
129 	BRoster roster;
130 	team_id team = roster.TeamFor(&ref);
131 	CHK(team == runner1.Team() || team == runner2.Team());
132 	// quit app 1
133 	runner1.WaitFor(true);
134 	CHK(roster.TeamFor(&ref) == runner2.Team());
135 	// quit app 2
136 	runner2.WaitFor(true);
137 	CHK(roster.TeamFor(&ref) == B_ERROR);
138 }
139 
140 
141 Test* TeamForTester::Suite()
142 {
143 	TestSuite* SuiteOfTests = new TestSuite;
144 
145 	ADD_TEST4(BRoster, SuiteOfTests, TeamForTester, TeamForTestA1);
146 	ADD_TEST4(BRoster, SuiteOfTests, TeamForTester, TeamForTestA2);
147 	ADD_TEST4(BRoster, SuiteOfTests, TeamForTester, TeamForTestA3);
148 
149 	ADD_TEST4(BRoster, SuiteOfTests, TeamForTester, TeamForTestB1);
150 	ADD_TEST4(BRoster, SuiteOfTests, TeamForTester, TeamForTestB2);
151 	ADD_TEST4(BRoster, SuiteOfTests, TeamForTester, TeamForTestB3);
152 
153 	return SuiteOfTests;
154 }
155 
156