Modified: xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/intermediate/IFTester.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/intermediate/IFTester.java?rev=764744&r1=764743&r2=764744&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/intermediate/IFTester.java (original) +++ xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/intermediate/IFTester.java Tue Apr 14 11:35:08 2009 @@ -48,12 +48,14 @@ import org.apache.fop.area.AreaTreeModel; import org.apache.fop.area.AreaTreeParser; import org.apache.fop.area.RenderPagesModel; +import org.apache.fop.events.model.EventSeverity; import org.apache.fop.fonts.FontInfo; import org.apache.fop.layoutengine.EvalCheck; import org.apache.fop.layoutengine.TrueCheck; import org.apache.fop.render.intermediate.IFContext; import org.apache.fop.render.intermediate.IFRenderer; import org.apache.fop.render.intermediate.IFSerializer; +import org.apache.fop.util.ConsoleEventListenerForTests; import org.apache.fop.util.DelegatingContentHandler; /** @@ -106,9 +108,12 @@ } } - private Document createIF(Document areaTreeXML) throws TransformerException { + private Document createIF(File testFile, Document areaTreeXML) throws TransformerException { try { FOUserAgent ua = fopFactory.newFOUserAgent(); + ua.setBaseURL(testFile.getParentFile().toURI().toURL().toExternalForm()); + ua.getEventBroadcaster().addEventListener( + new ConsoleEventListenerForTests(testFile.getName(), EventSeverity.WARN)); IFRenderer ifRenderer = new IFRenderer(); ifRenderer.setUserAgent(ua); @@ -160,7 +165,7 @@ */ public void doIFChecks(File testFile, Element checksRoot, Document areaTreeXML) throws TransformerException { - Document ifDocument = createIF(areaTreeXML); + Document ifDocument = createIF(testFile, areaTreeXML); if (this.backupDir != null) { Transformer transformer = tfactory.newTransformer(); Source src = new DOMSource(ifDocument);
Modified: xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOPTestbed.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOPTestbed.java?rev=764744&r1=764743&r2=764744&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOPTestbed.java (original) +++ xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOPTestbed.java Tue Apr 14 11:35:08 2009 @@ -20,9 +20,9 @@ package org.apache.fop.threading; import java.io.File; -import java.io.InputStream; import java.io.OutputStream; import java.text.DecimalFormat; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -41,6 +41,8 @@ import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.commons.io.IOUtils; +import org.apache.commons.io.output.CountingOutputStream; +import org.apache.commons.io.output.NullOutputStream; /** * Testbed for multi-threading tests. The class can run a configurable set of task a number of @@ -55,13 +57,17 @@ private File outputDir; private Configuration fopCfg; private FOProcessor foprocessor; + private boolean writeToDevNull; private int counter = 0; + private List results = Collections.synchronizedList(new java.util.LinkedList()); + /** {...@inheritdoc} */ public void configure(Configuration configuration) throws ConfigurationException { this.threads = configuration.getChild("threads").getValueAsInteger(10); this.outputDir = new File(configuration.getChild("output-dir").getValue()); + this.writeToDevNull = configuration.getChild("devnull").getValueAsBoolean(false); Configuration tasks = configuration.getChild("tasks"); this.repeat = tasks.getAttributeAsInteger("repeat", 1); Configuration[] entries = tasks.getChildren("task"); @@ -85,11 +91,12 @@ this.counter = 0; //Initialize threads + ThreadGroup workerGroup = new ThreadGroup("FOP workers"); List threadList = new java.util.LinkedList(); for (int ti = 0; ti < this.threads; ti++) { TaskRunner runner = new TaskRunner(); ContainerUtil.enableLogging(runner, getLogger()); - Thread thread = new Thread(runner); + Thread thread = new Thread(workerGroup, runner, "Worker- " + ti); threadList.add(thread); } @@ -112,7 +119,38 @@ //ignore } } - getLogger().info("Stress test duration: " + (System.currentTimeMillis() - start) + "ms"); + long duration = System.currentTimeMillis() - start; + + report(duration); + } + + private void report(long duration) { + int count = this.results.size(); + int failures = 0; + long bytesWritten = 0; + System.out.println("Report on " + count + " tasks:"); + Iterator iter = this.results.iterator(); + while (iter.hasNext()) { + Result res = (Result)iter.next(); + if (res.failure != null) { + System.out.println("FAIL: " + (res.end - res.start) + " " + res.task); + System.out.println(" -> " + res.failure.getMessage()); + failures++; + } else { + System.out.println("good: " + (res.end - res.start) + " " + res.filesize + + " " + res.task); + bytesWritten += res.filesize; + } + } + System.out.println("Stress test duration: " + duration + "ms"); + if (failures > 0) { + System.out.println(failures + " failures of " + count + " documents!!!"); + } else { + float mb = 1024f * 1024f; + System.out.println("Bytes written: " + (bytesWritten / mb) + " MB, " + + (bytesWritten * 1000 / duration) + " bytes / sec"); + System.out.println("NO failures with " + count + " documents."); + } } private class TaskRunner extends AbstractLogEnabled implements Runnable { @@ -222,29 +260,61 @@ public void execute() throws Exception { getLogger().info("Processing: " + def); - DecimalFormat df = new DecimalFormat("00000"); - File outfile = new File(outputDir, df.format(num) + fop.getTargetFileExtension()); - OutputStream out = new java.io.FileOutputStream(outfile); + long start = System.currentTimeMillis(); try { - InputStream in; - Templates templates; - - if (def.getFO() != null) { - in = new java.io.FileInputStream(new File(def.getFO())); - templates = null; + DecimalFormat df = new DecimalFormat("00000"); + File outfile = new File(outputDir, df.format(num) + fop.getTargetFileExtension()); + OutputStream out; + if (writeToDevNull) { + out = new NullOutputStream(); } else { - in = new java.io.FileInputStream(new File(def.getXML())); - templates = def.getTemplates(); + out = new java.io.FileOutputStream(outfile); + out = new java.io.BufferedOutputStream(out); } + CountingOutputStream cout = new CountingOutputStream(out); try { - fop.process(in, templates, out); + Source src; + Templates templates; + + if (def.getFO() != null) { + src = new StreamSource(new File(def.getFO())); + templates = null; + } else { + src = new StreamSource(new File(def.getXML())); + templates = def.getTemplates(); + } + fop.process(src, templates, cout); } finally { - IOUtils.closeQuietly(in); + IOUtils.closeQuietly(cout); } - } finally { - IOUtils.closeQuietly(out); + results.add(new Result(def, start, System.currentTimeMillis(), + cout.getByteCount())); + } catch (Exception e) { + results.add(new Result(def, start, System.currentTimeMillis(), e)); + throw e; } } } + private static class Result { + + private TaskDef task; + private long start; + private long end; + private long filesize; + private Throwable failure; + + public Result(TaskDef task, long start, long end, long filesize) { + this(task, start, end, null); + this.filesize = filesize; + } + + public Result(TaskDef task, long start, long end, Throwable failure) { + this.task = task; + this.start = start; + this.end = end; + this.failure = failure; + } + } + } \ No newline at end of file Modified: xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessor.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessor.java?rev=764744&r1=764743&r2=764744&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessor.java (original) +++ xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessor.java Tue Apr 14 11:35:08 2009 @@ -19,9 +19,9 @@ package org.apache.fop.threading; -import java.io.InputStream; import java.io.OutputStream; +import javax.xml.transform.Source; import javax.xml.transform.Templates; /** @@ -31,12 +31,12 @@ /** * Process a file. - * @param in the InputStream for the FO or XML file + * @param src the Source for the FO or XML file * @param templates a JAXP Templates object for an XSLT transformation or null * @param out the OutputStream for the target file * @throws Exception if an error occurs */ - void process(InputStream in, Templates templates, OutputStream out) + void process(Source src, Templates templates, OutputStream out) throws Exception; /** Modified: xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessorImpl.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessorImpl.java?rev=764744&r1=764743&r2=764744&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessorImpl.java (original) +++ xmlgraphics/fop/branches/Temp_Accessibility/test/java/org/apache/fop/threading/FOProcessorImpl.java Tue Apr 14 11:35:08 2009 @@ -19,8 +19,9 @@ package org.apache.fop.threading; -import java.io.InputStream; import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; import javax.xml.transform.Result; import javax.xml.transform.Source; @@ -29,19 +30,23 @@ import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResult; -import javax.xml.transform.stream.StreamSource; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.commons.io.FilenameUtils; import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; +import org.apache.fop.events.Event; +import org.apache.fop.events.EventFormatter; +import org.apache.fop.events.EventListener; +import org.apache.fop.events.model.EventSeverity; /** * Default implementation of the FOProcessor interface using FOP. @@ -71,9 +76,17 @@ } /** {...@inheritdoc} */ - public void process(InputStream in, Templates templates, OutputStream out) + public void process(Source src, Templates templates, OutputStream out) throws org.apache.fop.apps.FOPException, java.io.IOException { FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); + foUserAgent.setBaseURL(src.getSystemId()); + try { + URL url = new URL(src.getSystemId()); + String filename = FilenameUtils.getName(url.getPath()); + foUserAgent.getEventBroadcaster().addEventListener(new AvalonAdapter(filename)); + } catch (MalformedURLException mfue) { + throw new RuntimeException(mfue); + } Fop fop = fopFactory.newFop(this.mime, foUserAgent, out); try { @@ -83,7 +96,6 @@ } else { transformer = templates.newTransformer(); } - Source src = new StreamSource(in); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); } catch (TransformerException e) { @@ -96,4 +108,29 @@ return this.fileExtension; } + private class AvalonAdapter implements EventListener { + + private String filename; + + public AvalonAdapter(String filename) { + this.filename = filename; + } + + public void processEvent(Event event) { + String msg = EventFormatter.format(event); + EventSeverity severity = event.getSeverity(); + if (severity == EventSeverity.INFO) { + //getLogger().info(filename + ": " + msg); + } else if (severity == EventSeverity.WARN) { + //getLogger().warn(filename + ": " + msg); + } else if (severity == EventSeverity.ERROR) { + getLogger().error(filename + ": " + msg); + } else if (severity == EventSeverity.FATAL) { + getLogger().fatalError(filename + ": " + msg); + } else { + assert false; + } + } + + } } \ No newline at end of file Modified: xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/afp-extension_1.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/afp-extension_1.xml?rev=764744&r1=764743&r2=764744&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/afp-extension_1.xml (original) +++ xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/afp-extension_1.xml Tue Apr 14 11:35:08 2009 @@ -25,7 +25,8 @@ </info> <fo> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" - xmlns:afp="http://xmlgraphics.apache.org/fop/extensions/afp"> + xmlns:afp="http://xmlgraphics.apache.org/fop/extensions/afp" + xmlns:fox="http://xmlgraphics.apache.org/fop/extensions"> <fo:layout-master-set> <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in"> <afp:include-page-overlay name="O1SAMP1 "/> @@ -35,7 +36,9 @@ <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> - <fo:page-sequence master-reference="normal"> + <fo:page-sequence master-reference="normal" fox:test-ignore="this"> + <afp:invoke-medium-map name="MYMAP"/> + <afp:tag-logical-element name="foo" value="bar"/> <fo:flow flow-name="xsl-region-body"> <fo:block>Text on page <fo:page-number/>.</fo:block> <fo:block break-before="page">Text on page <fo:page-number/>.</fo:block> @@ -43,7 +46,7 @@ </fo:page-sequence> </fo:root> </fo> - <checks> + <checks xmlns:afp="apache:fop:extensions:afp"> <eval expected="4" xpath="count(/areaTree/pageSequence/pageviewpo...@nr=1]/page/extension-attachments/child::*)"/> <eval expected="O1SAMP1 " xpath="/areaTree/pageSequence/pageviewpo...@nr=1]/page/extension-attachments/child::*[1]/@name"/> <eval expected="S1ISLOGO" xpath="/areaTree/pageSequence/pageviewpo...@nr=1]/page/extension-attachments/child::*[2]/@name"/> @@ -52,5 +55,29 @@ <eval expected="My NOP" xpath="/areaTree/pageSequence/pageviewpo...@nr=1]/page/extension-attachments/child::*[4]/@name"/> <eval expected="4" xpath="count(/areaTree/pageSequence/pageviewpo...@nr=2]/page/extension-attachments/child::*)"/> + + <eval expected="2" xpath="count(/areaTree/pageSequence/extension-attachments/child::*)"/> + <eval expected="MYMAP" xpath="/areaTree/pageSequence/extension-attachments/child::*[1]/@name"/> + <eval expected="bar" xpath="/areaTree/pageSequence/extension-attachments/afp:tag-logical-eleme...@name = 'foo']/@value"/> + + <!-- This just tests if extension attributes make it through to the PageSequence object. --> + <eval expected="this" xpath="/areaTree/pageSequence/@fox:test-ignore" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions"/> </checks> + <if-checks xmlns:if="http://xmlgraphics.apache.org/fop/intermediate" + xmlns:afp="apache:fop:extensions:afp"> + <eval expected="4" xpath="count(//if:pa...@name = '1']/if:page-header/child::*)"/> + <eval expected="O1SAMP1 " xpath="//if:pa...@name = '1']/if:page-header/afp:include-page-overlay[1]/@name"/> + <eval expected="S1ISLOGO" xpath="//if:pa...@name = '1']/if:page-header/afp:include-page-segment[1]/@name"/> + <eval expected="The TLE Value" xpath="//if:pa...@name = '1']/if:page-header/afp:tag-logical-eleme...@name = 'The TLE Name']/@value"/> + <eval expected="My NOP" xpath="//if:pa...@name = '1']/if:page-header/afp:no-operation[1]/@name"/> + <eval expected="insert up to 32k of character data here!" xpath="//if:pa...@name = '1']/if:page-header/afp:no-operation[1]"/> + + <eval expected="4" xpath="count(//if:pa...@name = '2']/if:page-header/child::*)"/> + + <eval expected="MYMAP" xpath="//if:page-sequence/afp:invoke-medium-map/@name"/> + <eval expected="bar" xpath="//if:page-sequence/afp:tag-logical-eleme...@name = 'foo']/@value"/> + + <!-- This just tests if extension attributes make it through to the PageSequence object. --> + <eval expected="this" xpath="//if:page-sequence/@fox:test-ignore" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions"/> + </if-checks> </testcase> Modified: xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/leader_border_padding.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/leader_border_padding.xml?rev=764744&r1=764743&r2=764744&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/leader_border_padding.xml (original) +++ xmlgraphics/fop/branches/Temp_Accessibility/test/layoutengine/standard-testcases/leader_border_padding.xml Tue Apr 14 11:35:08 2009 @@ -130,7 +130,9 @@ <eval expected="360000" xpath="//flow/block[4]/lineArea/@ipd"/> <eval expected="34000" xpath="//flow/block[4]/lineArea/space/@ipd"/> <eval expected="36000" xpath="//flow/block[4]/lineArea/space/@ipda"/> - <eval expected="8615" xpath="//flow/block[4]/lineArea/space/@offset"/> + <eval expected="1000" xpath="//flow/block[4]/lineArea/space/@bpd"/> + <eval expected="3000" xpath="//flow/block[4]/lineArea/space/@bpda"/> + <eval expected="7616" xpath="//flow/block[4]/lineArea/space/@offset"/> <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea/space/@border-after"/> <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea/space/@border-before"/> <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea/space/@border-end"/> @@ -192,7 +194,9 @@ <eval expected="360000" xpath="//flow/block[9]/lineArea/@ipd"/> <eval expected="16000" xpath="//flow/block[9]/lineArea/space/@ipd"/> <eval expected="36000" xpath="//flow/block[9]/lineArea/space/@ipda"/> - <eval expected="8615" xpath="//flow/block[9]/lineArea/space/@offset"/> + <eval expected="1000" xpath="//flow/block[9]/lineArea/space/@bpd"/> + <eval expected="21000" xpath="//flow/block[9]/lineArea/space/@bpda"/> + <eval expected="7616" xpath="//flow/block[9]/lineArea/space/@offset"/> <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-after"/> <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-before"/> <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-end"/> @@ -262,7 +266,9 @@ <eval expected="360000" xpath="//flow/block[14]/lineArea/@ipd"/> <eval expected="24000" xpath="//flow/block[14]/lineArea/space/@ipd"/> <eval expected="36000" xpath="//flow/block[14]/lineArea/space/@ipda"/> - <eval expected="8615" xpath="//flow/block[14]/lineArea/space/@offset"/> + <eval expected="1000" xpath="//flow/block[14]/lineArea/space/@bpd"/> + <eval expected="9000" xpath="//flow/block[14]/lineArea/space/@bpda"/> + <eval expected="7616" xpath="//flow/block[14]/lineArea/space/@offset"/> <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[14]/lineArea/space/@border-after"/> <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea/space/@border-before"/> <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[14]/lineArea/space/@border-end"/> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
