//------------------------------------------------------------------------------ // BApplicationTester.cpp // //------------------------------------------------------------------------------ // Standard Includes ----------------------------------------------------------- #include // System Includes ------------------------------------------------------------- #include #include #include #include #include #include // Project Includes ------------------------------------------------------------ #include #include #include // Local Includes -------------------------------------------------------------- #include "PipedAppRunner.h" #include "BApplicationTester.h" // Local Defines --------------------------------------------------------------- // Globals --------------------------------------------------------------------- //------------------------------------------------------------------------------ // test_app static void test_app(const char *app, const char *expectedResult) { // run the app PipedAppRunner runner; CHK(runner.Run(app) == B_OK); runner.WaitFor(); // get the output and compare the result BString buffer; CHK(runner.GetOutput(&buffer) == B_OK); if (buffer != expectedResult) printf("result is `%s', but should be `%s'\n", buffer.String(), expectedResult); CHK(buffer == expectedResult); } /* BApplication(const char *signature) @case 1 signature is NULL @results Should print error message and quit. */ void TBApplicationTester::BApplication1() { const char *output1 = "bad signature ((null)), must begin with \"application/\" and " "can't conflict with existing registered mime types inside " "the \"application\" media type.\n"; const char *output2 = "bad signature ((null)), must begin with \"application/\" and " "can't conflict with existing registered mime types inside " "the \"application\" media type.\n" "error: 80000005\n" "InitCheck(): 80000005\n"; test_app("BApplicationTestApp1", output1); test_app("BApplicationTestApp1a", output1); test_app("BApplicationTestApp1b", output2); } /* BApplication(const char *signature) @case 2 signature is no valid MIME string @results Should print error message and quit. */ void TBApplicationTester::BApplication2() { const char *output1 = "bad signature (no valid MIME string), must begin with " "\"application/\" and can't conflict with existing registered " "mime types inside the \"application\" media type.\n"; const char *output2 = "bad signature (no valid MIME string), must begin with " "\"application/\" and can't conflict with existing registered " "mime types inside the \"application\" media type.\n" "error: 80000005\n" "InitCheck(): 80000005\n"; test_app("BApplicationTestApp2", output1); test_app("BApplicationTestApp2a", output1); test_app("BApplicationTestApp2b", output2); } /* BApplication(const char *signature) @case 3 signature is a valid MIME string, but doesn't have the "application" supertype @results Should print error message and quit. */ void TBApplicationTester::BApplication3() { const char *output1 = "bad signature (image/gif), must begin with \"application/\" and " "can't conflict with existing registered mime types inside " "the \"application\" media type.\n"; const char *output2 = "bad signature (image/gif), must begin with \"application/\" and " "can't conflict with existing registered mime types inside " "the \"application\" media type.\n" "error: 80000005\n" "InitCheck(): 80000005\n"; test_app("BApplicationTestApp3", output1); test_app("BApplicationTestApp3a", output1); test_app("BApplicationTestApp3b", output2); } /* BApplication(const char *signature) @case 4 signature is a valid MIME string with "application" supertype, but a different one than in the app attributes/resources @results Should print warning message and continue. InitCheck() should return B_OK. */ void TBApplicationTester::BApplication4() { const char *output1 = "Signature in rsrc doesn't match constructor arg. " "(application/x-vnd.obos-bapplication-testapp4," #ifndef TEST_R5 " " #endif "application/x-vnd.obos-bapplication-testapp4-or-not)\n" "InitCheck(): 0\n"; const char *output2 = "Signature in rsrc doesn't match constructor arg. " "(application/x-vnd.obos-bapplication-testapp4," #ifndef TEST_R5 " " #endif "application/x-vnd.obos-bapplication-testapp4-or-not)\n" "error: 0\n" "InitCheck(): 0\n"; test_app("BApplicationTestApp4", output1); test_app("BApplicationTestApp4a", output1); test_app("BApplicationTestApp4b", output2); } /* BApplication(const char *signature) @case 5 signature is a valid MIME string with "application" supertype, and the same as in the app attributes/resources @results Shouldn't print anything at all and continue. InitCheck() should return B_OK. */ void TBApplicationTester::BApplication5() { const char *output1 = "InitCheck(): 0\n"; const char *output2 = "error: 0\n" "InitCheck(): 0\n"; test_app("BApplicationTestApp5", output1); test_app("BApplicationTestApp5a", output1); test_app("BApplicationTestApp5b", output2); } Test* TBApplicationTester::Suite() { TestSuite* SuiteOfTests = new TestSuite; ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication1); ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication2); ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication3); ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication4); ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication5); return SuiteOfTests; }