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