1 16 17 package org.apache.batik.apps.rasterizer; 18 19 import org.apache.batik.test.*; 20 import org.apache.batik.test.util.ImageCompareTest; 21 import org.apache.batik.transcoder.Transcoder; 22 import org.apache.batik.transcoder.image.ImageTranscoder; 23 import org.apache.batik.transcoder.image.JPEGTranscoder; 24 import org.apache.batik.transcoder.image.PNGTranscoder; 25 26 import java.awt.*; 27 import java.io.*; 28 import java.util.*; 29 30 38 public class SVGConverterTest extends DefaultTestSuite { 39 public SVGConverterTest(){ 40 AbstractTest t = null; 44 45 t = new TranscoderConfigTest(DestinationType.PNG, 49 org.apache.batik.transcoder.image.PNGTranscoder.class); 50 addTest(t); 51 t.setId("TranscoderConfigTest.PNG"); 52 53 t = new TranscoderConfigTest(DestinationType.JPEG, 54 org.apache.batik.transcoder.image.JPEGTranscoder.class); 55 addTest(t); 56 t.setId("TranscoderConfigTest.JPEG"); 57 58 t = new TranscoderConfigTest(DestinationType.TIFF, 59 org.apache.batik.transcoder.image.TIFFTranscoder.class); 60 addTest(t); 61 t.setId("TranscoderConfigTest.TIFF"); 62 63 try { 64 Class pdfClass = Class.forName("org.apache.fop.svg.PDFTranscoder"); 65 t = new TranscoderConfigTest(DestinationType.PDF, pdfClass); 66 t.setId("TranscoderConfigTest.PDF"); 67 addTest(t); 68 } catch (Exception e) { 69 } 70 71 t = new HintsConfigTest(new Object [][]{ 75 {ImageTranscoder.KEY_AOI, new Rectangle(40, 50, 40, 80)}}){ 76 protected void deltaConfigure(SVGConverter c){ 77 c.setArea(new Rectangle(40, 50, 40, 80)); 78 } 79 }; 80 81 addTest(t); 82 t.setId("HintsConfigTest.KEY_AOI"); 83 84 t = new HintsConfigTest(new Object [][]{ 85 {JPEGTranscoder.KEY_QUALITY, new Float (.5)}}){ 86 protected void deltaConfigure(SVGConverter c){ 87 c.setQuality(.5f); 88 } 89 }; 90 91 addTest(t); 92 t.setId("HintsConfigTest.KEY_QUALITY"); 93 94 t = new HintsConfigTest(new Object [][]{ 95 {PNGTranscoder.KEY_INDEXED, new Integer (8)}}){ 96 protected void deltaConfigure(SVGConverter c){ 97 c.setIndexed(8); 98 } 99 }; 100 addTest(t); 101 t.setId("HintsConfigTest.KEY_INDEXED"); 102 103 t = new HintsConfigTest(new Object [][]{ 104 {ImageTranscoder.KEY_BACKGROUND_COLOR, Color.pink}}){ 105 protected void deltaConfigure(SVGConverter c){ 106 c.setBackgroundColor(Color.pink); 107 } 108 }; 109 110 addTest(t); 111 t.setId("HintsConfigTest.KEY_BACKGROUND_COLOR"); 112 113 t = new HintsConfigTest(new Object [][]{ 114 {ImageTranscoder.KEY_HEIGHT, new Float (50)}}){ 115 protected void deltaConfigure(SVGConverter c){ 116 c.setHeight(50); 117 } 118 }; 119 120 addTest(t); 121 t.setId("HintsConfigTest.KEY_HEIGHT"); 122 123 t = new HintsConfigTest(new Object [][]{ 124 {ImageTranscoder.KEY_WIDTH, new Float (50)}}){ 125 protected void deltaConfigure(SVGConverter c){ 126 c.setWidth(50); 127 } 128 }; 129 130 addTest(t); 131 t.setId("HintsConfigTest.KEY_WIDTH"); 132 133 t = new HintsConfigTest(new Object [][]{ 134 {ImageTranscoder.KEY_MAX_HEIGHT, new Float (50)}}){ 135 protected void deltaConfigure(SVGConverter c){ 136 c.setMaxHeight(50); 137 } 138 }; 139 addTest(t); 140 t.setId("HintsConfigTest.KEY_MAX_HEIGHT"); 141 142 t = new HintsConfigTest(new Object [][]{ 143 {ImageTranscoder.KEY_MAX_WIDTH, new Float (50)}}){ 144 protected void deltaConfigure(SVGConverter c){ 145 c.setMaxWidth(50); 146 } 147 }; 148 addTest(t); 149 t.setId("HintsConfigTest.KEY_MAX_WIDTH"); 150 151 t = new HintsConfigTest(new Object [][]{ 152 {ImageTranscoder.KEY_MEDIA, "print"}}){ 153 protected void deltaConfigure(SVGConverter c){ 154 c.setMediaType("print"); 155 } 156 }; 157 158 addTest(t); 159 t.setId("HintsConfigTest.KEY_MEDIA"); 160 161 t = new HintsConfigTest(new Object [][]{ 162 {ImageTranscoder.KEY_DEFAULT_FONT_FAMILY, "Times"}}){ 163 protected void deltaConfigure(SVGConverter c){ 164 c.setDefaultFontFamily("Times"); 165 } 166 }; 167 168 addTest(t); 169 t.setId("HintsConfigTest.KEY_DEFAULT_FONT_FAMILY"); 170 171 t = new HintsConfigTest(new Object [][]{ 172 {ImageTranscoder.KEY_ALTERNATE_STYLESHEET, "myStyleSheet"}}){ 173 protected void deltaConfigure(SVGConverter c){ 174 c.setAlternateStylesheet("myStyleSheet"); 175 } 176 }; 177 addTest(t); 178 t.setId("HintsConfigTest.KEY_ALTERNATE_STYLESHEET"); 179 180 t = new HintsConfigTest(new Object [][]{ 181 {ImageTranscoder.KEY_USER_STYLESHEET_URI, "userStylesheet.css"}}){ 182 protected void deltaConfigure(SVGConverter c){ 183 c.setUserStylesheet("userStylesheet.css"); 184 } 185 }; 186 addTest(t); 187 t.setId("HintsConfigTest.KEY_USER_STYLESHEET_URI"); 188 189 t = new HintsConfigTest(new Object [][]{ 190 {ImageTranscoder.KEY_LANGUAGE, "fr"}}){ 191 protected void deltaConfigure(SVGConverter c){ 192 c.setLanguage("fr"); 193 } 194 }; 195 addTest(t); 196 t.setId("HintsConfigTest.KEY_LANGUAGE"); 197 198 t = new HintsConfigTest(new Object [][]{ 199 {ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER, new Float (.5f)}}){ 200 protected void deltaConfigure(SVGConverter c){ 201 c.setPixelUnitToMillimeter(.5f); 202 } 203 }; 204 addTest(t); 205 t.setId("HintsConfigTest.KEY_PIXEL_UNIT_TO_MILLIMETER"); 206 207 t = new HintsConfigTest(new Object [][]{ 208 {ImageTranscoder.KEY_XML_PARSER_VALIDATING, new Boolean (true)}}){ 209 protected void deltaConfigure(SVGConverter c){ 210 c.setValidate(true); 211 } 212 }; 213 addTest(t); 214 t.setId("HintsConfigTest.KEY_XML_PARSER_VALIDATING"); 215 216 217 t = new SourcesConfigTest(new String [] { "samples/anne", "samples/batikFX", "samples/tests/spec/styling/smiley" }){ 221 protected void setSources(SVGConverter c){ 222 c.setSources(new String [] {"samples/anne.svg", "samples/batikFX.svg", "samples/tests/spec/styling/smiley.svg"}); 223 } 224 }; 225 226 addTest(t); 227 t.setId("SourcesConfigTest.SimpleList"); 228 229 230 t = new DestConfigTest(new String [] { "samples/anne.svg" }, 234 new String [] { "test-reports/anne.png"}){ 235 protected void setDestination(SVGConverter c){ 236 c.setDst(new File("test-reports/anne.png")); 237 } 238 }; 239 addTest(t); 240 t.setId("DestConfigTest.DstFile"); 241 242 t = new DestConfigTest(new String [] { "samples/anne.svg", "samples/tests/spec/styling/smiley.svg" }, 243 new String [] { "test-resources/anne.png", "test-resources/smiley.png"}){ 244 protected void setDestination(SVGConverter c){ 245 c.setDst(new File("test-resources")); 246 } 247 }; 248 addTest(t); 249 t.setId("DestConfigTest.DstDir"); 250 251 t = new OperationTest(){ 255 protected void configure(SVGConverter c){ 256 c.setSources(new String []{"samples/anne.svg"}); 257 c.setDst(new File("anne.png")); 258 File file = new File("anne.png"); 259 file.deleteOnExit(); 260 } 261 }; 262 addTest(t); 263 t.setId("OperationTest.Bug4888"); 264 265 t = new OperationTest(){ 266 protected void configure(SVGConverter c){ 267 c.setDestinationType(DestinationType.PDF); 268 c.setSources(new String []{"samples/anne.svg"}); 269 } 270 }; 271 addTest(t); 272 t.setId("Operationtest.PDFTranscoding"); 273 274 t = new ConfigErrorTest(SVGConverter.ERROR_NO_SOURCES_SPECIFIED) { 279 protected void configure(SVGConverter c){ 280 c.setSources(null); 281 } 282 }; 283 addTest(t); 284 t.setId("ConfigErrorTest.ERROR_NO_SOURCES_SPECIFIED"); 285 286 t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_COMPUTE_DESTINATION){ 287 protected void configure(SVGConverter c){ 288 c.setSources(new String []{"http://xml.apache.org/batik/dummy.svg"}); 290 } 291 }; 292 addTest(t); 293 t.setId("ConfigErrorTest.ERROR_CANNOT_COMPUTE_DESTINATION"); 294 295 t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_USE_DST_FILE){ 296 protected void configure(SVGConverter c){ 297 File dummy = null; 298 try { 299 dummy = File.createTempFile("dummyPNG", ".png"); 300 } catch(IOException e){ 301 throw new Error (); 302 } 303 c.setSources(new String []{"samples/anne.svg", "samples/batikFX.svg"}); 304 c.setDst(dummy); 305 dummy.deleteOnExit(); 306 } 307 }; 308 addTest(t); 309 t.setId("ConfigErrorTest.ERROR_CANNOT_USE_DST_FILE"); 310 311 t = new ConfigErrorTest(SVGConverter.ERROR_SOURCE_SAME_AS_DESTINATION){ 312 protected void configure(SVGConverter c){ 313 c.setSources(new String []{ "samples/anne.svg" }); 314 c.setDst(new File("samples/anne.svg")); 315 } 316 }; 317 addTest(t); 318 t.setId("ConfigErrorTest.ERROR_SOURCE_SAME_AS_DESTINATION"); 319 320 t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_READ_SOURCE){ 321 protected void configure(SVGConverter c){ 322 c.setSources(new String []{ "test-resources/org/apache/batik/apps/rasterizer/notReadable.svg" }); 323 c.setDst(new File("test-reports")); 324 } 325 326 public boolean proceedWithSourceTranscoding(SVGConverterSource source, 327 File dest){ 328 File hackedFile = new File(((SVGConverterFileSource)source).file.getPath()){ 330 public boolean canRead(){ 331 System.out.println("Yahoooooooo! In canRead"); 332 return false; 333 } 334 }; 335 ((SVGConverterFileSource)source).file = hackedFile; 336 return true; 337 } 338 }; 339 addTest(t); 340 t.setId("ConfigErrorTest.ERROR_CANNOT_READ_SOURCE"); 341 342 t = new ConfigErrorTest(SVGConverter.ERROR_CANNOT_OPEN_SOURCE){ 343 protected void configure(SVGConverter c){ 344 c.setSources(new String []{ "test-resources/org/apache/batik/apps/rasterizer/notReadable.svg" }); 345 } 346 347 public boolean proceedWithComputedTask(Transcoder transcoder, 348 Map hints, 349 Vector sources, 350 Vector dest){ 351 System.out.println("==================> Hacked Starting to process Task <========================="); 352 SVGConverterFileSource source = (SVGConverterFileSource)sources.elementAt(0); 353 source = new SVGConverterFileSource(source.file){ 354 public InputStream openStream() throws FileNotFoundException { 355 throw new FileNotFoundException("Simulated FileNotFoundException"); 356 } 357 }; 358 359 sources.setElementAt(source, 0); 360 return true; 361 } 362 363 }; 364 addTest(t); 365 t.setId("ConfigErrorTest.ERROR_CANNOT_OPEN_SOURCE"); 366 367 t = new ConfigErrorTest(SVGConverter.ERROR_OUTPUT_NOT_WRITEABLE){ 368 protected void configure(SVGConverter c){ 369 c.setSources(new String []{ "samples/anne.svg" }); 370 File o = new File("test-resources/org/apache/batik/apps/rasterizer/readOnly.png"); 371 o.setReadOnly(); 372 c.setDst(o); 373 } 374 }; 375 addTest(t); 376 t.setId("ConfigErrorTest.ERROR_OUTPUT_NOT_WRITEABLE"); 377 378 t = new ConfigErrorTest(SVGConverter.ERROR_UNABLE_TO_CREATE_OUTPUT_DIR){ 379 protected void configure(SVGConverter c){ 380 c.setDst(new File("ZYZ::/cannotCreate")); 381 } 382 }; 383 addTest(t); 384 t.setId("ConfigErrorTest.ERROR_UNABLE_TO_CREATE_OUTPUT_DIR"); 385 386 t = new ConfigErrorTest(SVGConverter.ERROR_WHILE_RASTERIZING_FILE){ 387 protected void configure(SVGConverter c){ 388 c.setSources(new String []{ "test-resources/org/apache/batik/apps/rasterizer/invalidSVG.svg"}); 389 } 390 }; 391 addTest(t); 392 t.setId("ConfigErrorTest(SVGConverter.ERROR_WHILE_RASTERIZING_FILE"); 393 394 399 t = new ConverterOutputTest("samples/anne.svg", "test-reports/anne.png", "test-references/samples/anne.png"); addTest(t); 404 t.setId("OutputTest.plain"); 405 406 t = new ConverterOutputTest("samples/anne.svg#svgView(viewBox(0,0,100,200))", "test-reports/anne.png", "test-references/samples/anneViewBox1.png"); addTest(t); 411 t.setId("OutputTest.reference"); 412 413 } 414 } 415 416 422 abstract class AbstractConfigTest extends AbstractTest implements SVGConverterController { 423 426 public static final String ERROR_NO_COMPUTED_TASK 427 = "ConfigTest.error.no.computed.task"; 428 429 432 public static final String ERROR_UNEXPECTED_TRANSCODER_CLASS 433 = "ConfigTest.error.unexpected.transcoder.class"; 434 435 public static final String ENTRY_KEY_EXPECTED_TRANSCODER_CLASS 436 = "ConfigTest.entry.key.expected.transcoder.class"; 437 438 public static final String ENTRY_KEY_COMPUTED_TRANSCODER_CLASS 439 = "ConfigTest.entry.key.computed.trancoder.class"; 440 441 444 public static final String ERROR_UNEXPECTED_NUMBER_OF_HINTS 445 = "ConfigTest.error.unexpected.number.of.hints"; 446 447 public static final String ENTRY_KEY_EXPECTED_NUMBER_OF_HINTS 448 = "ConfigTest.entry.key.expected.number.of.hints"; 449 450 public static final String ENTRY_KEY_COMPUTED_NUMBER_OF_HINTS 451 = "ConfigTest.entry.key.computed.number.of.hints"; 452 453 public static final String ENTRY_KEY_EXPECTED_HINTS 454 = "ConfigTest.entry.key.expected.hints"; 455 456 public static final String ENTRY_KEY_COMPUTED_HINTS 457 = "ConfigTest.entry.key.computed.hints"; 458 459 public static final String ERROR_UNEXPECTED_TRANSCODING_HINT 460 = "ConfigTest.error.unexpected.transcoding.hint"; 461 462 public static final String ENTRY_KEY_EXPECTED_HINT_KEY 463 = "ConfigTest.entry.key.expected.hint.key"; 464 465 public static final String ENTRY_KEY_COMPUTED_HINT_VALUE 466 = "ConfigTest.entry.key.computed.hint.value"; 467 468 public static final String ENTRY_KEY_EXPECTED_HINT_VALUE 469 = "ConfigTest.entry.key.expected.hint.value"; 470 471 474 public static final String ERROR_UNEXPECTED_SOURCES_LIST 475 = "ConfigTest.error.unexpected.sources.list"; 476 477 public static final String ENTRY_KEY_EXPECTED_NUMBER_OF_SOURCES 478 = "ConfigTest.entry.key.expected.number.of.sources"; 479 480 public static final String ENTRY_KEY_COMPUTED_NUMBER_OF_SOURCES 481 = "ConfigTest.entry.key.computed.number.of.sources"; 482 483 public static final String ENTRY_KEY_EXPECTED_SOURCE_AT_INDEX 484 = "ConfigTest.entry.key.expected.source.at.index"; 485 486 public static final String ENTRY_KEY_COMPUTED_SOURCE_AT_INDEX 487 = "ConfigTest.entry.key.computed.source.at.index"; 488 489 public static final String ENTRY_KEY_COMPUTED_SOURCES_LIST 490 = "ConfigTest.entry.key.computed.sources.list"; 491 492 public static final String ENTRY_KEY_EXPECTED_SOURCES_LIST 493 = "ConfigTest.entry.key.expected.sources.list"; 494 495 498 public static final String ERROR_UNEXPECTED_DEST_LIST 499 = "ConfigTest.error.unexpected.dest.list"; 500 501 public static final String ENTRY_KEY_EXPECTED_NUMBER_OF_DEST 502 = "ConfigTest.entry.key.expected.number.of.dest"; 503 504 public static final String ENTRY_KEY_COMPUTED_NUMBER_OF_DEST 505 = "ConfigTest.entry.key.computed.number.of.dest"; 506 507 public static final String ENTRY_KEY_EXPECTED_DEST_AT_INDEX 508 = "ConfigTest.entry.key.expected.dest.at.index"; 509 510 public static final String ENTRY_KEY_COMPUTED_DEST_AT_INDEX 511 = "ConfigTest.entry.key.computed.dest.at.index"; 512 513 public static final String ENTRY_KEY_COMPUTED_DEST_LIST 514 = "ConfigTest.entry.key.computed.dest.list"; 515 516 public static final String ENTRY_KEY_EXPECTED_DEST_LIST 517 = "ConfigTest.entry.key.expected.dest.list"; 518 519 520 523 static class Config { 524 Class transcoderClass; 525 HashMap hints; 526 Vector sources, dest; 527 } 528 529 protected Config expectedConfig; 530 protected Config computedConfig; 531 532 protected AbstractConfigTest(){ 533 } 534 535 protected void setExpectedConfig(Config expectedConfig){ 536 this.expectedConfig = expectedConfig; 537 } 538 539 protected abstract void configure(SVGConverter c); 540 541 protected String makeSourceList(Vector v){ 542 int n = v.size(); 543 StringBuffer sb = new StringBuffer (); 544 for (int i=0; i<n; i++){ 545 sb.append(v.elementAt(i).toString()); 546 } 547 548 return sb.toString(); 549 } 550 551 protected String makeHintsString(HashMap map){ 552 Iterator iter = map.keySet().iterator(); 553 StringBuffer sb = new StringBuffer (); 554 while (iter.hasNext()){ 555 Object key = iter.next(); 556 sb.append(key.toString()); 557 sb.append("("); 558 sb.append(map.get(key).toString()); 559 sb.append(") -- "); 560 } 561 562 return sb.toString(); 563 } 564 565 566 public String getName(){ 567 return getId(); 568 } 569 570 public TestReport runImpl() throws Exception { 571 SVGConverter c = new SVGConverter(this); 572 configure(c); 573 c.execute(); 574 575 if (computedConfig == null){ 580 return reportError(ERROR_NO_COMPUTED_TASK); 581 } 582 583 if (!expectedConfig.transcoderClass.equals 584 (computedConfig.transcoderClass)){ 585 TestReport report = reportError(ERROR_UNEXPECTED_TRANSCODER_CLASS); 586 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_TRANSCODER_CLASS, 587 expectedConfig.transcoderClass); 588 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_TRANSCODER_CLASS, 589 computedConfig.transcoderClass); 590 591 return report; 592 } 593 594 int en = expectedConfig.sources.size(); 596 int cn = computedConfig.sources.size(); 597 598 if (en != cn){ 599 TestReport report = reportError(ERROR_UNEXPECTED_SOURCES_LIST); 600 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_NUMBER_OF_SOURCES, 601 "" + en); 602 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_NUMBER_OF_SOURCES, 603 "" + cn); 604 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_SOURCES_LIST, 605 makeSourceList(expectedConfig.sources)); 606 607 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_SOURCES_LIST, 608 makeSourceList(computedConfig.sources)); 609 610 return report; 611 } 612 613 for (int i=0; i<en; i++){ 614 Object es = expectedConfig.sources.elementAt(i); 615 Object cs = computedConfig.sources.elementAt(i); 616 if (!computedConfig.sources.contains(es)){ 617 TestReport report = reportError(ERROR_UNEXPECTED_SOURCES_LIST); 618 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_SOURCE_AT_INDEX, 619 "[" + i + "] = -" + es + "- (" + es.getClass().getName() + ")"); 620 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_SOURCE_AT_INDEX, 621 "[" + i + "] = -" + cs + "- (" + es.getClass().getName() + ")"); 622 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_SOURCES_LIST, 623 makeSourceList(expectedConfig.sources)); 624 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_SOURCES_LIST, 625 makeSourceList(computedConfig.sources)); 626 627 return report; 628 } 629 } 630 631 en = expectedConfig.dest.size(); 633 cn = computedConfig.dest.size(); 634 635 if (en != cn){ 636 TestReport report = reportError(ERROR_UNEXPECTED_DEST_LIST); 637 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_NUMBER_OF_DEST, 638 "" + en); 639 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_NUMBER_OF_DEST, 640 "" + cn); 641 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_DEST_LIST, 642 makeSourceList(expectedConfig.dest)); 643 644 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_DEST_LIST, 645 makeSourceList(computedConfig.dest)); 646 647 return report; 648 } 649 650 for (int i=0; i<en; i++){ 651 Object es = expectedConfig.dest.elementAt(i); 652 Object cs = computedConfig.dest.elementAt(i); 653 if (!computedConfig.dest.contains(cs)){ 654 TestReport report = reportError(ERROR_UNEXPECTED_DEST_LIST); 655 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_DEST_AT_INDEX, 656 "[" + i + "] = " + es); 657 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_DEST_AT_INDEX, 658 "[" + i + "] = " + cs); 659 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_DEST_LIST, 660 makeSourceList(expectedConfig.dest)); 661 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_DEST_LIST, 662 makeSourceList(computedConfig.dest)); 663 664 return report; 665 } 666 } 667 668 en = expectedConfig.hints.size(); 672 cn = computedConfig.hints.size(); 673 674 if (en != cn){ 675 TestReport report = reportError(ERROR_UNEXPECTED_NUMBER_OF_HINTS); 676 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_NUMBER_OF_HINTS, 677 "" + en); 678 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_NUMBER_OF_HINTS, 679 "" + cn); 680 681 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_HINTS, 682 makeHintsString(expectedConfig.hints)); 683 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_HINTS, 684 makeHintsString(computedConfig.hints)); 685 686 return report; 687 } 688 689 Iterator iter = expectedConfig.hints.keySet().iterator(); 690 while (iter.hasNext()){ 691 Object hintKey = iter.next(); 692 Object expectedHintValue = expectedConfig.hints.get(hintKey); 693 694 Object computedHintValue = computedConfig.hints.get(hintKey); 695 696 if (!expectedHintValue.equals(computedHintValue)){ 697 TestReport report = reportError(ERROR_UNEXPECTED_TRANSCODING_HINT); 698 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_HINT_KEY, 699 hintKey.toString()); 700 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_HINT_VALUE, 701 expectedHintValue.toString()); 702 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_HINT_VALUE, 703 "" + computedHintValue); 704 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_HINTS, 705 makeHintsString(expectedConfig.hints)); 706 report.addDescriptionEntry(ENTRY_KEY_COMPUTED_HINTS, 707 makeHintsString(computedConfig.hints)); 708 709 return report; 710 } 711 } 712 713 return reportSuccess(); 714 715 } 716 717 public boolean proceedWithComputedTask(Transcoder transcoder, 718 Map hints, 719 Vector sources, 720 Vector dest){ 721 computedConfig = new Config(); 722 computedConfig.transcoderClass = transcoder.getClass(); 723 computedConfig.sources = (Vector)sources.clone(); 724 computedConfig.dest = (Vector)dest.clone(); 725 computedConfig.hints = new HashMap(hints); 726 return false; } 729 730 public boolean proceedWithSourceTranscoding(SVGConverterSource source, 731 File dest) { 732 return true; 733 } 734 735 public boolean proceedOnSourceTranscodingFailure(SVGConverterSource source, 736 File dest, 737 String errorCode){ 738 return true; 739 } 740 741 public void onSourceTranscodingSuccess(SVGConverterSource source, 742 File dest){ 743 } 744 } 745 746 749 class OperationTest extends AbstractTest{ 750 public TestReport runImpl() throws Exception { 751 SVGConverter c = new SVGConverter(); 752 configure(c); 753 c.execute(); 754 return reportSuccess(); 755 } 756 757 protected void configure(SVGConverter c){ 758 } 760 } 761 762 767 class TranscoderConfigTest extends AbstractConfigTest { 768 static final String SOURCE_FILE = "samples/anne.svg"; 769 static final String DEST_FILE_NAME = "samples/anne"; 770 771 protected DestinationType dstType; 772 777 public TranscoderConfigTest(DestinationType dstType, 778 Class expectedTranscoderClass){ 779 this.dstType = dstType; 780 781 Config config = new Config(); 782 config.transcoderClass = expectedTranscoderClass; 783 784 Vector sources = new Vector(); 785 sources.addElement(new SVGConverterFileSource(new File(SOURCE_FILE))); 786 config.sources = sources; 787 788 Vector dest = new Vector(); 789 dest.addElement(new File(DEST_FILE_NAME + dstType.getExtension())); 790 config.dest = dest; 791 792 HashMap hints = new HashMap(); 793 config.hints = hints; 794 795 setExpectedConfig(config); 796 } 797 798 801 public void configure(SVGConverter c){ 802 c.setSources(new String [] { SOURCE_FILE }); 803 c.setDst(new File(DEST_FILE_NAME + dstType.getExtension())); 804 c.setDestinationType(dstType); 805 } 806 } 807 808 809 813 class HintsConfigTest extends AbstractConfigTest { 814 static final String SOURCE_FILE = "samples/anne.svg"; 815 static final String DEST_FILE_NAME = "samples/anne"; 816 static final Class EXPECTED_TRANSCODER_CLASS = org.apache.batik.transcoder.image.PNGTranscoder.class; 817 static final DestinationType DST_TYPE = DestinationType.PNG; 818 819 821 public HintsConfigTest(Object [][] hintsMap){ 822 Config config = new Config(); 823 config.transcoderClass = EXPECTED_TRANSCODER_CLASS; 824 825 Vector sources = new Vector(); 826 sources.addElement(new SVGConverterFileSource(new File(SOURCE_FILE))); 827 config.sources = sources; 828 829 Vector dest = new Vector(); 830 dest.addElement(new File(DEST_FILE_NAME + DST_TYPE.getExtension())); 831 config.dest = dest; 832 833 HashMap hints = new HashMap(); 834 835 int n = hintsMap.length; 839 for (int i=0; i<n; i++){ 840 hints.put(hintsMap[i][0], hintsMap[i][1]); 841 } 842 config.hints = hints; 843 844 setExpectedConfig(config); 845 } 846 847 850 public void configure(SVGConverter c){ 851 c.setSources(new String [] { SOURCE_FILE }); 852 c.setDst(new File(DEST_FILE_NAME + DST_TYPE.getExtension())); 853 c.setDestinationType(DST_TYPE); 854 deltaConfigure(c); 855 } 856 857 protected void deltaConfigure(SVGConverter c){ 858 } 859 } 860 861 869 class SourcesConfigTest extends AbstractConfigTest { 870 static final Class EXPECTED_TRANSCODER_CLASS = org.apache.batik.transcoder.image.PNGTranscoder.class; 871 static final DestinationType DST_TYPE = DestinationType.PNG; 872 static final String SVG_EXTENSION = ".svg"; 873 874 876 public SourcesConfigTest(Object [] expectedSources){ 877 Config config = new Config(); 878 config.transcoderClass = EXPECTED_TRANSCODER_CLASS; 879 880 Vector sources = new Vector(); 881 Vector dest = new Vector(); 882 for (int i=0; i<expectedSources.length; i++){ 883 sources.addElement(new SVGConverterFileSource(new File(expectedSources[i] + SVG_EXTENSION))); 884 dest.addElement(new File(expectedSources[i] + DST_TYPE.getExtension())); 885 } 886 config.sources = sources; 887 config.dest = dest; 888 889 HashMap hints = new HashMap(); 890 config.hints = hints; 891 892 setExpectedConfig(config); 893 } 894 895 898 public void configure(SVGConverter c){ 899 c.setDestinationType(DST_TYPE); 900 setSources(c); 901 } 902 903 protected void setSources(SVGConverter c){ 904 } 905 } 906 907 914 class DestConfigTest extends AbstractConfigTest { 915 static final Class EXPECTED_TRANSCODER_CLASS = org.apache.batik.transcoder.image.PNGTranscoder.class; 916 static final DestinationType DST_TYPE = DestinationType.PNG; 917 String [] sourcesStrings; 918 920 public DestConfigTest(String [] sourcesStrings, 921 String [] expectedDest){ 922 this.sourcesStrings = sourcesStrings; 923 Config config = new Config(); 924 config.transcoderClass = EXPECTED_TRANSCODER_CLASS; 925 926 Vector sources = new Vector(); 927 Vector dest = new Vector(); 928 for (int i=0; i<sourcesStrings.length; i++){ 929 sources.addElement(new SVGConverterFileSource(new File(sourcesStrings[i]))); 930 } 931 932 for (int i=0; i<expectedDest.length; i++){ 933 dest.addElement(new File(expectedDest[i])); 934 } 935 936 config.sources = sources; 937 config.dest = dest; 938 939 HashMap hints = new HashMap(); 940 config.hints = hints; 941 942 setExpectedConfig(config); 943 } 944 945 948 public void configure(SVGConverter c){ 949 c.setDestinationType(DST_TYPE); 950 c.setSources(sourcesStrings); 951 setDestination(c); 952 } 953 954 protected void setDestination(SVGConverter c){ 955 } 956 } 957 958 964 class ConfigErrorTest extends AbstractTest implements SVGConverterController{ 965 String errorCode; 966 967 String foundErrorCode = null; 968 969 public static final String ERROR_DID_NOT_GET_ERROR 970 = "ConfigErrorTest.error.did.not.get.error"; 971 972 public static final String ERROR_UNEXPECTED_ERROR_CODE 973 = "ConfigErrorTest.error.unexpected.error.code"; 974 975 public static final String ENTRY_KEY_EXPECTED_ERROR_CODE 976 = "ConfigErrorTest.entry.key.expected.error.code"; 977 978 public static final String ENTRY_KEY_GOT_ERROR_CODE 979 = "ConfigErrorTest.entry.key.got.error.code"; 980 981 public ConfigErrorTest(String expectedErrorCode){ 982 this.errorCode = expectedErrorCode; 983 } 984 985 public String getName(){ 986 return getId(); 987 } 988 989 public TestReport runImpl() throws Exception { 990 SVGConverter c = new SVGConverter(this); 991 992 c.setDestinationType(DestinationType.PNG); 993 c.setSources(new String []{ "samples/anne.svg" }); 994 995 configure(c); 996 997 try { 998 c.execute(); 999 } catch(SVGConverterException e){ 1000 e.printStackTrace(); 1001 foundErrorCode = e.getErrorCode(); 1002 } 1003 1004 if (foundErrorCode == null){ 1005 TestReport report = reportError(ERROR_DID_NOT_GET_ERROR); 1006 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_ERROR_CODE, 1007 errorCode); 1008 return report; 1009 } 1010 1011 if (foundErrorCode.equals(errorCode)){ 1012 return reportSuccess(); 1013 } 1014 1015 TestReport report = reportError(ERROR_UNEXPECTED_ERROR_CODE); 1016 report.addDescriptionEntry(ENTRY_KEY_EXPECTED_ERROR_CODE, 1017 errorCode); 1018 report.addDescriptionEntry(ENTRY_KEY_GOT_ERROR_CODE, 1019 foundErrorCode); 1020 return report; 1021 } 1022 1023 protected void configure(SVGConverter c){ 1024 } 1025 1026 public boolean proceedWithComputedTask(Transcoder transcoder, 1027 Map hints, 1028 Vector sources, 1029 Vector dest){ 1030 System.out.println("==================> Starting to process Task <========================="); 1031 return true; 1032 } 1033 1034 public boolean proceedWithSourceTranscoding(SVGConverterSource source, 1035 File dest) { 1036 System.out.print("Transcoding " + source + " to " + dest + " ... "); 1037 return true; 1038 } 1039 1040 public boolean proceedOnSourceTranscodingFailure(SVGConverterSource source, 1041 File dest, 1042 String errorCode){ 1043 System.out.println(" ... FAILURE"); 1044 foundErrorCode = errorCode; 1045 return true; 1046 } 1047 1048 public void onSourceTranscodingSuccess(SVGConverterSource source, 1049 File dest){ 1050 System.out.println(" ... SUCCESS"); 1051 } 1052} 1053 1054 1058class ConverterOutputTest extends AbstractTest { 1059 String svgSource; 1060 String pngDest; 1061 String pngRef; 1062 1063 public ConverterOutputTest(String svgSource, 1064 String pngDest, 1065 String pngRef){ 1066 this.svgSource = svgSource; 1067 this.pngDest = pngDest; 1068 this.pngRef = pngRef; 1069 } 1070 1071 public TestReport runImpl() throws Exception { 1072 SVGConverter c = new SVGConverter(); 1073 System.out.println("Converting : " + svgSource); 1074 c.setSources(new String []{svgSource}); 1075 c.setDst(new File(pngDest)); 1076 1077 c.setDestinationType(DestinationType.PNG); 1078 1079 c.execute(); 1080 1081 ImageCompareTest t = new ImageCompareTest(pngDest, 1082 pngRef); 1083 TestReport r = t.run(); 1084 (new File(pngDest)).delete(); 1085 return r; 1086 } 1087} 1088 | Popular Tags |