Created
December 8, 2016 20:20
-
-
Save cboehme/9cd1f71f5364cc68b5cb1638acddbdb3 to your computer and use it in GitHub Desktop.
Convert metamorph-test xml files to standard JUnit tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
xmlns:mt="http://www.culturegraph.org/metamorph-test" | |
xmlns:mm="http://www.culturegraph.org/metamorph" | |
xmlns:cgxml="http://www.culturegraph.org/cgxml"> | |
<xsl:output method="text" /> | |
<xsl:strip-space elements="*" /> | |
<xsl:param name="classUnderTest" /> | |
<xsl:template match="mt:metamorph-test"> | |
<xsl:text>package org.culturegraph.mf.morph.maps;

</xsl:text> | |
<xsl:text>import static org.mockito.Mockito.inOrder;

</xsl:text> | |
<xsl:text>import org.culturegraph.mf.framework.StreamReceiver;
</xsl:text> | |
<xsl:text>import org.culturegraph.mf.morph.InlineMorph;
</xsl:text> | |
<xsl:text>import org.culturegraph.mf.morph.Metamorph;
</xsl:text> | |
<xsl:text>import org.junit.Rule;
</xsl:text> | |
<xsl:text>import org.junit.Test;
</xsl:text> | |
<xsl:text>import org.mockito.InOrder;
</xsl:text> | |
<xsl:text>import org.mockito.Mock;
</xsl:text> | |
<xsl:text>import org.mockito.junit.MockitoJUnit;
</xsl:text> | |
<xsl:text>import org.mockito.junit.MockitoRule;

</xsl:text> | |
<xsl:text>/**
</xsl:text> | |
<xsl:text> * Tests for class {@link </xsl:text> | |
<xsl:value-of select="$classUnderTest" /> | |
<xsl:text>}.
</xsl:text> | |
<xsl:text> */
</xsl:text> | |
<xsl:text>public final class </xsl:text> | |
<xsl:value-of select="$classUnderTest" /> | |
<xsl:text>Test {

</xsl:text> | |
<xsl:text> @Rule
</xsl:text> | |
<xsl:text> public final MockitoRule mockitoRule = MockitoJUnit.rule();

</xsl:text> | |
<xsl:text> @Mock
</xsl:text> | |
<xsl:text> private StreamReceiver receiver;

</xsl:text> | |
<xsl:text> private Metamorph metamorph;

</xsl:text> | |
<xsl:apply-templates select="./*" /> | |
<xsl:text>}
</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:test-case"> | |
<xsl:text> @Test
</xsl:text> | |
<xsl:text> public void </xsl:text> | |
<xsl:value-of select="translate(@name, ' ', '')" /> | |
<xsl:text>() {
</xsl:text> | |
<xsl:apply-templates select="./mt:transformation" /> | |
<xsl:apply-templates select="./mt:input" /> | |
<xsl:apply-templates select="./mt:result" /> | |
<xsl:text> }

</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:transformation[@type='text/x-metamorph+xml' and not(@src)]"> | |
<xsl:text> metamorph = InlineMorph.in(this)
</xsl:text> | |
<xsl:apply-templates select="./*"> | |
<xsl:with-param name="indent" select="''" /> | |
</xsl:apply-templates> | |
<xsl:text> .createConnectedTo(receiver);

</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:transformation"> | |
<xsl:message>Unsupported transformation format</xsl:message> | |
</xsl:template> | |
<xsl:template match="mm:metamorph[not(@entityMarker) and @version = '1']"> | |
<xsl:apply-templates select="./*"> | |
<xsl:with-param name="indent" select="''" /> | |
</xsl:apply-templates> | |
</xsl:template> | |
<xsl:template match="mm:*"> | |
<xsl:param name="indent" /> | |
<xsl:call-template name="open-element"> | |
<xsl:with-param name="indent" select="$indent"/> | |
</xsl:call-template> | |
<xsl:choose> | |
<xsl:when test="not(text()) and count(child::*) = 0"> | |
<xsl:call-template name="close-empty-element"/> | |
</xsl:when> | |
<xsl:otherwise> | |
<xsl:text>>")
</xsl:text> | |
<xsl:apply-templates select="./*"> | |
<xsl:with-param name="indent" select="concat(' ', $indent)" /> | |
</xsl:apply-templates> | |
<xsl:call-template name="close-element"> | |
<xsl:with-param name="indent" select="$indent"/> | |
</xsl:call-template> | |
</xsl:otherwise> | |
</xsl:choose> | |
</xsl:template> | |
<xsl:template name="open-element"> | |
<xsl:param name="indent"/> | |
<xsl:text> .with("</xsl:text> | |
<xsl:value-of select="$indent"/> | |
<xsl:text><</xsl:text> | |
<xsl:value-of select="local-name(.)"/> | |
<xsl:call-template name="print-attributes"/> | |
</xsl:template> | |
<xsl:template name="print-attributes"> | |
<xsl:for-each select="@*"> | |
<xsl:text> </xsl:text> | |
<xsl:value-of select="local-name(.)" /> | |
<xsl:text>='</xsl:text> | |
<xsl:value-of select="." /> | |
<xsl:text>'</xsl:text> | |
</xsl:for-each> | |
</xsl:template> | |
<xsl:template name="close-element"> | |
<xsl:param name="indent"/> | |
<xsl:text> .with("</xsl:text> | |
<xsl:value-of select="$indent"/> | |
<xsl:text></</xsl:text> | |
<xsl:value-of select="local-name(.)"/> | |
<xsl:text>>")
</xsl:text> | |
</xsl:template> | |
<xsl:template name="close-empty-element"> | |
<xsl:text> />")
</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:input[@type='text/x-cg+xml']"> | |
<xsl:apply-templates select="./*" mode="as-input" /> | |
<xsl:text>
</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:input"> | |
<xsl:message>Unsupported input format</xsl:message> | |
</xsl:template> | |
<xsl:template match="cgxml:record" mode="as-input"> | |
<xsl:text> metamorph.startRecord("</xsl:text> | |
<xsl:value-of select="@id" /> | |
<xsl:text>");
</xsl:text> | |
<xsl:apply-templates select="./*" mode="as-input"/> | |
<xsl:text> metamorph.endRecord();
</xsl:text> | |
</xsl:template> | |
<xsl:template match="cgxml:entity" mode="as-input"> | |
<xsl:text> metamorph.startEntity("</xsl:text> | |
<xsl:value-of select="@name" /> | |
<xsl:text>");
</xsl:text> | |
<xsl:apply-templates select="./*" mode="as-input" /> | |
<xsl:text> metamorph.endEntity();
</xsl:text> | |
</xsl:template> | |
<xsl:template match="cgxml:literal" mode="as-input"> | |
<xsl:text> metamorph.literal("</xsl:text> | |
<xsl:value-of select="@name" /> | |
<xsl:text>", "</xsl:text> | |
<xsl:value-of select="@value" /> | |
<xsl:text>");
</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:result[@type='text/x-cg+xml']"> | |
<xsl:text> final InOrder ordered = inOrder(receiver);
</xsl:text> | |
<xsl:apply-templates select="./*" mode="as-result" /> | |
<xsl:text> ordered.verifyNoMoreInteractions();
</xsl:text> | |
</xsl:template> | |
<xsl:template match="mt:result"> | |
<xsl:message>Unsupported result format</xsl:message> | |
</xsl:template> | |
<xsl:template match="cgxml:record" mode="as-result"> | |
<xsl:text> ordered.verify(receiver).startRecord("</xsl:text> | |
<xsl:value-of select="@id" /> | |
<xsl:text>");
</xsl:text> | |
<xsl:apply-templates select="./*" mode="as-result"/> | |
<xsl:text> ordered.verify(receiver).endRecord();
</xsl:text> | |
</xsl:template> | |
<xsl:template match="cgxml:entity" mode="as-result"> | |
<xsl:text> ordered.verify(receiver).startEntity("</xsl:text> | |
<xsl:value-of select="@name" /> | |
<xsl:text>");
</xsl:text> | |
<xsl:apply-templates select="./*" mode="as-result" /> | |
<xsl:text> ordered.verify(receiver).endEntity();
</xsl:text> | |
</xsl:template> | |
<xsl:template match="cgxml:literal" mode="as-result"> | |
<xsl:text> ordered.verify(receiver).literal("</xsl:text> | |
<xsl:value-of select="@name" /> | |
<xsl:text>", "</xsl:text> | |
<xsl:value-of select="@value" /> | |
<xsl:text>");
</xsl:text> | |
</xsl:template> | |
</xsl:stylesheet> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment