blob: 77662a5a9172be68590edce6a10a9f64865c8b0e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.intermediate;
import java.io.File;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.Result;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.w3c.dom.Document;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandler;
import org.apache.fop.render.intermediate.IFSerializer;
/**
* A common super-class for intermediate format test cases.
*/
abstract class AbstractIFTestCase extends AbstractIntermediateTestCase {
private static final Schema IF_SCHEMA;
static {
Schema ifSchema = null;
try {
SchemaFactory sFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
sFactory.setErrorHandler(new ErrorHandler() {
public void error(SAXParseException exception) throws SAXException {
throw exception;
}
public void fatalError(SAXParseException exception) throws SAXException {
throw exception;
}
public void warning(SAXParseException exception) throws SAXException {
throw exception;
}
});
File ifSchemaFile = new File(
"src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd");
ifSchema = sFactory.newSchema(ifSchemaFile);
} catch (IllegalArgumentException iae) {
System.err.println("No suitable SchemaFactory for XML Schema validation found!");
} catch (SAXException e) {
throw new ExceptionInInitializerError(e);
}
IF_SCHEMA = ifSchema;
}
/**
* Creates a new test case.
*
* @param testFile the file containing the document and the tests
* @throws IOException if an I/O error occurs while loading the test case
*/
public AbstractIFTestCase(File testFile) throws IOException {
super(testFile);
}
@Override
protected String getIntermediateFileExtension() {
return ".if.xml";
}
@Override
protected Document buildIntermediateDocument(Templates templates) throws Exception {
Transformer transformer = templates.newTransformer();
setErrorListener(transformer);
//Set up XMLRenderer to render to a DOM
DOMResult domResult = new DOMResult();
FOUserAgent userAgent = createUserAgent();
//Create an instance of the target renderer so the XMLRenderer can use its font setup
IFDocumentHandler targetHandler = userAgent.getRendererFactory().createDocumentHandler(
userAgent, getTargetMIME());
//Setup painter
IFSerializer serializer = new IFSerializer();
serializer.setContext(new IFContext(userAgent));
serializer.mimicDocumentHandler(targetHandler);
serializer.setResult(domResult);
userAgent.setDocumentHandlerOverride(serializer);
Fop fop = fopFactory.newFop(userAgent);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(new DOMSource(testDoc), res);
return (Document) domResult.getNode();
}
@Override
protected void validate(Document doc) throws SAXException, IOException {
if (IF_SCHEMA == null) {
return; //skip validation;
}
Validator validator = IF_SCHEMA.newValidator();
validator.setErrorHandler(new ErrorHandler() {
public void error(SAXParseException exception) throws SAXException {
throw exception;
}
public void fatalError(SAXParseException exception) throws SAXException {
throw exception;
}
public void warning(SAXParseException exception) throws SAXException {
//ignore
}
});
validator.validate(new DOMSource(doc));
}
}