//------------------------------------------------------------------------------ // AppRunTester.cpp // //------------------------------------------------------------------------------ // Standard Includes ----------------------------------------------------------- #include // System Includes ------------------------------------------------------------- #include #include #include #include #include #include // Project Includes ------------------------------------------------------------ #include #include #include // Local Includes -------------------------------------------------------------- #include "AppRunner.h" #include "AppRunTester.h" // Local Defines --------------------------------------------------------------- // Globals --------------------------------------------------------------------- //------------------------------------------------------------------------------ // check_output static void check_output(AppRunner &runner, const char *expectedOutput) { BString buffer; CHK(runner.GetOutput(&buffer) == B_OK); if (buffer != expectedOutput) printf("result is `%s', but should be `%s'\n", buffer.String(), expectedOutput); CHK(buffer == expectedOutput); } /* thread_id Run() @case 1 launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest1() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = output1; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp1") == B_OK); CHK(runner2.Run("AppRunTestApp1") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 2 launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: ArgvReceived(), ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest2() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp1", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp1", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 3 launch the app two times: B_MULTIPLE_LAUNCH, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest3() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = output1; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp2") == B_OK); CHK(runner2.Run("AppRunTestApp2") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 4 launch the app two times: B_MULTIPLE_LAUNCH, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: ArgvReceived(), ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest4() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp2", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp2", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 5 launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest5() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp3") == B_OK); CHK(runner2.Run("AppRunTestApp3") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 6 launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest6() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp3", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp3", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 7 launch the app two times: B_SINGLE_LAUNCH, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest7() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp4") == B_OK); CHK(runner2.Run("AppRunTestApp4") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 8 launch the app two times: B_SINGLE_LAUNCH, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), QuitRequested() second app: quits */ void AppRunTester::RunTest8() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp4", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp4", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 9 launch two apps with the same signature: B_SINGLE_LAUNCH | B_ARGV_ONLY, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest9() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = output1; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp3") == B_OK); CHK(runner2.Run("AppRunTestApp3a") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 10 launch two apps with the same signature: B_SINGLE_LAUNCH | B_ARGV_ONLY, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: ArgvReceived(), ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest10() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp3", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp3a", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 11 launch two apps with the same signature: B_SINGLE_LAUNCH, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest11() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = output1; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp4") == B_OK); CHK(runner2.Run("AppRunTestApp4a") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 12 launch two apps with the same signature: B_SINGLE_LAUNCH, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: ArgvReceived(), ReadyToRun(), QuitRequested() */ void AppRunTester::RunTest12() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp4", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp4a", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 13 launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest13() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp5") == B_OK); CHK(runner2.Run("AppRunTestApp5") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 14 launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest14() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp5", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp5", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 15 launch the app two times: B_EXCLUSIVE_LAUNCH, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest15() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp6") == B_OK); CHK(runner2.Run("AppRunTestApp6") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 16 launch the app two times: B_EXCLUSIVE_LAUNCH, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), QuitRequested() second app: quits */ void AppRunTester::RunTest16() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp6", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp6", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 17 launch two apps with the same signature: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest17() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp5") == B_OK); CHK(runner2.Run("AppRunTestApp5a") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 18 launch two apps with the same signature: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest18() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp5", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp5a", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 19 launch two apps with the same signature: B_EXCLUSIVE_LAUNCH, no command line args, send B_QUIT_REQUESTED to both of them @results first app: ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest19() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp6") == B_OK); CHK(runner2.Run("AppRunTestApp6a") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 20 launch two apps with the same signature: B_EXCLUSIVE_LAUNCH, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), QuitRequested() second app: quits */ void AppRunTester::RunTest20() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp6", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp6a", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 21 launch the app two times: first: B_EXCLUSIVE_LAUNCH, second: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), ArgvReceived(), QuitRequested() second app: quits */ void AppRunTester::RunTest21() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::ArgvReceived()\n" "args: c d e\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp6", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp5", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } /* thread_id Run() @case 22 launch the app two times: first: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY, second: B_EXCLUSIVE_LAUNCH, command line args, send B_QUIT_REQUESTED to both of them @results first app: ArgvReceived(), ReadyToRun(), QuitRequested() second app: quits */ void AppRunTester::RunTest22() { BApplication app("application/x-vnd.obos-app-run-test"); const char *output1 = "error: 0\n" "InitCheck(): 0\n" "BApplication::ArgvReceived()\n" "args: a b\n" "BApplication::ReadyToRun()\n" "BApplication::QuitRequested()\n" "BApplication::Run() done: 1\n"; const char *output2 = "error: 80002004\n" "InitCheck(): 80002004\n"; // run the apps AppRunner runner1, runner2; CHK(runner1.Run("AppRunTestApp5", "a b") == B_OK); CHK(runner2.Run("AppRunTestApp6", "c d e") == B_OK); runner1.WaitFor(true); runner2.WaitFor(true); // get the outputs and compare the results check_output(runner1, output1); check_output(runner2, output2); } Test* AppRunTester::Suite() { TestSuite* SuiteOfTests = new TestSuite; ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest1); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest2); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest3); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest4); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest5); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest6); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest7); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest8); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest9); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest10); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest11); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest12); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest13); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest14); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest15); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest16); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest17); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest18); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest19); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest20); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest21); ADD_TEST4(BApplication, SuiteOfTests, AppRunTester, RunTest22); return SuiteOfTests; }