xref: /haiku/src/tests/kits/interface/bbitmap/SetBitsTester.cpp (revision 4c8e85b316c35a9161f5a1c50ad70bc91c83a76f)
1 //------------------------------------------------------------------------------
2 //	SetBitsTester.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 <Bitmap.h>
14 #include <String.h>
15 
16 // Project Includes ------------------------------------------------------------
17 #include <TestShell.h>
18 #include <TestUtils.h>
19 #include <cppunit/TestAssert.h>
20 
21 // Local Includes --------------------------------------------------------------
22 #include "SetBitsTester.h"
23 
24 // Local Defines ---------------------------------------------------------------
25 
26 // Globals ---------------------------------------------------------------------
27 
28 //------------------------------------------------------------------------------
29 
30 struct set_bits_test_data {
31 	color_space	space;
32 	int32 		width;
33 	int32 		height;
34 	int32		offset;
35 	int32		length;
36 	int32		pixel_count;
37 	uint8		data[256];
38 };
39 
40 // B_RGB32, width = 3
41 set_bits_test_data rgb32_test_data3_initial = {
42 	B_RGB32, 3, 2,
43 	8, 24, 6,
44 	{
45 		  0,   0,   0, 255,		  8,   8,   8, 255,		128, 128, 128, 255,
46 		255, 255, 255, 255,		  0,   0, 228, 255,		  0, 102,   0, 255,
47 	}
48 };
49 
50 set_bits_test_data rgb32_test_data3a_initial = {
51 	B_RGB32, 3, 2,
52 	8, 24, 6,
53 	{
54 		  0,   0,   0,   0,		  8,   8,   8,   0,		128, 128, 128,   0,
55 		255, 255, 255,   0,		  0,   0, 228,   0,		  0, 102,   0,   0,
56 	}
57 };
58 
59 set_bits_test_data rgb32_test_data3_set = {
60 	B_RGB32, 3, 2,
61 	0, 18, 6,
62 	{
63 		255, 255, 152,		 51, 102, 102,		 51, 255, 203,
64 		  0, 102,  51,		203, 152, 203,		203, 203,   0,
65 	}
66 };
67 
68 set_bits_test_data rgb32_test_data3p_set = {
69 	B_RGB32, 3, 1,
70 	0, 9, 3,
71 	{
72 		 51, 255, 203,		0, 102,  51,		203, 152, 203,
73 	}
74 };
75 
76 set_bits_test_data rgb32_test_data3_final = {
77 	B_RGB32, 3, 2,
78 	0, 24, 6,
79 	{
80 		152, 255, 255, 255,		102, 102,  51, 255,		203, 255,  51, 255,
81 		 51, 102,   0, 255,		203, 152, 203, 255,		  0, 203, 203, 255,
82 	}
83 };
84 
85 set_bits_test_data rgb32_test_data3a_final = {
86 	B_RGB32, 3, 2,
87 	0, 24, 6,
88 	{
89 		152, 255, 255,   0,		102, 102,  51,   0,		203, 255,  51,   0,
90 		 51, 102,   0,   0,		203, 152, 203,   0,		  0, 203, 203,   0,
91 	}
92 };
93 
94 set_bits_test_data rgb32_test_data3g_final = {
95 	B_RGB32, 3, 2,
96 	0, 24, 6,
97 	{
98 		255, 255, 255, 255,		  0,   0,   0, 255,		255, 255, 255, 255,
99 		  0,   0,   0, 255,		255, 255, 255, 255,		255, 255, 255, 255,
100 	}
101 };
102 
103 set_bits_test_data rgb32_test_data3p_final = {
104 	B_RGB32, 3, 2,
105 	0, 24, 6,
106 	{
107 		  0,   0,   0, 255,		  8,   8,   8, 255,		203, 255,  51, 255,
108 		 51, 102,   0, 255,		203, 152, 203, 255,		  0, 102,   0, 255,
109 	}
110 };
111 
112 set_bits_test_data rgb32_test_data3ap_final = {
113 	B_RGB32, 3, 2,
114 	0, 24, 6,
115 	{
116 		  0,   0,   0,   0,		  8,   8,   8,   0,		203, 255,  51,   0,
117 		 51, 102,   0,   0,		203, 152, 203,   0,		  0, 102,   0,   0,
118 	}
119 };
120 
121 // B_RGB32, width = 4
122 set_bits_test_data rgb32_test_data4_initial = {
123 	B_RGB32, 4, 2,
124 	8, 32, 8,
125 	{
126 		  0,   0,   0, 255,		  8,   8,   8, 255,		128, 128, 128, 255,
127 		255, 255, 255, 255,		  0,   0, 228, 255,		  0, 102,   0, 255,
128 		255,   0,   0, 255,		152, 102,   0, 255,
129 	}
130 };
131 
132 set_bits_test_data rgb32_test_data4a_initial = {
133 	B_RGB32, 4, 2,
134 	8, 32, 8,
135 	{
136 		  0,   0,   0,   0,		  8,   8,   8,   0,		128, 128, 128,   0,
137 		255, 255, 255,   0,		  0,   0, 228,   0,		  0, 102,   0,   0,
138 		255,   0,   0,   0,		152, 102,   0,   0,
139 	}
140 };
141 
142 set_bits_test_data rgb32_test_data4_set = {
143 	B_RGB32, 4, 2,
144 	0, 24, 8,
145 	{
146 		255, 255, 152,		 51, 102, 102,		 51, 255, 203,
147 		  0, 102,  51,		203, 152, 203,		203, 203,   0,
148 		152, 255, 203,		  0,  30,   0,
149 	}
150 };
151 
152 set_bits_test_data rgb32_test_data4p_set = rgb32_test_data3p_set;
153 
154 set_bits_test_data rgb32_test_data4_final = {
155 	B_RGB32, 4, 2,
156 	0, 32, 8,
157 	{
158 		152, 255, 255, 255,		102, 102,  51, 255,		203, 255,  51, 255,
159 		 51, 102,   0, 255,		203, 152, 203, 255,		  0, 203, 203, 255,
160 		203, 255, 152, 255,		  0,  30,   0, 255,
161 	}
162 };
163 
164 set_bits_test_data rgb32_test_data4a_final = {
165 	B_RGB32, 4, 2,
166 	0, 32, 8,
167 	{
168 		152, 255, 255,   0,		102, 102,  51,   0,		203, 255,  51,   0,
169 		 51, 102,   0,   0,		203, 152, 203,   0,		  0, 203, 203,   0,
170 		203, 255, 152,   0,		  0,  30,   0,   0,
171 	}
172 };
173 
174 set_bits_test_data rgb32_test_data4g_final = {
175 	B_RGB32, 4, 2,
176 	0, 32, 8,
177 	{
178 		255, 255, 255, 255,		  0,   0,   0, 255,		255, 255, 255, 255,
179 		  0,   0,   0, 255,		255, 255, 255, 255,		255, 255, 255, 255,
180 		255, 255, 255, 255,		  0,   0,   0, 255,
181 	}
182 };
183 
184 set_bits_test_data rgb32_test_data4p_final = {
185 	B_RGB32, 4, 2,
186 	0, 32, 8,
187 	{
188 		  0,   0,   0, 255,		  8,   8,   8, 255,		203, 255,  51, 255,
189 		 51, 102,   0, 255,		203, 152, 203, 255,		  0, 102,   0, 255,
190 		255,   0,   0, 255,		152, 102,   0, 255,
191 	}
192 };
193 
194 set_bits_test_data rgb32_test_data4ap_final = {
195 	B_RGB32, 4, 2,
196 	0, 32, 8,
197 	{
198 		  0,   0,   0,   0,		  8,   8,   8,   0,		203, 255,  51,   0,
199 		 51, 102,   0,   0,		203, 152, 203,   0,		  0, 102,   0,   0,
200 		255,   0,   0,   0,		152, 102,   0,   0,
201 	}
202 };
203 
204 // B_CMAP8, width = 3
205 set_bits_test_data cmap8_test_data3_initial = {
206 	B_CMAP8, 3, 2,
207 	2, 8, 6,
208 	{
209 		  0,   1,  16,   0, 255,  43, 159,   0,
210 	}
211 };
212 
213 set_bits_test_data cmap8_test_data3_set = {
214 	B_CMAP8, 3, 2,
215 	0, 8, 6,
216 	{
217 		253, 181,  83,   0, 158, 129, 101,   0,
218 	}
219 };
220 
221 set_bits_test_data cmap8_test_data3a_set = {
222 	B_CMAP8, 3, 2,
223 	0, 6, 6,
224 	{
225 		253, 181,  83, 158, 129, 101,
226 	}
227 };
228 
229 set_bits_test_data cmap8_test_data3p_set = {
230 	B_CMAP8, 3, 1,
231 	0, 4, 3,
232 	{
233 		 83,   0, 158, 129,
234 	}
235 };
236 
237 set_bits_test_data cmap8_test_data3ap_set = {
238 	B_CMAP8, 3, 1,
239 	0, 3, 3,
240 	{
241 		 83, 158, 129,
242 	}
243 };
244 
245 set_bits_test_data &cmap8_test_data3_final = cmap8_test_data3_set;
246 
247 set_bits_test_data cmap8_test_data3g_final = {
248 	B_CMAP8, 3, 2,
249 	0, 8, 6,
250 	{
251 		 63,   0,  63,   0,   0,  63,  63,   0,
252 	}
253 };
254 
255 set_bits_test_data cmap8_test_data3p_final = {
256 	B_CMAP8, 3, 2,
257 	0, 8, 6,
258 	{
259 		  0,   1,  83,   0, 158, 129, 159,   0,
260 	}
261 };
262 
263 // B_CMAP8, width = 4
264 set_bits_test_data cmap8_test_data4_initial = {
265 	B_CMAP8, 4, 2,
266 	2, 8, 8,
267 	{
268 		  0,   1,  16, 255,  43, 159,  32, 126
269 	}
270 };
271 
272 set_bits_test_data cmap8_test_data4_set = {
273 	B_CMAP8, 4, 2,
274 	0, 8, 8,
275 	{
276 		253, 181,  83, 158, 129, 101,  71,  61
277 	}
278 };
279 
280 set_bits_test_data cmap8_test_data4p_set = {
281 	B_CMAP8, 4, 2,
282 	0, 3, 3,
283 	{
284 		 83, 158, 129,
285 	}
286 };
287 
288 set_bits_test_data &cmap8_test_data4_final = cmap8_test_data4_set;
289 
290 set_bits_test_data cmap8_test_data4g_final = {
291 	B_CMAP8, 4, 2,
292 	0, 8, 8,
293 	{
294 		 63,   0,  63,   0,  63,  63,  63,   0
295 	}
296 };
297 
298 set_bits_test_data cmap8_test_data4p_final = {
299 	B_CMAP8, 4, 2,
300 	2, 8, 8,
301 	{
302 		  0,   1,  83, 158, 129, 159,  32, 126
303 	}
304 };
305 
306 // B_RGB32_BIG
307 set_bits_test_data rgb32_big_test_data4_initial = {
308 	B_RGB32_BIG, 4, 2,
309 	0, 32, 8,
310 	{
311 		  0,   0,   0, 255,		  8,   8,   8, 255,		128, 128, 128, 255,
312 		255, 255, 255, 255,		228,   0,   0, 255,		  0, 102,   0, 255,
313 		  0,   0, 255, 255,		  0, 102, 152, 255,
314 	}
315 };
316 
317 set_bits_test_data rgb32_big_test_data4_set = {
318 	B_RGB32_BIG, 4, 2,
319 	0, 32, 8,
320 	{
321 		255, 255, 152, 255,		 51, 102, 102, 255,		 51, 255, 203, 255,
322 		  0, 102,  51, 255,		203, 152, 203, 255,		203, 203,   0, 255,
323 		152, 255, 203, 255,		  0,  30,   0, 255,
324 	}
325 };
326 
327 set_bits_test_data rgb32_big_test_data4_final = {
328 	B_RGB32_BIG, 4, 2,
329 	0, 32, 8,
330 	{
331 		255, 255, 152,   0,		 51, 102, 102,   0,		 51, 255, 203,   0,
332 		  0, 102,  51,   0,		203, 152, 203,   0,		203, 203,   0,   0,
333 		152, 255, 203,   0,		  0,  30,   0,   0,
334 	}
335 };
336 
337 // B_GRAY1, width = 3
338 set_bits_test_data gray1_test_data3_initial = {
339 	B_GRAY1, 3, 2,
340 	0, 8, 6,
341 	{
342 		0x20, 0x00, 0x00, 0x00,	// 001
343 		0x80, 0x00, 0x00, 0x00,	// 100
344 	}
345 };
346 
347 set_bits_test_data gray1_test_data3_set = {
348 	B_GRAY1, 3, 2,
349 	0, 8, 6,
350 	{
351 		0xa0, 0x00, 0x00, 0x00,	// 101
352 		0x60, 0x00, 0x00, 0x00,	// 011
353 	}
354 };
355 
356 set_bits_test_data &gray1_test_data3_final = gray1_test_data3_set;
357 
358 // B_GRAY1, width = 4
359 set_bits_test_data gray1_test_data4_initial = {
360 	B_GRAY1, 4, 2,
361 	0, 8, 8,
362 	{
363 		0x30, 0x00, 0x00, 0x00,	// 0011
364 		0x00, 0x00, 0x00, 0x00,	// 0000
365 	}
366 };
367 
368 set_bits_test_data gray1_test_data4_set = {
369 	B_GRAY1, 4, 2,
370 	0, 8, 8,
371 	{
372 		0xa0, 0x00, 0x00, 0x00,	// 1010
373 		0xe0, 0x00, 0x00, 0x00,	// 1110
374 	}
375 };
376 
377 set_bits_test_data &gray1_test_data4_final = gray1_test_data4_set;
378 
379 #if 0
380 // dump_bitmap
381 static
382 void
383 dump_bitmap(const BBitmap *bitmap)
384 {
385 	BRect bounds = bitmap->Bounds();
386 	int32 width = bounds.IntegerWidth() + 1;
387 	int32 height = bounds.IntegerHeight() + 1;
388 	printf("BBitmap: %ldx%ld, %x\n", width, height, bitmap->ColorSpace());
389 	int32 bpr = bitmap->BytesPerRow();
390 	const uint8 *bits = (const uint8*)bitmap->Bits();
391 	for (int32 y = 0; y < height; y++) {
392 		const uint8 *row = bits + y * bpr;
393 		for (int32 i = 0; i < bpr; i++)
394 			printf("%02x ", row[i]);
395 		printf("\n");
396 	}
397 }
398 #endif
399 
400 // test_set_bits
401 static
402 void
403 test_set_bits(const set_bits_test_data &initialData,
404 			  const set_bits_test_data &setData,
405 			  const set_bits_test_data &finalData)
406 {
407 	BRect bounds(0, 0, initialData.width - 1, initialData.height - 1);
408 	BBitmap bitmap(bounds, initialData.space);
409 	CHK(bitmap.InitCheck() == B_OK);
410 	CHK(bitmap.Bounds() == bounds);
411 	CHK(bitmap.BitsLength() == initialData.length);
412 	memcpy(bitmap.Bits(), initialData.data, initialData.length);
413 //dump_bitmap(&bitmap);
414 //printf("bitmap.SetBits(%p, %ld, %ld, %x)\n", setData.data, setData.length, 0L,
415 //setData.space);
416 	bitmap.SetBits(setData.data, setData.length, 0, setData.space);
417 //dump_bitmap(&bitmap);
418 	CHK(memcmp(bitmap.Bits(), finalData.data, finalData.length) == 0);
419 }
420 
421 // test_set_bits2
422 static
423 void
424 test_set_bits2(const set_bits_test_data &initialData,
425 			   const set_bits_test_data &setData,
426 			   const set_bits_test_data &finalData)
427 {
428 	BRect bounds(0, 0, initialData.width - 1, initialData.height - 1);
429 	BBitmap bitmap(bounds, initialData.space);
430 	CHK(bitmap.InitCheck() == B_OK);
431 	CHK(bitmap.Bounds() == bounds);
432 	CHK(bitmap.BitsLength() == initialData.length);
433 	memcpy(bitmap.Bits(), initialData.data, initialData.length);
434 //dump_bitmap(&bitmap);
435 //printf("bitmap.SetBits(%p, %ld, %ld, %x)\n", setData.data, setData.length,
436 //initialData.offset, setData.space);
437 	bitmap.SetBits(setData.data, setData.length, initialData.offset,
438 				   setData.space);
439 //dump_bitmap(&bitmap);
440 	CHK(memcmp(bitmap.Bits(), finalData.data, finalData.length) == 0);
441 }
442 
443 // test for Haiku only API
444 #ifndef TEST_R5
445 
446 // test_import_bits
447 static
448 void
449 test_import_bits(const set_bits_test_data &initialData,
450 				 const set_bits_test_data &setData,
451 				 const set_bits_test_data &finalData)
452 {
453 	// init bitmap 1
454 	BRect bounds(0, 0, initialData.width - 1, initialData.height - 1);
455 	BBitmap bitmap(bounds, initialData.space);
456 	CHK(bitmap.InitCheck() == B_OK);
457 	CHK(bitmap.Bounds() == bounds);
458 	CHK(bitmap.BitsLength() == initialData.length);
459 	memcpy(bitmap.Bits(), initialData.data, initialData.length);
460 	// init bitmap 2
461 	BRect bounds2(0, 0, setData.width - 1, setData.height - 1);
462 	BBitmap bitmap2(bounds2, setData.space);
463 	CHK(bitmap2.InitCheck() == B_OK);
464 	CHK(bitmap2.Bounds() == bounds2);
465 	CHK(bitmap2.BitsLength() == setData.length);
466 	memcpy(bitmap2.Bits(), setData.data, setData.length);
467 	// import bits
468 	CHK(bounds == bounds2);
469 	CHK(initialData.length == finalData.length);
470 //dump_bitmap(&bitmap);
471 //printf("bitmap.ImportBits(): (%ld, %ld, %x) -> (%ld, %ld, %x)\n",
472 //bounds.IntegerWidth() + 1, bounds.IntegerHeight() + 1, initialData.space,
473 //bounds2.IntegerWidth() + 1, bounds2.IntegerHeight() + 1, setData.space);
474 	CHK(bitmap.ImportBits(&bitmap2) == B_OK);
475 //dump_bitmap(&bitmap);
476 	CHK(memcmp(bitmap.Bits(), finalData.data, finalData.length) == 0);
477 }
478 
479 #endif	// test for Haiku only API
480 
481 /*
482 	void SetBits(const void *data, int32 length, int32 offset,
483 				 color_space colorSpace)
484 	@case 1			overwrite complete bitmap data, offset = 0,
485 					different color spaces, no row padding
486 	@results		Bitmap should contain the correct data.
487  */
488 void SetBitsTester::SetBits1()
489 {
490 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
491 #ifdef TEST_R5
492 	test_set_bits(rgb32_test_data3_initial, rgb32_test_data3_set,
493 				  rgb32_test_data3a_final);
494 	test_set_bits(rgb32_test_data4_initial, rgb32_test_data4_set,
495 				  rgb32_test_data4a_final);
496 	test_set_bits(cmap8_test_data4_initial, cmap8_test_data4_set,
497 				  cmap8_test_data4_final);
498 
499 	test_set_bits(rgb32_test_data4a_initial, cmap8_test_data4_set,
500 				  rgb32_test_data4_final);
501 	test_set_bits(cmap8_test_data4_initial, rgb32_test_data4_set,
502 				  cmap8_test_data4_final);
503 #else
504 	test_set_bits(rgb32_test_data3_initial, rgb32_test_data3_set,
505 				  rgb32_test_data3_final);
506 	test_set_bits(rgb32_test_data4_initial, rgb32_test_data4_set,
507 				  rgb32_test_data4_final);
508 	test_set_bits(cmap8_test_data4_initial, cmap8_test_data4_set,
509 				  cmap8_test_data4_final);
510 
511 	test_set_bits(rgb32_test_data4_initial, cmap8_test_data4_set,
512 				  rgb32_test_data4_final);
513 	test_set_bits(cmap8_test_data4_initial, rgb32_test_data4_set,
514 				  cmap8_test_data4_final);
515 #endif
516 }
517 
518 /*
519 	void SetBits(const void *data, int32 length, int32 offset,
520 				 color_space colorSpace)
521 	@case 2			overwrite complete bitmap data, offset = 0,
522 					different color spaces, row padding
523 	@results		Bitmap should contain the correct data.
524  */
525 void SetBitsTester::SetBits2()
526 {
527 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
528 	test_set_bits(cmap8_test_data3_initial, cmap8_test_data3_set,
529 				  cmap8_test_data3_final);
530 	test_set_bits(gray1_test_data3_initial, gray1_test_data3_set,
531 				  gray1_test_data3_final);
532 	test_set_bits(gray1_test_data4_initial, gray1_test_data4_set,
533 				  gray1_test_data4_final);
534 
535 // ignores source row padding
536 	test_set_bits(rgb32_test_data3a_initial, cmap8_test_data3a_set,
537 				  rgb32_test_data3_final);
538 #ifndef TEST_R5
539 // R5: broken: no effect
540 	test_set_bits(rgb32_test_data3a_initial, gray1_test_data3_set,
541 				  rgb32_test_data3g_final);
542 	test_set_bits(rgb32_test_data4a_initial, gray1_test_data4_set,
543 				  rgb32_test_data4g_final);
544 // R5: broken: ignores target bitmap row padding
545 	test_set_bits(cmap8_test_data3_initial, rgb32_test_data3_set,
546 				  cmap8_test_data3_final);
547 // R5: broken: simply copies the data
548 	test_set_bits(cmap8_test_data3_initial, gray1_test_data3_set,
549 				  cmap8_test_data3g_final);
550 	test_set_bits(cmap8_test_data4_initial, gray1_test_data4_set,
551 				  cmap8_test_data4g_final);
552 #endif
553 }
554 
555 /*
556 	void SetBits(const void *data, int32 length, int32 offset,
557 				 color_space colorSpace)
558 	@case 3			overwrite bitmap data partially, offset = 0,
559 					different color spaces, no row padding
560 	@results		Bitmap should contain the correct data.
561  */
562 void SetBitsTester::SetBits3()
563 {
564 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
565 #ifdef TEST_R5
566 	test_set_bits2(rgb32_test_data3a_initial, rgb32_test_data3p_set,
567 				   rgb32_test_data3ap_final);
568 	test_set_bits2(rgb32_test_data4a_initial, rgb32_test_data4p_set,
569 				   rgb32_test_data4ap_final);
570 	test_set_bits2(cmap8_test_data4_initial, cmap8_test_data4p_set,
571 				   cmap8_test_data4p_final);
572 #else
573 	test_set_bits2(rgb32_test_data3_initial, rgb32_test_data3p_set,
574 				   rgb32_test_data3p_final);
575 	test_set_bits2(rgb32_test_data4_initial, rgb32_test_data4p_set,
576 				   rgb32_test_data4p_final);
577 	test_set_bits2(cmap8_test_data4_initial, cmap8_test_data4p_set,
578 				   cmap8_test_data4p_final);
579 #endif
580 
581 	test_set_bits2(rgb32_test_data4_initial, cmap8_test_data4p_set,
582 				   rgb32_test_data4p_final);
583 	test_set_bits2(cmap8_test_data4_initial, rgb32_test_data4p_set,
584 				   cmap8_test_data4p_final);
585 }
586 
587 /*
588 	void SetBits(const void *data, int32 length, int32 offset,
589 				 color_space colorSpace)
590 	@case 4			overwrite bitmap data partially, offset = 0,
591 					different color spaces, row padding
592 	@results		Bitmap should contain the correct data.
593  */
594 void SetBitsTester::SetBits4()
595 {
596 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
597 	test_set_bits2(cmap8_test_data3_initial, cmap8_test_data3p_set,
598 				   cmap8_test_data3p_final);
599 
600 	test_set_bits2(rgb32_test_data3_initial, cmap8_test_data3ap_set,
601 				   rgb32_test_data3p_final);
602 // R5: broken: ignores target bitmap row padding
603 #ifndef TEST_R5
604 	test_set_bits2(cmap8_test_data3_initial, rgb32_test_data3p_set,
605 				   cmap8_test_data3p_final);
606 #endif
607 }
608 
609 // Haiku only API
610 #ifndef TEST_R5
611 
612 /*
613 	status_t ImportBits(const BBitmap *bitmap)
614 	@case 1			NULL bitmap
615 	@results		Should return B_BAD_VALUE.
616  */
617 void SetBitsTester::ImportBitsA1()
618 {
619 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
620 	BBitmap bitmap(BRect(0, 0, 9, 9), B_RGB32);
621 	CHK(bitmap.ImportBits(NULL) == B_BAD_VALUE);
622 }
623 
624 /*
625 	status_t ImportBits(const BBitmap *bitmap)
626 	@case 2			bitmap with different Bounds()
627 	@results		Should return B_BAD_VALUE.
628  */
629 void SetBitsTester::ImportBitsA2()
630 {
631 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
632 	BBitmap bitmap(BRect(0, 0, 9, 9), B_RGB32);
633 	BBitmap bitmap2(BRect(0, 0, 9, 10), B_RGB32);
634 	CHK(bitmap.ImportBits(&bitmap2) == B_BAD_VALUE);
635 }
636 
637 /*
638 	status_t ImportBits(const BBitmap *bitmap)
639 	@case 3			this and bitmap are properly initialized and have the
640 					same bounds, different color spaces
641 	@results		Should set the data and return B_OK.
642  */
643 void SetBitsTester::ImportBitsA3()
644 {
645 	BApplication app("application/x-vnd.obos.bitmap-setbits-test");
646 	// B_RGB32
647 	test_import_bits(rgb32_test_data3_initial, rgb32_test_data3_final,
648 					 rgb32_test_data3_final);
649 	test_import_bits(rgb32_test_data3_initial, cmap8_test_data3_final,
650 					 rgb32_test_data3_final);
651 	test_import_bits(rgb32_test_data3_initial, gray1_test_data3_final,
652 					 rgb32_test_data3g_final);
653 	test_import_bits(rgb32_test_data4_initial, rgb32_test_data4_final,
654 					 rgb32_test_data4_final);
655 	test_import_bits(rgb32_test_data4_initial, cmap8_test_data4_final,
656 					 rgb32_test_data4_final);
657 	test_import_bits(rgb32_test_data4_initial, gray1_test_data4_final,
658 					 rgb32_test_data4g_final);
659 	// B_CMAP8
660 	test_import_bits(cmap8_test_data3_initial, rgb32_test_data3_final,
661 					 cmap8_test_data3_final);
662 	test_import_bits(cmap8_test_data3_initial, cmap8_test_data3_final,
663 					 cmap8_test_data3_final);
664 	test_import_bits(cmap8_test_data3_initial, gray1_test_data3_final,
665 					 cmap8_test_data3g_final);
666 	test_import_bits(cmap8_test_data4_initial, rgb32_test_data4_final,
667 					 cmap8_test_data4_final);
668 	test_import_bits(cmap8_test_data4_initial, cmap8_test_data4_final,
669 					 cmap8_test_data4_final);
670 	test_import_bits(cmap8_test_data4_initial, gray1_test_data4_final,
671 					 cmap8_test_data4g_final);
672 	// B_GRAY1
673 	test_import_bits(gray1_test_data3_initial, rgb32_test_data3_final,
674 					 gray1_test_data3_final);
675 	test_import_bits(gray1_test_data3_initial, cmap8_test_data3_final,
676 					 gray1_test_data3_final);
677 	test_import_bits(gray1_test_data3_initial, gray1_test_data3_final,
678 					 gray1_test_data3_final);
679 	test_import_bits(gray1_test_data4_initial, rgb32_test_data4_final,
680 					 gray1_test_data4_final);
681 	test_import_bits(gray1_test_data4_initial, cmap8_test_data4_final,
682 					 gray1_test_data4_final);
683 	test_import_bits(gray1_test_data4_initial, gray1_test_data4_final,
684 					 gray1_test_data4_final);
685 }
686 #endif // ifndef TEST_R5
687 
688 Test* SetBitsTester::Suite()
689 {
690 	TestSuite* SuiteOfTests = new TestSuite;
691 
692 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, SetBits1);
693 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, SetBits2);
694 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, SetBits3);
695 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, SetBits4);
696 
697 // Haiku only API
698 #ifndef TEST_R5
699 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, ImportBitsA1);
700 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, ImportBitsA2);
701 	ADD_TEST4(BBitmap, SuiteOfTests, SetBitsTester, ImportBitsA3);
702 #endif
703 
704 	return SuiteOfTests;
705 }
706 
707