aboutsummaryrefslogtreecommitdiffstats
path: root/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/java/org/apache/fop/intermediate/AbstractIFTestCase.java')
-rw-r--r--test/java/org/apache/fop/intermediate/AbstractIFTestCase.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java b/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java
new file mode 100644
index 000000000..56d613e20
--- /dev/null
+++ b/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java
@@ -0,0 +1,137 @@
+/*
+ * 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);
+ 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));
+ }
+
+}