xref: /haiku/src/tests/kits/app/bapplication/BApplicationTester.cpp (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 //------------------------------------------------------------------------------
2 //	BApplicationTester.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 <Application.h>
13 #include <Handler.h>
14 #include <Looper.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 "PipedAppRunner.h"
24 #include "BApplicationTester.h"
25 
26 // Local Defines ---------------------------------------------------------------
27 
28 // Globals ---------------------------------------------------------------------
29 
30 //------------------------------------------------------------------------------
31 
32 // test_app
33 static
34 void
35 test_app(const char *app, const char *expectedResult)
36 {
37 	// run the app
38 	PipedAppRunner runner;
39 	CHK(runner.Run(app) == B_OK);
40 	runner.WaitFor();
41 	// get the output and compare the result
42 	BString buffer;
43 	CHK(runner.GetOutput(&buffer) == B_OK);
44 if (buffer != expectedResult)
45 printf("result is `%s', but should be `%s'\n", buffer.String(),
46 expectedResult);
47 	CHK(buffer == expectedResult);
48 }
49 
50 
51 /*
52 	BApplication(const char *signature)
53 	@case 1			signature is NULL
54 	@results		Should print error message and quit.
55  */
56 void TBApplicationTester::BApplication1()
57 {
58 	const char *output1 =
59 		"bad signature ((null)), must begin with \"application/\" and "
60 		"can't conflict with existing registered mime types inside "
61 		"the \"application\" media type.\n";
62 	const char *output2 =
63 		"bad signature ((null)), must begin with \"application/\" and "
64 		"can't conflict with existing registered mime types inside "
65 		"the \"application\" media type.\n"
66 		"error: 80000005\n"
67 		"InitCheck(): 80000005\n";
68 	test_app("BApplicationTestApp1", output1);
69 	test_app("BApplicationTestApp1a", output1);
70 	test_app("BApplicationTestApp1b", output2);
71 }
72 
73 /*
74 	BApplication(const char *signature)
75 	@case 2			signature is no valid MIME string
76 	@results		Should print error message and quit.
77  */
78 void TBApplicationTester::BApplication2()
79 {
80 	const char *output1 =
81 		"bad signature (no valid MIME string), must begin with "
82 		"\"application/\" and can't conflict with existing registered "
83 		"mime types inside the \"application\" media type.\n";
84 	const char *output2 =
85 		"bad signature (no valid MIME string), must begin with "
86 		"\"application/\" and can't conflict with existing registered "
87 		"mime types inside the \"application\" media type.\n"
88 		"error: 80000005\n"
89 		"InitCheck(): 80000005\n";
90 	test_app("BApplicationTestApp2", output1);
91 	test_app("BApplicationTestApp2a", output1);
92 	test_app("BApplicationTestApp2b", output2);
93 }
94 
95 /*
96 	BApplication(const char *signature)
97 	@case 3			signature is a valid MIME string, but doesn't have the
98 					"application" supertype
99 	@results		Should print error message and quit.
100  */
101 void TBApplicationTester::BApplication3()
102 {
103 	const char *output1 =
104 		"bad signature (image/gif), must begin with \"application/\" and "
105 		"can't conflict with existing registered mime types inside "
106 		"the \"application\" media type.\n";
107 	const char *output2 =
108 		"bad signature (image/gif), must begin with \"application/\" and "
109 		"can't conflict with existing registered mime types inside "
110 		"the \"application\" media type.\n"
111 		"error: 80000005\n"
112 		"InitCheck(): 80000005\n";
113 	test_app("BApplicationTestApp3", output1);
114 	test_app("BApplicationTestApp3a", output1);
115 	test_app("BApplicationTestApp3b", output2);
116 }
117 
118 /*
119 	BApplication(const char *signature)
120 	@case 4			signature is a valid MIME string with "application"
121 					supertype, but a different one than in the app
122 					attributes/resources
123 	@results		Should print warning message and continue.
124 					InitCheck() should return B_OK.
125  */
126 void TBApplicationTester::BApplication4()
127 {
128 	const char *output1 =
129 		"Signature in rsrc doesn't match constructor arg. "
130 		"(application/x-vnd.obos-bapplication-testapp4,"
131 #ifndef TEST_R5
132 		" "
133 #endif
134 		"application/x-vnd.obos-bapplication-testapp4-or-not)\n"
135 		"InitCheck(): 0\n";
136 	const char *output2 =
137 		"Signature in rsrc doesn't match constructor arg. "
138 		"(application/x-vnd.obos-bapplication-testapp4,"
139 #ifndef TEST_R5
140 		" "
141 #endif
142 		"application/x-vnd.obos-bapplication-testapp4-or-not)\n"
143 		"error: 0\n"
144 		"InitCheck(): 0\n";
145 	test_app("BApplicationTestApp4", output1);
146 	test_app("BApplicationTestApp4a", output1);
147 	test_app("BApplicationTestApp4b", output2);
148 }
149 
150 /*
151 	BApplication(const char *signature)
152 	@case 5			signature is a valid MIME string with "application"
153 					supertype, and the same as in the app attributes/resources
154 	@results		Shouldn't print anything at all and continue.
155 					InitCheck() should return B_OK.
156  */
157 void TBApplicationTester::BApplication5()
158 {
159 	const char *output1 = "InitCheck(): 0\n";
160 	const char *output2 =
161 		"error: 0\n"
162 		"InitCheck(): 0\n";
163 	test_app("BApplicationTestApp5", output1);
164 	test_app("BApplicationTestApp5a", output1);
165 	test_app("BApplicationTestApp5b", output2);
166 }
167 
168 
169 Test* TBApplicationTester::Suite()
170 {
171 	TestSuite* SuiteOfTests = new TestSuite;
172 
173 	ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication1);
174 	ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication2);
175 	ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication3);
176 	ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication4);
177 	ADD_TEST4(BApplication, SuiteOfTests, TBApplicationTester, BApplication5);
178 
179 	return SuiteOfTests;
180 }
181 
182 
183 
184