128d519feSIngo Weinhold //------------------------------------------------------------------------------
228d519feSIngo Weinhold // IsRunningTester.cpp
328d519feSIngo Weinhold //
428d519feSIngo Weinhold //------------------------------------------------------------------------------
528d519feSIngo Weinhold
628d519feSIngo Weinhold // Standard Includes -----------------------------------------------------------
728d519feSIngo Weinhold #include <stdio.h>
828d519feSIngo Weinhold
928d519feSIngo Weinhold // System Includes -------------------------------------------------------------
10*76a5f348Sbeveloper #include <Message.h>
11*76a5f348Sbeveloper #include <OS.h>
1228d519feSIngo Weinhold #include <Handler.h>
1328d519feSIngo Weinhold #include <Looper.h>
1428d519feSIngo Weinhold #include <Roster.h>
1528d519feSIngo Weinhold #include <String.h>
1628d519feSIngo Weinhold
1728d519feSIngo Weinhold // Project Includes ------------------------------------------------------------
1828d519feSIngo Weinhold #include <TestShell.h>
1928d519feSIngo Weinhold #include <TestUtils.h>
2028d519feSIngo Weinhold #include <cppunit/TestAssert.h>
2128d519feSIngo Weinhold
2228d519feSIngo Weinhold // Local Includes --------------------------------------------------------------
2328d519feSIngo Weinhold #include "AppRunner.h"
2428d519feSIngo Weinhold #include "IsRunningTester.h"
2528d519feSIngo Weinhold
2628d519feSIngo Weinhold // Local Defines ---------------------------------------------------------------
2728d519feSIngo Weinhold
2828d519feSIngo Weinhold // Globals ---------------------------------------------------------------------
2928d519feSIngo Weinhold
3028d519feSIngo Weinhold //------------------------------------------------------------------------------
3128d519feSIngo Weinhold
3228d519feSIngo Weinhold /*
3328d519feSIngo Weinhold bool IsRunning(const char *signature) const
3428d519feSIngo Weinhold @case 1 signature is NULL
3528d519feSIngo Weinhold @results Should return false.
3628d519feSIngo Weinhold */
IsRunningTestA1()3728d519feSIngo Weinhold void IsRunningTester::IsRunningTestA1()
3828d519feSIngo Weinhold {
3928d519feSIngo Weinhold // R5: crashes when passing a NULL signature
4028d519feSIngo Weinhold #ifndef TEST_R5
4128d519feSIngo Weinhold BRoster roster;
4228d519feSIngo Weinhold CHK(roster.IsRunning((const char*)NULL) == false);
4328d519feSIngo Weinhold #endif
4428d519feSIngo Weinhold }
4528d519feSIngo Weinhold
4628d519feSIngo Weinhold /*
4728d519feSIngo Weinhold bool IsRunning(const char *signature) const
4828d519feSIngo Weinhold @case 2 signature is not NULL, but no app with this signature is
4928d519feSIngo Weinhold running
5028d519feSIngo Weinhold @results Should return false.
5128d519feSIngo Weinhold */
IsRunningTestA2()5228d519feSIngo Weinhold void IsRunningTester::IsRunningTestA2()
5328d519feSIngo Weinhold {
5428d519feSIngo Weinhold BRoster roster;
5528d519feSIngo Weinhold CHK(roster.IsRunning("application/x-vnd.obos-app-run-testapp1") == false);
5628d519feSIngo Weinhold }
5728d519feSIngo Weinhold
5828d519feSIngo Weinhold /*
5928d519feSIngo Weinhold bool IsRunning(const char *signature) const
6028d519feSIngo Weinhold @case 3 signature is not NULL and an (two) app(s) with this
6128d519feSIngo Weinhold signature is (are) running; quit one; quit the second one
6228d519feSIngo Weinhold @results Should return true; true; false.
6328d519feSIngo Weinhold */
IsRunningTestA3()6428d519feSIngo Weinhold void IsRunningTester::IsRunningTestA3()
6528d519feSIngo Weinhold {
6628d519feSIngo Weinhold // run the remote apps
6728d519feSIngo Weinhold AppRunner runner1(true);
6828d519feSIngo Weinhold AppRunner runner2(true);
6928d519feSIngo Weinhold CHK(runner1.Run("AppRunTestApp1") == B_OK);
7028d519feSIngo Weinhold CHK(runner2.Run("AppRunTestApp1") == B_OK);
7128d519feSIngo Weinhold // create the BRoster and perform the tests
7228d519feSIngo Weinhold BRoster roster;
7328d519feSIngo Weinhold CHK(roster.IsRunning("application/x-vnd.obos-app-run-testapp1") == true);
7428d519feSIngo Weinhold // quit app 1
7528d519feSIngo Weinhold runner1.WaitFor(true);
7628d519feSIngo Weinhold CHK(roster.IsRunning("application/x-vnd.obos-app-run-testapp1") == true);
7728d519feSIngo Weinhold // quit app 2
7828d519feSIngo Weinhold runner2.WaitFor(true);
7928d519feSIngo Weinhold CHK(roster.IsRunning("application/x-vnd.obos-app-run-testapp1") == false);
8028d519feSIngo Weinhold }
8128d519feSIngo Weinhold
8228d519feSIngo Weinhold /*
8328d519feSIngo Weinhold bool IsRunning(entry_ref *ref) const
8428d519feSIngo Weinhold @case 1 ref is NULL
8528d519feSIngo Weinhold @results Should return false.
8628d519feSIngo Weinhold */
IsRunningTestB1()8728d519feSIngo Weinhold void IsRunningTester::IsRunningTestB1()
8828d519feSIngo Weinhold {
8928d519feSIngo Weinhold // R5: crashes when passing a NULL ref
9028d519feSIngo Weinhold #ifndef TEST_R5
9128d519feSIngo Weinhold BRoster roster;
9228d519feSIngo Weinhold CHK(roster.IsRunning((entry_ref*)NULL) == false);
9328d519feSIngo Weinhold #endif
9428d519feSIngo Weinhold }
9528d519feSIngo Weinhold
9628d519feSIngo Weinhold /*
9728d519feSIngo Weinhold bool IsRunning(entry_ref *ref) const
9828d519feSIngo Weinhold @case 2 ref is not NULL, but no app with this ref is running
9928d519feSIngo Weinhold @results Should return false.
10028d519feSIngo Weinhold */
IsRunningTestB2()10128d519feSIngo Weinhold void IsRunningTester::IsRunningTestB2()
10228d519feSIngo Weinhold {
10328d519feSIngo Weinhold BRoster roster;
10428d519feSIngo Weinhold entry_ref ref;
10528d519feSIngo Weinhold CHK(find_test_app("AppRunTestApp1", &ref) == B_OK);
10628d519feSIngo Weinhold CHK(roster.IsRunning(&ref) == false);
10728d519feSIngo Weinhold }
10828d519feSIngo Weinhold
10928d519feSIngo Weinhold /*
11028d519feSIngo Weinhold bool IsRunning(entry_ref *ref) const
11128d519feSIngo Weinhold @case 3 ref is not NULL and an (two) app(s) with this ref is (are)
11228d519feSIngo Weinhold running; quit one; quit the second one
11328d519feSIngo Weinhold @results Should return true; true; false.
11428d519feSIngo Weinhold */
IsRunningTestB3()11528d519feSIngo Weinhold void IsRunningTester::IsRunningTestB3()
11628d519feSIngo Weinhold {
11728d519feSIngo Weinhold entry_ref ref;
11828d519feSIngo Weinhold CHK(find_test_app("AppRunTestApp1", &ref) == B_OK);
11928d519feSIngo Weinhold // run the remote apps
12028d519feSIngo Weinhold AppRunner runner1(true);
12128d519feSIngo Weinhold AppRunner runner2(true);
12228d519feSIngo Weinhold CHK(runner1.Run("AppRunTestApp1") == B_OK);
12328d519feSIngo Weinhold CHK(runner2.Run("AppRunTestApp1") == B_OK);
12428d519feSIngo Weinhold // create the BRoster and perform the tests
12528d519feSIngo Weinhold BRoster roster;
12628d519feSIngo Weinhold CHK(roster.IsRunning(&ref) == true);
12728d519feSIngo Weinhold // quit app 1
12828d519feSIngo Weinhold runner1.WaitFor(true);
12928d519feSIngo Weinhold CHK(roster.IsRunning(&ref) == true);
13028d519feSIngo Weinhold // quit app 2
13128d519feSIngo Weinhold runner2.WaitFor(true);
13228d519feSIngo Weinhold CHK(roster.IsRunning(&ref) == false);
13328d519feSIngo Weinhold }
13428d519feSIngo Weinhold
13528d519feSIngo Weinhold
Suite()13628d519feSIngo Weinhold Test* IsRunningTester::Suite()
13728d519feSIngo Weinhold {
13828d519feSIngo Weinhold TestSuite* SuiteOfTests = new TestSuite;
13928d519feSIngo Weinhold
140659758faSIngo Weinhold ADD_TEST4(BRoster, SuiteOfTests, IsRunningTester, IsRunningTestA1);
141659758faSIngo Weinhold ADD_TEST4(BRoster, SuiteOfTests, IsRunningTester, IsRunningTestA2);
142659758faSIngo Weinhold ADD_TEST4(BRoster, SuiteOfTests, IsRunningTester, IsRunningTestA3);
14328d519feSIngo Weinhold
144659758faSIngo Weinhold ADD_TEST4(BRoster, SuiteOfTests, IsRunningTester, IsRunningTestB1);
145659758faSIngo Weinhold ADD_TEST4(BRoster, SuiteOfTests, IsRunningTester, IsRunningTestB2);
146659758faSIngo Weinhold ADD_TEST4(BRoster, SuiteOfTests, IsRunningTester, IsRunningTestB3);
14728d519feSIngo Weinhold
14828d519feSIngo Weinhold return SuiteOfTests;
14928d519feSIngo Weinhold }
15028d519feSIngo Weinhold
151