Skip to content
Snippets Groups Projects
Commit 304bfe82 authored by Thorsten Vitt's avatar Thorsten Vitt
Browse files

Regression test for HTML generation (using XMLUnit)

parent 10fb28ce
No related branches found
No related tags found
No related merge requests found
...@@ -155,6 +155,12 @@ ...@@ -155,6 +155,12 @@
<version>3.0.1</version> <version>3.0.1</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>xmlunit</groupId>
<artifactId>xmlunit</artifactId>
<version>1.5</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
...@@ -342,7 +348,7 @@ ...@@ -342,7 +348,7 @@
<version>2.14</version> <version>2.14</version>
<configuration> <configuration>
<systemPropertyVariables> <systemPropertyVariables>
<webapp.directory>${project.build.directory}/${project.artifactId}-${project.version}</webapp.directory> <webapp.directory>${project.basedir}/src/main/webapp</webapp.directory>
</systemPropertyVariables> </systemPropertyVariables>
</configuration> </configuration>
</plugin> </plugin>
......
package info.textgrid.services.aggregator.html;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.MetadataParseFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ObjectNotFoundFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ProtocolNotImplementedFault;
import info.textgrid.services.aggregator.ITextGridRep;
import info.textgrid.services.aggregator.util.StylesheetManager;
import info.textgrid.services.aggregator.util.TextGridRepProvider;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.ws.rs.WebApplicationException;
import net.sf.saxon.s9api.SaxonApiException;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLTestCase;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.Test;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.google.common.base.Optional;
import com.google.common.io.FileBackedOutputStream;
import com.ibm.icu.text.MessageFormat;
/**
* The regression test will compare the HTML output created for some given
* public documents with reference documents saved in src/test/resources. It
* will use {@link XMLUnit} to compare the generated and the provided documents
* while {@linkplain XMLUnit#setIgnoreAttributeOrder(boolean) ignoring attribute
* order}, {@linkplain XMLUnit#setIgnoreComments(boolean) ignoring comments},
* {@linkplain XMLUnit#setIgnoreDiffBetweenTextAndCDATA(boolean) ignoring the
* difference between CDATA segments and text}, and
* {@linkplain XMLUnit#setNormalizeWhitespace(boolean) normalizing whitespace}.
*
* If you modified or upgraded the stylesheets and you are sure the differences are ok,
* you can run {@code mvn -Dregression.outputdir=src/test/resources test} to generate new
* versions of the reference documents, and check them in.
*
* @author Thorsten Vitt <thorsten.vitt@uni-wuerzburg.de>
*/
public class HtmlRegressionTest extends XMLTestCase {
private static final String OUTPUTDIR_PROPERTY = "regression.outputdir";
private ITextGridRep rep = TextGridRepProvider.getInstance();
private StylesheetManager stylesheets = new StylesheetManager(null,
TextGridRepProvider.getInstance());
protected void writeHtmlTo(final String uris, final OutputStream target)
throws WebApplicationException, IOException, ObjectNotFoundFault,
MetadataParseFault, IoFault, ProtocolNotImplementedFault,
AuthFault, SaxonApiException {
HTMLWriter htmlWriter = new HTMLWriter(rep, stylesheets, uris, null,
false, false, false, null, null, null, null, null);
htmlWriter.createResponse();
htmlWriter.write(target);
}
public void compareHtml(final String uris, final String compareFilename)
throws WebApplicationException, IOException, SAXException,
ObjectNotFoundFault, MetadataParseFault, IoFault,
ProtocolNotImplementedFault, AuthFault, SaxonApiException {
XMLUnit.setIgnoreAttributeOrder(true);
XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);
XMLUnit.setNormalizeWhitespace(true);
Optional<String> outputPath = Optional.<String> fromNullable(System
.getProperty(OUTPUTDIR_PROPERTY));
if (outputPath.isPresent()) {
File targetFile = new File(outputPath.get(), compareFilename);
FileOutputStream target = new FileOutputStream(targetFile);
System.out.println(MessageFormat.format(
"### Writing the current result for {0} to {1}", uris,
targetFile));
writeHtmlTo(uris, target);
target.close();
} else {
FileBackedOutputStream target = new FileBackedOutputStream(
1048 * 1048);
System.out
.println(MessageFormat
.format("### Comparing HTML output for {0} to reference document {1}",
uris, compareFilename));
writeHtmlTo(uris, target);
target.close();
InputSource control = new InputSource(getClass().getClassLoader()
.getResourceAsStream(compareFilename));
InputSource test = new InputSource(target.getSupplier().getInput());
Diff diff = new Diff(control, test);
DetailedDiff detailedDiff = new DetailedDiff(diff);
assertTrue(MessageFormat.format("HTML Regression for {0} / {1}\n", uris, compareFilename) + detailedDiff.toString(), diff.identical());
}
}
@Test
public void testPoem() throws WebApplicationException, IOException, SAXException, ObjectNotFoundFault, MetadataParseFault, IoFault, ProtocolNotImplementedFault, AuthFault, SaxonApiException {
compareHtml("textgrid:mr47.0", "mr47.0.html");
}
@Test
public void testDrama() throws WebApplicationException, IOException, SAXException, ObjectNotFoundFault, MetadataParseFault, IoFault, ProtocolNotImplementedFault, AuthFault, SaxonApiException {
compareHtml("textgrid:msdd.0", "msdd.0.html");
}
@Test
public void testNovel() throws WebApplicationException, IOException, SAXException, ObjectNotFoundFault, MetadataParseFault, IoFault, ProtocolNotImplementedFault, AuthFault, SaxonApiException {
compareHtml("textgrid:mr23.0", "mr23.0.html");
}
@Test
public void testPoems() throws WebApplicationException, IOException, SAXException, ObjectNotFoundFault, MetadataParseFault, IoFault, ProtocolNotImplementedFault, AuthFault, SaxonApiException {
compareHtml("textgrid:mjr3.0", "mjr3.0.html");
}
@Test
public void testBiography() throws WebApplicationException, IOException, SAXException, ObjectNotFoundFault, MetadataParseFault, IoFault, ProtocolNotImplementedFault, AuthFault, SaxonApiException {
compareHtml("textgrid:nbvb.0", "nbvb.0.html");
}
@Test
public void testLetter() throws WebApplicationException, IOException, SAXException, ObjectNotFoundFault, MetadataParseFault, IoFault, ProtocolNotImplementedFault, AuthFault, SaxonApiException {
compareHtml("textgrid:11sqw.0", "11sqw.0.html");
}
}
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><!--THIS FILE IS GENERATED FROM AN XML MASTER. DO NOT EDIT (5)--><title>An Frau Heilinggötter</title><meta name="author" content="" /><meta name="generator" content="Text Encoding Initiative Consortium XSLT stylesheets" /><meta name="DC.Title" content="An Frau Heilinggötter" /><meta name="DC.Type" content="Text" /><meta name="DC.Format" content="text/html" /><link rel="stylesheet" media="print" type="text/css" href="http://www.tei-c.org/release/xml/tei/stylesheet/tei-print.css" /></head><body class="simple" id="TOP"><div class="stdheader"></div><div class="text" id="index.xml-body.1_div.1"><p class="zenoPC" id="tg62.2.811">32/174.</p><div class="h4" id="index.xml-body.1_div.1_div.1"><h3><span class="head" id="tg62.2.814">An Frau Heilinggötter</span></h3><p id="tg62.2.815">[Concept.]</p><p class="zenoPLm4n0" id="tg62.2.816">Nach Ihrem Wunsch, meine werthe Frau Heilinggötter, vermelde durch Gegenwärtiges, daß ich zu Ende April bey Ihnen einzutreffen und vier Wochen lang zu bleiben hoffe. Auch habe ich einen Eimer Würzburger Wein bestellt welchen, wie er ankommt, aufzunehmen und wohl zu verwahren bitte. Sollte einige Auslage nöthig seyn, so werde solche mit Dank bey meiner Ankunft erstatten.</p><p class="zenoPLm4n0" id="tg62.2.817">Der ich recht wohl zu leben und Sie mit den werthen Ihrigen in guter Gesundheit anzutreffen wünsche.</p><p class="zenoPLm4n0" id="tg62.2.818">Weimar den 24. März 1820.</p></div></div><div class="stdfooter"><address><div class="copyrightStatement"><p>
Der annotierte Datenbestand der Digitalen Bibliothek inklusive Metadaten sowie
davon einzeln zugängliche Teile sind eine Abwandlung des Datenbestandes von
www.editura.de durch TextGrid und werden unter der Lizenz Creative Commons
Namensnennung 3.0 Deutschland Lizenz (by-Nennung TextGrid, www.editura.de) veröffentlicht. Die
Lizenz bezieht sich nicht auf die der Annotation zu Grunde liegenden
allgemeinfreien Texte (Siehe auch Punkt 2 der Lizenzbestimmungen).
</p><p><a class="link_ref" href="http://creativecommons.org/licenses/by/3.0/de/legalcode">Lizenzvertrag</a></p><p><a class="link_ref" href="http://creativecommons.org/licenses/by/3.0/de/">Eine vereinfachte Zusammenfassung des rechtsverbindlichen Lizenzvertrages in allgemeinverständlicher Sprache </a></p><p><a class="link_ref" href="http://www.textgrid.de/Digitale-Bibliothek">Hinweise zur Lizenz und zur Digitalen Bibliothek</a></p></div><!--
Generated from index.xml using an XSLT version 2.0 stylesheet
based on http://www.tei-c.org/Stylesheets/
processed using Saxonica
on 2014-06-23T18:43:13Z--></address></div></body></html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>1. WanderliederGedichte (Ausgabe 1841)GedichteEichendorff, Joseph vonDer wandernde Student</title><link rel="stylesheet" media="print" type="text/css" href="http://www.tei-c.org/release/xml/tei/stylesheet/tei-print.css" /></head><body class="simple" id="TOP"><div class="stdheader"></div><div class="stdheader"></div><div class="text" id="tg21.3.mr49.0"><div class="h4" id="index.xml-tg21.mr49.0-body.1_div.1_div.1"><h3><span class="head" id="tg21.3.1.mr49.0">Der wandernde Student</span></h3><div class="lg"><div id="tg21.3.2.mr49.0" class="l">Bei dem angenehmsten Wetter</div><div id="tg21.3.3.mr49.0" class="l">Singen alle Vögelein,</div><div id="tg21.3.4.mr49.0" class="l">Klatscht der Regen auf die Blätter,</div><div id="tg21.3.5.mr49.0" class="l">Sing ich so für mich allein.</div></div><div class="lg"><div id="tg21.3.7.mr49.0" class="l">Denn mein Aug kann nichts entdecken,</div><div id="tg21.3.8.mr49.0" class="l">Wenn der Blitz auch grausam glüht,</div><div id="tg21.3.9.mr49.0" class="l">Was im Wandern könnt erschrecken</div><div id="tg21.3.10.mr49.0" class="l">Ein zufriedenes Gemüt.</div></div><div class="lg"><div id="tg21.3.12.mr49.0" class="l">Frei von Mammon will ich schreiten</div><div id="tg21.3.13.mr49.0" class="l">Auf dem Feld der Wissenschaft,</div><div id="tg21.3.14.mr49.0" class="l">Sinne ernst und nehm zuzeiten</div><div id="tg21.3.15.mr49.0" class="l">Einen Mund voll Rebensaft.</div></div><div class="lg"><div id="tg21.3.17.mr49.0" class="l">Bin ich müde vom Studieren,</div><div id="tg21.3.18.mr49.0" class="l">Wann der Mond tritt sanft herfür,</div><div id="tg21.3.19.mr49.0" class="l">Pfleg ich dann zu musizieren</div><div id="tg21.3.20.mr49.0" class="l">Vor der Allerschönsten Tür.</div></div></div></div><div class="stdfooter"><address><div class="copyrightStatement"><div></div><div></div></div><!--
Generated from index.xml using an XSLT version 2.0 stylesheet
based on http://www.tei-c.org/Stylesheets/
processed using Saxonica
on 2014-06-23T18:43:12Z--></address></div></body></html>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><!--THIS FILE IS GENERATED FROM AN XML MASTER. DO NOT EDIT (5)--><title>Biographie: George, Stefan</title><meta name="author" content="" /><meta name="generator" content="Text Encoding Initiative Consortium XSLT stylesheets" /><meta name="DC.Title" content="Biographie: George, Stefan" /><meta name="DC.Type" content="Text" /><meta name="DC.Format" content="text/html" /><link rel="stylesheet" media="print" type="text/css" href="http://www.tei-c.org/release/xml/tei/stylesheet/tei-print.css" /></head><body class="simple" id="TOP"><div class="stdheader"></div><div class="front" id="index.xml-front.1_div.1"><h2><span class="head" id="tg1.2.3">Stefan George</span><br /><span class="head" id="tg1.2.4">(1868–1933)</span></h2><div class="figure"><img src="https://textgridlab.org/1.0/tgcrud/rest/textgrid:nc7h.0/data" alt="" id="tg1.2.2" class="right" style=" width:300px;" /><div>Stefan George (Fotografie von Jacob Hilsdorf, 1902/1903)</div></div></div><div class="text" id="tg2.4"><h2><span class="head" id="tg2.4.1">Stefan George – Biographie</span></h2><p id="tg2.4.4"><span style="font-weight:bold">1868</span></p><p id="tg2.4.5"><span style="font-style: italic">12. Juli:</span> Stefan Anton George wird als Sohn einer katholischen Weingutbesitzers- und Gastwirtsfamilie in Büdesheim bei Bingen geboren.</p><p id="tg2.4.7"><span style="font-weight:bold">1873</span></p><p id="tg2.4.8">Umzug nach Bingen, wo der Vater als Stadtverordneter tätig ist.</p><p id="tg2.4.10"><span style="font-weight:bold">1882</span></p><p id="tg2.4.11">George besucht das Ludwig-Georgs-Gymnasium in Darmstadt. Mit seinem Schulfreund Carl August Klein gibt er die »Blätter der Kunst« heraus, ein in loser Folge erscheinendes programmatisch-poetisches Zirkular.</p><p id="tg2.4.12">Nach sechs Jahren schließt George die Schule mit dem Abitur ab.</p><p id="tg2.4.14"><span style="font-weight:bold">1888–89</span></p><p id="tg2.4.15">Um seine Sprachkenntnisse zu verbessern, reist George nach London, in die Schweiz, sowie nach Italien und Spanien. Gedichte aus dieser Zeit veröffentlicht er zwei Jahre später unter dem Titel »Die Fibel. Auswahl erster Verse«.</p><p id="tg2.4.17"><span style="font-weight:bold">1889</span></p><p id="tg2.4.18">März: George reist nach Paris, wo er unter anderem Mallarmé, Verlaine und Rodin kennen lernt und sich mit Autoren wie Baudelaire und Rimbaud beschäftigt.</p><p id="tg2.4.19">Oktober: In Berlin schreibt sich George and er Universität ein, wo er Vorlesungen über Philosophie und Kunstgeschichte hört. Nach drei Semestern bricht er sein Studium jedoch ab.</p><p id="tg2.4.21"><span style="font-weight:bold">1890</span></p><p id="tg2.4.22">Als Privatdruck werden die »17 Hymnen« veröffentlicht. George widmet sie Carl August Klein, seinem Freund aus Gymnasialtagen.</p><p id="tg2.4.23">George schließt enge Freundschaft mit Ida Coblenz. Die unerfüllte Beziehung endet jedoch nach fünf Jahren. Ida Coblenz heiratet später Richard Dehmel.</p><p id="tg2.4.25"><span style="font-weight:bold">1891</span></p><p id="tg2.4.26">In Wien sucht George die Freundschaft Hugo von Hofmannsthals, die jedoch scheitert.</p><p id="tg2.4.28"><span style="font-weight:bold">1892</span></p><p id="tg2.4.29">Aus den Mitarbeitern der »Blätter für die Kunst« geht der »George-Kreis« hervor, ein loses Bündnis junger Dichter, die sich George zum Vorbild nehmen.</p><p id="tg2.4.30">Im selben Jahr veröffentlicht George seine Beiträge aus den »Blättern« im Zyklus »Algabal«.</p><p id="tg2.4.32"><span style="font-weight:bold">1893</span></p><p id="tg2.4.33">In München gehört George zum Kreis der »Kosmiker« um Karl Wolfskehl, Ludwig Klages und Alfred Schuler.</p><p id="tg2.4.35"><span style="font-weight:bold">1895</span></p><p id="tg2.4.36">Neben München hält George sich hauptsächlich in Berlin auf, hat jedoch auch weiterhin keinen festen Wohnsitz.</p><p id="tg2.4.38"><span style="font-weight:bold">1897</span></p><p id="tg2.4.39">Der Zyklus »Das Jahr der Seele« stellt das bedeutendste Werk in Georges erster Schaffensperiode dar.</p><p id="tg2.4.41"><span style="font-weight:bold">1900</span></p><p id="tg2.4.42">Der »Teppich des Lebens und die Lieder von Traum und Tod« erscheint.</p><p id="tg2.4.44"><span style="font-weight:bold">1902</span></p><p id="tg2.4.45">George freundet sich mit dem Schüler Maximilian Kronberger an.</p><p id="tg2.4.47"><span style="font-weight:bold">1907</span></p><p id="tg2.4.48">Im Zyklus »Der siebente Ring«veröffentlicht George eine Vielzahl autobiografisch angehauchter Gedichte und markiert damit einen Wendepunkt in seinem Leben und Werk.</p><p id="tg2.4.50"><span style="font-weight:bold">1913</span></p><p id="tg2.4.51">George vollendet den Gedichtzyklus »Stern des Bundes«.</p><p id="tg2.4.53"><span style="font-weight:bold">1927</span></p><p id="tg2.4.54">Die Stadt Frankfurt am Main verleiht George den ersten Goethe-Preis. George zeigt sich davon jedoch unbeeindruckt.</p><p id="tg2.4.56"><span style="font-weight:bold">1928</span></p><p id="tg2.4.57">»Das neue Reich« enthält überwiegend spätere Gedichte aus Georges Werk.</p><p id="tg2.4.59"><span style="font-weight:bold">1933</span></p><p id="tg2.4.60">Nachdem die Nationalsozialisten die Preußische Akademie »gereinigt« haben, bieten sie George deren Präsidentschaft an. Der lehnt jedoch ab. Um sich gegen die nazistische Umdeutung seines Werkes zu wehren zieht George in die Schweiz.</p><p id="tg2.4.61"><span style="font-style: italic">4. Dezember:</span> Stefan George stirbt in Minusio bei Locarno.</p></div><div class="stdfooter"><address><div class="copyrightStatement"><p>
Der annotierte Datenbestand der Digitalen Bibliothek inklusive Metadaten sowie
davon einzeln zugängliche Teile sind eine Abwandlung des Datenbestandes von
www.editura.de durch TextGrid und werden unter der Lizenz Creative Commons
Namensnennung 3.0 Deutschland Lizenz (by-Nennung TextGrid, www.editura.de) veröffentlicht. Die
Lizenz bezieht sich nicht auf die der Annotation zu Grunde liegenden
allgemeinfreien Texte (Siehe auch Punkt 2 der Lizenzbestimmungen).
</p><p><a class="link_ref" href="http://creativecommons.org/licenses/by/3.0/de/legalcode">Lizenzvertrag</a></p><p><a class="link_ref" href="http://creativecommons.org/licenses/by/3.0/de/">Eine vereinfachte Zusammenfassung des rechtsverbindlichen Lizenzvertrages in allgemeinverständlicher Sprache </a></p><p><a class="link_ref" href="http://www.textgrid.de/Digitale-Bibliothek">Hinweise zur Lizenz und zur Digitalen Bibliothek</a></p></div><!--
Generated from index.xml using an XSLT version 2.0 stylesheet
based on http://www.tei-c.org/Stylesheets/
processed using Saxonica
on 2014-06-23T18:43:13Z--></address></div></body></html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment