blob: f9da9a95114a662518d19b8230e83a8b784cf096 [file] [log] [blame]
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.batik.svggen;
import java.io.File;
import java.net.URL;
import org.apache.batik.test.Test;
import org.apache.batik.test.DefaultTestSuite;
import org.apache.batik.test.svg.SVGRenderingAccuracyTest;
import org.apache.batik.test.util.ImageCompareTest;
/**
* This test validates that a given rendering sequence, modeled
* by a <tt>Painter</tt> by doing several subtests for a
* single input class:
* + SVGAccuracyTest with several configurations
* + SVGRenderingAccuracyTest
* + ImageComparisonTest between the rendering of the generated
* SVG for various configurations.
*
* @author <a href="mailto:vhardy@apache.org">Vincent Hardy</a>
* @version $Id$
*/
public class SVGGeneratorTests extends DefaultTestSuite {
public static final String GENERATOR_REFERENCE_BASE
= "test-references/org/apache/batik/svggen/";
public static final String RENDERING_DIR
= "rendering";
public static final String ACCEPTED_VARIATION_DIR
= "accepted-variation";
public static final String CANDIDATE_VARIATION_DIR
= "candidate-variation";
public static final String CANDIDATE_REF_DIR
= "candidate-ref";
public static final String RENDERING_CANDIDATE_REF_DIR
= "candidate-reference";
public static final String PNG_EXTENSION
= ".png";
public static final String SVG_EXTENSION
= ".svg";
public static final String PLAIN_GENERATION_PREFIX = "";
public static final String CUSTOM_CONTEXT_GENERATION_PREFIX = "Context";
/**
* @param name of the <tt>Painter</tt> class
*/
public SVGGeneratorTests(){
}
/**
* The id should be the Painter's class name
* prefixed with the package name defined in
* getPackageName
*/
public void setId(String id){
super.setId(id);
String clName = getPackageName() + "." + id;
Class cl = null;
try{
cl = Class.forName(clName);
}catch(ClassNotFoundException e){
throw new IllegalArgumentException(clName);
}
Object o = null;
try {
o = cl.newInstance();
}catch(Exception e){
throw new IllegalArgumentException(clName);
}
if(!(o instanceof Painter)){
throw new IllegalArgumentException(clName);
}
Painter painter = (Painter)o;
addTest(makeSVGAccuracyTest(painter, id));
addTest(makeGeneratorContext(painter, id));
addTest(makeSVGRenderingAccuracyTest(painter, id, PLAIN_GENERATION_PREFIX));
addTest(makeSVGRenderingAccuracyTest(painter, id, CUSTOM_CONTEXT_GENERATION_PREFIX));
addTest(makeImageCompareTest(painter, id, PLAIN_GENERATION_PREFIX,
CUSTOM_CONTEXT_GENERATION_PREFIX));
}
/**
* For the Generator test, the relevant name is the id
*/
public String getName(){
return "SVGGeneratorTest - " + getId();
}
protected String getPackageName(){
return "org.apache.batik.svggen";
}
private Test makeImageCompareTest(Painter painter,
String id,
String prefixA,
String prefixB){
String cl = getNonQualifiedClassName(painter);
String clA = prefixA + cl;
String clB = prefixB + cl;
String testReferenceA = GENERATOR_REFERENCE_BASE + RENDERING_DIR + "/" + clA + PNG_EXTENSION;
String testReferenceB = GENERATOR_REFERENCE_BASE + RENDERING_DIR + "/" + clB + PNG_EXTENSION;
ImageCompareTest t = new ImageCompareTest(testReferenceA, testReferenceB);
t.setName(id + "-RenderingComparison");
t.setId(id + ".renderingComparison");
return t;
}
private Test makeSVGRenderingAccuracyTest(Painter painter, String id, String prefix){
String cl = prefix + getNonQualifiedClassName(painter);
String testSource = GENERATOR_REFERENCE_BASE + cl + SVG_EXTENSION;
String testReference = GENERATOR_REFERENCE_BASE + RENDERING_DIR + "/" + cl + PNG_EXTENSION;
String variationURL = GENERATOR_REFERENCE_BASE + RENDERING_DIR + "/" + ACCEPTED_VARIATION_DIR + "/" + cl + PNG_EXTENSION;
String saveVariation = GENERATOR_REFERENCE_BASE + RENDERING_DIR + "/" + CANDIDATE_VARIATION_DIR + "/" + cl + PNG_EXTENSION;
String candidateReference = GENERATOR_REFERENCE_BASE + RENDERING_DIR + "/" + RENDERING_CANDIDATE_REF_DIR + "/" + cl + PNG_EXTENSION;
SVGRenderingAccuracyTest test = new SVGRenderingAccuracyTest(testSource, testReference);
test.setVariationURL(variationURL);
test.setSaveVariation(new File(saveVariation));
test.setCandidateReference(new File(candidateReference));
test.setName(id + "-" + prefix + "RenderingCheck");
test.setId(id + "." + prefix + "renderingCheck");
return test;
}
private Test makeGeneratorContext(Painter painter, String id){
String cl = CUSTOM_CONTEXT_GENERATION_PREFIX + getNonQualifiedClassName(painter);
GeneratorContext test
= new GeneratorContext(painter, makeURL(painter, CUSTOM_CONTEXT_GENERATION_PREFIX));
test.setSaveSVG(new File(GENERATOR_REFERENCE_BASE + CANDIDATE_REF_DIR + "/" + cl + SVG_EXTENSION));
test.setName(id + "-ConfiguredContextGeneration");
test.setId(id + ".configuredContextGeneration");
return test;
}
private Test makeSVGAccuracyTest(Painter painter, String id){
String cl = PLAIN_GENERATION_PREFIX + getNonQualifiedClassName(painter);
SVGAccuracyTest test
= new SVGAccuracyTest(painter, makeURL(painter, PLAIN_GENERATION_PREFIX));
test.setSaveSVG(new File(GENERATOR_REFERENCE_BASE + CANDIDATE_REF_DIR + "/" + cl + SVG_EXTENSION));
test.setName(id + "-DefaultContextGeneration");
test.setId(id + ".defaultContextGeneration");
return test;
}
private String getNonQualifiedClassName(Painter painter){
String cl = painter.getClass().getName();
int n = cl.lastIndexOf(".");
return cl.substring(n+1);
}
private URL makeURL(Painter painter, String prefix){
String urlString = "file:" + GENERATOR_REFERENCE_BASE
+ prefix + getNonQualifiedClassName(painter) + SVG_EXTENSION;
URL url = null;
try{
url = new URL(urlString);
}catch(Exception e){
throw new Error(); // Should not happen
}
return url;
}
}