1 /*****************************************************************************/ 2 // TGATranslatorTest 3 // Written by Michael Wilber, Haiku Translation Kit Team 4 // 5 // TGATranslatorTest.cpp 6 // 7 // Unit testing code to test the Haiku TGATranslator 8 // 9 // 10 // Copyright (c) 2003 Haiku Project 11 // 12 // Permission is hereby granted, free of charge, to any person obtaining a 13 // copy of this software and associated documentation files (the "Software"), 14 // to deal in the Software without restriction, including without limitation 15 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 16 // and/or sell copies of the Software, and to permit persons to whom the 17 // Software is furnished to do so, subject to the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be included 20 // in all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 23 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 25 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 // DEALINGS IN THE SOFTWARE. 29 /*****************************************************************************/ 30 #include "TGATranslatorTest.h" 31 #include <cppunit/Test.h> 32 #include <cppunit/TestCaller.h> 33 #include <cppunit/TestSuite.h> 34 #include <stdio.h> 35 #include <string.h> 36 #include <unistd.h> 37 #include <image.h> 38 #include <Application.h> 39 #include <Translator.h> 40 #include <TranslatorFormats.h> 41 #include <TranslatorRoster.h> 42 #include <Message.h> 43 #include <View.h> 44 #include <Rect.h> 45 #include <File.h> 46 #include <DataIO.h> 47 #include <Errors.h> 48 #include <OS.h> 49 #include "TranslatorTestAddOn.h" 50 51 // Suite 52 CppUnit::Test * 53 TGATranslatorTest::Suite() 54 { 55 CppUnit::TestSuite *suite = new CppUnit::TestSuite(); 56 typedef CppUnit::TestCaller<TGATranslatorTest> TC; 57 58 suite->addTest( 59 new TC("TGATranslator IdentifyTest", 60 &TGATranslatorTest::IdentifyTest)); 61 62 suite->addTest( 63 new TC("TGATranslator TranslateTest", 64 &TGATranslatorTest::TranslateTest)); 65 66 suite->addTest( 67 new TC("TGATranslator ConfigMessageTest", 68 &TGATranslatorTest::ConfigMessageTest)); 69 70 #if !TEST_R5 71 suite->addTest( 72 new TC("TGATranslator LoadAddOnTest", 73 &TGATranslatorTest::LoadAddOnTest)); 74 #endif 75 76 return suite; 77 } 78 79 // setUp 80 void 81 TGATranslatorTest::setUp() 82 { 83 BTestCase::setUp(); 84 } 85 86 // tearDown 87 void 88 TGATranslatorTest::tearDown() 89 { 90 BTestCase::tearDown(); 91 } 92 93 void 94 CheckBits_Tga(translator_info *pti) 95 { 96 CheckTranslatorInfo(pti, B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, 97 0.7f, 0.6f, "Be Bitmap Format (TGATranslator)", 98 "image/x-be-bitmap"); 99 } 100 101 void 102 CheckTga(translator_info *pti, const char *imageType) 103 { 104 CheckTranslatorInfo(pti, B_TGA_FORMAT, B_TRANSLATOR_BITMAP, 105 0.7f, 0.8f, imageType, "image/x-targa"); 106 } 107 108 // coveniently group path of image with 109 // the expected Identify() string for that image 110 struct IdentifyInfo { 111 const char *imagePath; 112 const char *identifyString; 113 }; 114 115 void 116 IdentifyTests(TGATranslatorTest *ptest, BTranslatorRoster *proster, 117 const IdentifyInfo *pinfo, int32 len, bool bbits) 118 { 119 translator_info ti; 120 printf(" [%d] ", (int) bbits); 121 122 for (int32 i = 0; i < len; i++) { 123 ptest->NextSubTest(); 124 BFile file; 125 printf(" [%s] ", pinfo[i].imagePath); 126 CPPUNIT_ASSERT(file.SetTo(pinfo[i].imagePath, B_READ_ONLY) == B_OK); 127 128 // Identify (output: B_TRANSLATOR_ANY_TYPE) 129 ptest->NextSubTest(); 130 memset(&ti, 0, sizeof(translator_info)); 131 CPPUNIT_ASSERT(proster->Identify(&file, NULL, &ti) == B_OK); 132 if (bbits) 133 CheckBits_Tga(&ti); 134 else 135 CheckTga(&ti, pinfo[i].identifyString); 136 137 // Identify (output: B_TRANSLATOR_BITMAP) 138 ptest->NextSubTest(); 139 memset(&ti, 0, sizeof(translator_info)); 140 CPPUNIT_ASSERT(proster->Identify(&file, NULL, &ti, 0, NULL, 141 B_TRANSLATOR_BITMAP) == B_OK); 142 if (bbits) 143 CheckBits_Tga(&ti); 144 else 145 CheckTga(&ti, pinfo[i].identifyString); 146 147 // Identify (output: B_TGA_FORMAT) 148 ptest->NextSubTest(); 149 memset(&ti, 0, sizeof(translator_info)); 150 CPPUNIT_ASSERT(proster->Identify(&file, NULL, &ti, 0, NULL, 151 B_TGA_FORMAT) == B_OK); 152 if (bbits) 153 CheckBits_Tga(&ti); 154 else 155 CheckTga(&ti, pinfo[i].identifyString); 156 } 157 } 158 159 void 160 TGATranslatorTest::IdentifyTest() 161 { 162 // Init 163 NextSubTest(); 164 status_t result = B_ERROR; 165 BTranslatorRoster *proster = new BTranslatorRoster(); 166 CPPUNIT_ASSERT(proster); 167 CPPUNIT_ASSERT(proster->AddTranslators( 168 "/boot/home/config/add-ons/Translators/TGATranslator") == B_OK); 169 BFile wronginput("../src/tests/kits/translation/data/images/image.jpg", 170 B_READ_ONLY); 171 CPPUNIT_ASSERT(wronginput.InitCheck() == B_OK); 172 173 // Identify (bad input, output types) 174 NextSubTest(); 175 translator_info ti; 176 memset(&ti, 0, sizeof(translator_info)); 177 result = proster->Identify(&wronginput, NULL, &ti, 0, 178 NULL, B_TRANSLATOR_TEXT); 179 CPPUNIT_ASSERT(result == B_NO_TRANSLATOR); 180 CPPUNIT_ASSERT(ti.type == 0 && ti.translator == 0); 181 182 // Identify (wrong type of input data) 183 NextSubTest(); 184 memset(&ti, 0, sizeof(translator_info)); 185 result = proster->Identify(&wronginput, NULL, &ti); 186 CPPUNIT_ASSERT(result == B_NO_TRANSLATOR); 187 CPPUNIT_ASSERT(ti.type == 0 && ti.translator == 0); 188 189 // Identify (successfully identify the following files) 190 const IdentifyInfo aBitsPaths[] = { 191 { "/boot/home/resources/tga/screen1_24.bits", "" }, 192 { "/boot/home/resources/tga/b_gray1-2.bits", "" }, 193 { "/boot/home/resources/tga/b_gray1.bits", "" }, 194 { "/boot/home/resources/tga/b_rgb15.bits", "" }, 195 { "/boot/home/resources/tga/b_rgb16.bits", "" }, 196 { "/boot/home/resources/tga/b_rgb32.bits", "" }, 197 { "/boot/home/resources/tga/b_cmap8.bits", "" } 198 }; 199 const IdentifyInfo aTgaPaths[] = { 200 { "/boot/home/resources/tga/blocks_16_rle_true.tga", 201 "Targa image (16 bits RLE truecolor)" }, 202 { "/boot/home/resources/tga/blocks_24_none_true.tga", 203 "Targa image (24 bits truecolor)" }, 204 { "/boot/home/resources/tga/blocks_24_rle_true.tga", 205 "Targa image (24 bits RLE truecolor)" }, 206 { "/boot/home/resources/tga/blocks_8_none_gray.tga", 207 "Targa image (8 bits gray)" }, 208 { "/boot/home/resources/tga/blocks_8_rle_cmap.tga", 209 "Targa image (8 bits RLE colormap)" }, 210 { "/boot/home/resources/tga/cloudcg_16_none_true.tga", 211 "Targa image (16 bits truecolor)" }, 212 { "/boot/home/resources/tga/cloudcg_16_rle_true.tga", 213 "Targa image (16 bits RLE truecolor)" }, 214 { "/boot/home/resources/tga/cloudcg_24_none_true.tga", 215 "Targa image (24 bits truecolor)" }, 216 { "/boot/home/resources/tga/cloudcg_24_rle_true.tga", 217 "Targa image (24 bits RLE truecolor)" }, 218 { "/boot/home/resources/tga/cloudcg_8_none_cmap.tga", 219 "Targa image (8 bits colormap)" }, 220 { "/boot/home/resources/tga/cloudcg_8_none_gray.tga", 221 "Targa image (8 bits gray)" }, 222 { "/boot/home/resources/tga/cloudcg_8_rle_cmap.tga", 223 "Targa image (8 bits RLE colormap)" }, 224 { "/boot/home/resources/tga/graycloudcg_8_rle_cmap.tga", 225 "Targa image (8 bits RLE colormap)" }, 226 { "/boot/home/resources/tga/grayblocks_8_rle_cmap.tga", 227 "Targa image (8 bits RLE colormap)" }, 228 { "/boot/home/resources/tga/screen1_16_none_true.tga", 229 "Targa image (16 bits truecolor)" }, 230 { "/boot/home/resources/tga/screen1_16_rle_true.tga", 231 "Targa image (16 bits RLE truecolor)" }, 232 { "/boot/home/resources/tga/screen1_24_none_true.tga", 233 "Targa image (24 bits truecolor)" }, 234 { "/boot/home/resources/tga/screen1_24_rle_true.tga", 235 "Targa image (24 bits RLE truecolor)" }, 236 { "/boot/home/resources/tga/screen1_8_none_cmap.tga", 237 "Targa image (8 bits colormap)" }, 238 { "/boot/home/resources/tga/screen1_8_none_gray.tga", 239 "Targa image (8 bits gray)" }, 240 { "/boot/home/resources/tga/screen1_8_rle_cmap.tga", 241 "Targa image (8 bits RLE colormap)" }, 242 { "/boot/home/resources/tga/grayscreen1_8_rle_cmap.tga", 243 "Targa image (8 bits RLE colormap)" }, 244 { "/boot/home/resources/tga/ugly_16_none_true.tga", 245 "Targa image (16 bits truecolor)" }, 246 { "/boot/home/resources/tga/ugly_24_none_true.tga", 247 "Targa image (24 bits truecolor)" }, 248 { "/boot/home/resources/tga/ugly_32_none_true.tga", 249 "Targa image (32 bits truecolor)" }, 250 { "/boot/home/resources/tga/ugly_8_none_cmap.tga", 251 "Targa image (8 bits colormap)" } 252 }; 253 254 IdentifyTests(this, proster, aTgaPaths, 255 sizeof(aTgaPaths) / sizeof(IdentifyInfo), false); 256 IdentifyTests(this, proster, aBitsPaths, 257 sizeof(aBitsPaths) / sizeof(IdentifyInfo), true); 258 259 delete proster; 260 proster = NULL; 261 } 262 263 // coveniently group path of tga image with 264 // path of bits image that it should translate to 265 struct TranslatePaths { 266 const char *tgaPath; 267 const char *bitsPath; 268 bool bcompress; 269 }; 270 271 void 272 TranslateTests(TGATranslatorTest *ptest, BTranslatorRoster *proster, 273 const TranslatePaths *paths, int32 len, bool btgainput) 274 { 275 // Setup BMessages for specifying TGATranslator settings 276 const char *krleoption = "tga /rle"; 277 BMessage compmsg, nocompmsg, *pmsg; 278 CPPUNIT_ASSERT(compmsg.AddBool(krleoption, true) == B_OK); 279 CPPUNIT_ASSERT(nocompmsg.AddBool(krleoption, false) == B_OK); 280 281 // Perform translations on every file in the array 282 for (int32 i = 0; i < len; i++) { 283 // Setup input files 284 ptest->NextSubTest(); 285 BFile tgafile, bitsfile, *pinput; 286 CPPUNIT_ASSERT(tgafile.SetTo(paths[i].tgaPath, B_READ_ONLY) == B_OK); 287 CPPUNIT_ASSERT(bitsfile.SetTo(paths[i].bitsPath, B_READ_ONLY) == B_OK); 288 if (btgainput) { 289 printf(" [%s] ", paths[i].tgaPath); 290 pinput = &tgafile; 291 } else { 292 printf(" [%s] ", paths[i].bitsPath); 293 pinput = &bitsfile; 294 } 295 296 // RLE compression option 297 if (paths[i].bcompress) 298 pmsg = &compmsg; 299 else 300 pmsg = &nocompmsg; 301 302 // create temporary files where the translated data will 303 // be stored 304 BFile tmpfile("/tmp/tgatmp", B_READ_WRITE | B_CREATE_FILE | 305 B_ERASE_FILE); 306 BFile dtmpfile("/tmp/tgadtmp", B_READ_WRITE | B_CREATE_FILE | 307 B_ERASE_FILE); 308 CPPUNIT_ASSERT(tmpfile.InitCheck() == B_OK); 309 CPPUNIT_ASSERT(dtmpfile.InitCheck() == B_OK); 310 // Convert to B_TRANSLATOR_ANY_TYPE (should be B_TRANSLATOR_BITMAP) 311 ptest->NextSubTest(); 312 CPPUNIT_ASSERT(tmpfile.Seek(0, SEEK_SET) == 0); 313 CPPUNIT_ASSERT(tmpfile.SetSize(0) == B_OK); 314 CPPUNIT_ASSERT(proster->Translate(pinput, NULL, pmsg, &tmpfile, 315 B_TRANSLATOR_ANY_TYPE) == B_OK); 316 CPPUNIT_ASSERT(CompareStreams(tmpfile, bitsfile) == true); 317 318 // Convert to B_TRANSLATOR_BITMAP 319 ptest->NextSubTest(); 320 CPPUNIT_ASSERT(tmpfile.Seek(0, SEEK_SET) == 0); 321 CPPUNIT_ASSERT(tmpfile.SetSize(0) == B_OK); 322 CPPUNIT_ASSERT(proster->Translate(pinput, NULL, pmsg, &tmpfile, 323 B_TRANSLATOR_BITMAP) == B_OK); 324 CPPUNIT_ASSERT(CompareStreams(tmpfile, bitsfile) == true); 325 326 // Convert bits tmpfile to B_TRANSLATOR_BITMAP dtmpfile 327 ptest->NextSubTest(); 328 CPPUNIT_ASSERT(dtmpfile.Seek(0, SEEK_SET) == 0); 329 CPPUNIT_ASSERT(dtmpfile.SetSize(0) == B_OK); 330 CPPUNIT_ASSERT(proster->Translate(&tmpfile, NULL, pmsg, &dtmpfile, 331 B_TRANSLATOR_BITMAP) == B_OK); 332 CPPUNIT_ASSERT(CompareStreams(dtmpfile, bitsfile) == true); 333 334 // Convert to B_TGA_FORMAT 335 ptest->NextSubTest(); 336 CPPUNIT_ASSERT(tmpfile.Seek(0, SEEK_SET) == 0); 337 CPPUNIT_ASSERT(tmpfile.SetSize(0) == B_OK); 338 CPPUNIT_ASSERT(proster->Translate(pinput, NULL, pmsg, &tmpfile, 339 B_TGA_FORMAT) == B_OK); 340 CPPUNIT_ASSERT(CompareStreams(tmpfile, tgafile) == true); 341 342 if (btgainput || strstr(paths[i].bitsPath, "24")) { 343 // Convert TGA tmpfile to B_TRANSLATOR_BITMAP dtmpfile 344 ptest->NextSubTest(); 345 CPPUNIT_ASSERT(dtmpfile.Seek(0, SEEK_SET) == 0); 346 CPPUNIT_ASSERT(dtmpfile.SetSize(0) == B_OK); 347 CPPUNIT_ASSERT(proster->Translate(&tmpfile, NULL, pmsg, &dtmpfile, 348 B_TRANSLATOR_BITMAP) == B_OK); 349 CPPUNIT_ASSERT(CompareStreams(dtmpfile, bitsfile) == true); 350 351 // Convert TGA tmpfile to B_TGA_FORMAT dtmpfile 352 ptest->NextSubTest(); 353 CPPUNIT_ASSERT(dtmpfile.Seek(0, SEEK_SET) == 0); 354 CPPUNIT_ASSERT(dtmpfile.SetSize(0) == B_OK); 355 CPPUNIT_ASSERT(proster->Translate(&tmpfile, NULL, pmsg, &dtmpfile, 356 B_TGA_FORMAT) == B_OK); 357 CPPUNIT_ASSERT(CompareStreams(dtmpfile, tgafile) == true); 358 } 359 } 360 } 361 362 void 363 TGATranslatorTest::TranslateTest() 364 { 365 BApplication 366 app("application/x-vnd.OpenBeOS-TGATranslatorTest"); 367 368 // Init 369 NextSubTest(); 370 status_t result = B_ERROR; 371 off_t filesize = -1; 372 BTranslatorRoster *proster = new BTranslatorRoster(); 373 CPPUNIT_ASSERT(proster); 374 CPPUNIT_ASSERT(proster->AddTranslators( 375 "/boot/home/config/add-ons/Translators/TGATranslator") == B_OK); 376 BFile wronginput("../src/tests/kits/translation/data/images/image.jpg", 377 B_READ_ONLY); 378 CPPUNIT_ASSERT(wronginput.InitCheck() == B_OK); 379 BFile output("/tmp/tga_test.out", B_WRITE_ONLY | 380 B_CREATE_FILE | B_ERASE_FILE); 381 CPPUNIT_ASSERT(output.InitCheck() == B_OK); 382 383 // Translate (bad input, output types) 384 NextSubTest(); 385 result = proster->Translate(&wronginput, NULL, NULL, &output, 386 B_TRANSLATOR_TEXT); 387 CPPUNIT_ASSERT(result == B_NO_TRANSLATOR); 388 CPPUNIT_ASSERT(output.GetSize(&filesize) == B_OK); 389 CPPUNIT_ASSERT(filesize == 0); 390 391 // Translate (wrong type of input data) 392 NextSubTest(); 393 result = proster->Translate(&wronginput, NULL, NULL, &output, 394 B_TGA_FORMAT); 395 CPPUNIT_ASSERT(result == B_NO_TRANSLATOR); 396 CPPUNIT_ASSERT(output.GetSize(&filesize) == B_OK); 397 CPPUNIT_ASSERT(filesize == 0); 398 399 // Translate (wrong type of input, B_TRANSLATOR_ANY_TYPE output) 400 NextSubTest(); 401 result = proster->Translate(&wronginput, NULL, NULL, &output, 402 B_TRANSLATOR_ANY_TYPE); 403 CPPUNIT_ASSERT(result == B_NO_TRANSLATOR); 404 CPPUNIT_ASSERT(output.GetSize(&filesize) == B_OK); 405 CPPUNIT_ASSERT(filesize == 0); 406 407 // Translate TGA images to bits 408 const TranslatePaths aTgaInputs[] = { 409 { "/boot/home/resources/tga/blocks_16_rle_true.tga", 410 "/boot/home/resources/tga/blocks_color.bits", false }, 411 { "/boot/home/resources/tga/blocks_24_none_true.tga", 412 "/boot/home/resources/tga/blocks_color.bits", false }, 413 { "/boot/home/resources/tga/blocks_24_rle_true.tga", 414 "/boot/home/resources/tga/blocks_color.bits", false }, 415 { "/boot/home/resources/tga/blocks_8_none_gray.tga", 416 "/boot/home/resources/tga/blocks_gray.bits", false }, 417 { "/boot/home/resources/tga/blocks_8_rle_cmap.tga", 418 "/boot/home/resources/tga/blocks_color.bits", false }, 419 { "/boot/home/resources/tga/cloudcg_16_none_true.tga", 420 "/boot/home/resources/tga/cloudcg_16.bits", false }, 421 { "/boot/home/resources/tga/cloudcg_16_rle_true.tga", 422 "/boot/home/resources/tga/cloudcg_16.bits", false }, 423 { "/boot/home/resources/tga/cloudcg_24_none_true.tga", 424 "/boot/home/resources/tga/cloudcg_24.bits", false }, 425 { "/boot/home/resources/tga/cloudcg_24_rle_true.tga", 426 "/boot/home/resources/tga/cloudcg_24.bits", false }, 427 { "/boot/home/resources/tga/cloudcg_8_none_cmap.tga", 428 "/boot/home/resources/tga/cloudcg_8_cmap.bits", false }, 429 { "/boot/home/resources/tga/cloudcg_8_none_gray.tga", 430 "/boot/home/resources/tga/cloudcg_8_gray.bits", false }, 431 { "/boot/home/resources/tga/cloudcg_8_rle_cmap.tga", 432 "/boot/home/resources/tga/cloudcg_8_cmap.bits", false }, 433 { "/boot/home/resources/tga/graycloudcg_8_rle_cmap.tga", 434 "/boot/home/resources/tga/cloudcg_8_gray.bits", false }, 435 { "/boot/home/resources/tga/grayblocks_8_rle_cmap.tga", 436 "/boot/home/resources/tga/blocks_gray.bits", false }, 437 { "/boot/home/resources/tga/screen1_16_none_true.tga", 438 "/boot/home/resources/tga/screen1_16.bits", false }, 439 { "/boot/home/resources/tga/screen1_16_rle_true.tga", 440 "/boot/home/resources/tga/screen1_16.bits", false }, 441 { "/boot/home/resources/tga/screen1_24_none_true.tga", 442 "/boot/home/resources/tga/screen1_24.bits", false }, 443 { "/boot/home/resources/tga/screen1_24_rle_true.tga", 444 "/boot/home/resources/tga/screen1_24.bits", false }, 445 { "/boot/home/resources/tga/screen1_8_none_cmap.tga", 446 "/boot/home/resources/tga/screen1_8_cmap.bits", false }, 447 { "/boot/home/resources/tga/screen1_8_none_gray.tga", 448 "/boot/home/resources/tga/screen1_8_gray.bits", false }, 449 { "/boot/home/resources/tga/screen1_8_rle_cmap.tga", 450 "/boot/home/resources/tga/screen1_8_cmap.bits", false }, 451 { "/boot/home/resources/tga/grayscreen1_8_rle_cmap.tga", 452 "/boot/home/resources/tga/screen1_8_gray.bits", false }, 453 { "/boot/home/resources/tga/ugly_16_none_true.tga", 454 "/boot/home/resources/tga/ugly_16_none_true.bits", false }, 455 { "/boot/home/resources/tga/ugly_24_none_true.tga", 456 "/boot/home/resources/tga/ugly_24_none_true.bits", false }, 457 { "/boot/home/resources/tga/ugly_32_none_true.tga", 458 "/boot/home/resources/tga/ugly_32_none_true.bits", false }, 459 { "/boot/home/resources/tga/ugly_8_none_cmap.tga", 460 "/boot/home/resources/tga/ugly_8_none_cmap.bits", false } 461 }; 462 const TranslatePaths aBitsInputs[] = { 463 { "/boot/home/resources/tga/cloudcg_24.tga", 464 "/boot/home/resources/tga/cloudcg_24.bits", false }, 465 { "/boot/home/resources/tga/cloudcg_24_rle.tga", 466 "/boot/home/resources/tga/cloudcg_24.bits", true }, 467 { "/boot/home/resources/tga/ugly_32.tga", 468 "/boot/home/resources/tga/ugly_32_none_true.bits", false }, 469 { "/boot/home/resources/tga/ugly_32_rle.tga", 470 "/boot/home/resources/tga/ugly_32_none_true.bits", true }, 471 { "/boot/home/resources/tga/screen1_24_rle.tga", 472 "/boot/home/resources/tga/screen1_24.bits", true }, 473 { "/boot/home/resources/tga/ugly_24_rle_true.tga", 474 "/boot/home/resources/tga/ugly_24_none_true.bits", true }, 475 { "/boot/home/resources/tga/b_gray1-2.tga", 476 "/boot/home/resources/tga/b_gray1-2.bits", false }, 477 { "/boot/home/resources/tga/b_gray1-2_rle.tga", 478 "/boot/home/resources/tga/b_gray1-2.bits", true }, 479 { "/boot/home/resources/tga/b_gray1.tga", 480 "/boot/home/resources/tga/b_gray1.bits", false }, 481 { "/boot/home/resources/tga/b_gray1_rle.tga", 482 "/boot/home/resources/tga/b_gray1.bits", true }, 483 { "/boot/home/resources/tga/b_rgb15.tga", 484 "/boot/home/resources/tga/b_rgb15.bits", false }, 485 { "/boot/home/resources/tga/b_rgb15_rle.tga", 486 "/boot/home/resources/tga/b_rgb15.bits", true }, 487 { "/boot/home/resources/tga/b_rgb16.tga", 488 "/boot/home/resources/tga/b_rgb16.bits", false }, 489 { "/boot/home/resources/tga/b_rgb16_rle.tga", 490 "/boot/home/resources/tga/b_rgb16.bits", true }, 491 { "/boot/home/resources/tga/b_rgb32.tga", 492 "/boot/home/resources/tga/b_rgb32.bits", false }, 493 { "/boot/home/resources/tga/b_rgb32_rle.tga", 494 "/boot/home/resources/tga/b_rgb32.bits", true }, 495 { "/boot/home/resources/tga/b_cmap8.tga", 496 "/boot/home/resources/tga/b_cmap8.bits", false }, 497 { "/boot/home/resources/tga/b_cmap8_rle.tga", 498 "/boot/home/resources/tga/b_cmap8.bits", true }, 499 }; 500 501 TranslateTests(this, proster, aTgaInputs, 502 sizeof(aTgaInputs) / sizeof(TranslatePaths), true); 503 TranslateTests(this, proster, aBitsInputs, 504 sizeof(aBitsInputs) / sizeof(TranslatePaths), false); 505 506 delete proster; 507 proster = NULL; 508 } 509 510 // Make certain the TGATranslator 511 // provides a valid configuration message 512 void 513 TGATranslatorTest::ConfigMessageTest() 514 { 515 // Init 516 NextSubTest(); 517 BTranslatorRoster *proster = new BTranslatorRoster(); 518 CPPUNIT_ASSERT(proster); 519 CPPUNIT_ASSERT(proster->AddTranslators( 520 "/boot/home/config/add-ons/Translators/TGATranslator") == B_OK); 521 522 // GetAllTranslators 523 NextSubTest(); 524 translator_id tid, *pids = NULL; 525 int32 count = 0; 526 CPPUNIT_ASSERT(proster->GetAllTranslators(&pids, &count) == B_OK); 527 CPPUNIT_ASSERT(pids); 528 CPPUNIT_ASSERT(count == 1); 529 tid = pids[0]; 530 delete[] pids; 531 pids = NULL; 532 533 // GetConfigurationMessage 534 NextSubTest(); 535 BMessage msg; 536 CPPUNIT_ASSERT(proster->GetConfigurationMessage(tid, &msg) == B_OK); 537 CPPUNIT_ASSERT(!msg.IsEmpty()); 538 539 // B_TRANSLATOR_EXT_HEADER_ONLY 540 NextSubTest(); 541 bool bheaderonly = true; 542 CPPUNIT_ASSERT( 543 msg.FindBool(B_TRANSLATOR_EXT_HEADER_ONLY, &bheaderonly) == B_OK); 544 CPPUNIT_ASSERT(bheaderonly == false); 545 546 // B_TRANSLATOR_EXT_DATA_ONLY 547 NextSubTest(); 548 bool bdataonly = true; 549 CPPUNIT_ASSERT( 550 msg.FindBool(B_TRANSLATOR_EXT_DATA_ONLY, &bdataonly) == B_OK); 551 CPPUNIT_ASSERT(bdataonly == false); 552 553 // "tga /rle" 554 NextSubTest(); 555 bool brle; 556 CPPUNIT_ASSERT(msg.FindBool("tga /rle", &brle) == B_OK); 557 CPPUNIT_ASSERT(brle == true || brle == false); 558 559 // "tga /ignore_alpha" 560 NextSubTest(); 561 bool balpha; 562 CPPUNIT_ASSERT(msg.FindBool("tga /ignore_alpha", &balpha) == B_OK); 563 CPPUNIT_ASSERT(balpha == true || balpha == false); 564 } 565 566 #if !TEST_R5 567 568 // The input formats that this translator is supposed to support 569 translation_format gTGAInputFormats[] = { 570 { 571 B_TRANSLATOR_BITMAP, 572 B_TRANSLATOR_BITMAP, 573 0.7f, // quality 574 0.6f, // capability 575 "image/x-be-bitmap", 576 "Be Bitmap Format (TGATranslator)" 577 }, 578 { 579 B_TGA_FORMAT, 580 B_TRANSLATOR_BITMAP, 581 0.7f, 582 0.8f, 583 "image/x-targa", 584 "Targa image" 585 } 586 }; 587 588 // The output formats that this translator is supposed to support 589 translation_format gTGAOutputFormats[] = { 590 { 591 B_TRANSLATOR_BITMAP, 592 B_TRANSLATOR_BITMAP, 593 0.6f, // quality 594 0.8f, // capability 595 "image/x-be-bitmap", 596 "Be Bitmap Format (TGATranslator)" 597 }, 598 { 599 B_TGA_FORMAT, 600 B_TRANSLATOR_BITMAP, 601 0.7f, 602 0.6f, 603 "image/x-targa", 604 "Targa image" 605 } 606 }; 607 608 void 609 TGATranslatorTest::LoadAddOnTest() 610 { 611 TranslatorLoadAddOnTest("/boot/home/config/add-ons/Translators/TGATranslator", 612 this, 613 gTGAInputFormats, sizeof(gTGAInputFormats) / sizeof(translation_format), 614 gTGAOutputFormats, sizeof(gTGAOutputFormats) / sizeof(translation_format), 615 B_TRANSLATION_MAKE_VERSION(1,0,0)); 616 } 617 618 #endif // #if !TEST_R5 619