You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
5.7 KiB

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="xsdtest datatype equiv class"/>
<xsl:output indent="yes" encoding="utf-8"/>
<xsl:template match="xsdtest">
<testSuite>
<xsl:apply-templates/>
</testSuite>
</xsl:template>
<xsl:template match="datatype">
<testSuite>
<documentation>Datatype <xsl:value-of select="@name"/></documentation>
<testCase>
<requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{@name}">
<xsl:for-each select="param">
<param name="{@name}"><xsl:value-of select="."/></param>
</xsl:for-each>
</data>
</element>
</correct>
<xsl:apply-templates select="valid|invalid"/>
</testCase>
<xsl:apply-templates select="equiv/class|length|lessThan|incomparable"/>
</testSuite>
</xsl:template>
<xsl:template match="valid">
<xsl:call-template name="valid"/>
</xsl:template>
<xsl:template match="invalid">
<xsl:call-template name="invalid"/>
</xsl:template>
<xsl:template name="valid">
<valid>
<xsl:apply-templates select="@internalSubset"/>
<doc>
<xsl:copy-of select="namespace::*"/>
<xsl:value-of select="."/>
</doc>
</valid>
</xsl:template>
<xsl:template name="invalid">
<invalid>
<xsl:apply-templates select="@internalSubset"/>
<doc>
<xsl:copy-of select="namespace::*"/>
<xsl:value-of select="."/>
</doc>
</invalid>
</xsl:template>
<xsl:template match="@internalSubset">
<xsl:param name="doc" select="'doc'"/>
<xsl:attribute name="dtd">
<xsl:text>
&lt;!DOCTYPE </xsl:text>
<xsl:value-of select="$doc"/>
<xsl:text> [
</xsl:text>
<xsl:value-of select="."/>
<xsl:text>
]></xsl:text>
</xsl:attribute>
</xsl:template>
<xsl:template match="class">
<testCase>
<correct>
<xsl:for-each select="value[1]">
<xsl:apply-templates select="@internalSubset">
<xsl:with-param name="doc">element</xsl:with-param>
</xsl:apply-templates>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<value>
<xsl:copy-of select="namespace::*"/>
<xsl:attribute name="type"><xsl:value-of select="../../../@name"/></xsl:attribute>
<xsl:value-of select="."/>
</value>
</element>
</xsl:for-each>
</correct>
<xsl:for-each select="value[position() != 1]">
<xsl:call-template name="valid"/>
</xsl:for-each>
<xsl:for-each select="preceding-sibling::class/value|following-sibling::class/value">
<xsl:call-template name="invalid"/>
</xsl:for-each>
</testCase>
</xsl:template>
<xsl:template match="length">
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="length"><xsl:value-of select="@value"/></param>
</data>
</element>
</correct>
<xsl:call-template name="valid"/>
</testCase>
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="length"><xsl:value-of select="@value + 1"/></param>
</data>
</element>
</correct>
<xsl:call-template name="invalid"/>
</testCase>
<xsl:if test="@value != 0">
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="length"><xsl:value-of select="@value - 1"/></param>
</data>
</element>
</correct>
<xsl:call-template name="invalid"/>
</testCase>
</xsl:if>
</xsl:template>
<xsl:template match="lessThan">
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="minExclusive">
<xsl:value-of select="value[1]"/>
</param>
</data>
</element>
</correct>
<valid>
<doc>
<xsl:value-of select="value[2]"/>
</doc>
</valid>
<invalid>
<doc>
<xsl:value-of select="value[1]"/>
</doc>
</invalid>
</testCase>
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="minExclusive">
<xsl:value-of select="value[2]"/>
</param>
</data>
</element>
</correct>
<invalid>
<doc>
<xsl:value-of select="value[1]"/>
</doc>
</invalid>
<invalid>
<doc>
<xsl:value-of select="value[2]"/>
</doc>
</invalid>
</testCase>
</xsl:template>
<xsl:template match="incomparable">
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="minExclusive">
<xsl:value-of select="value[1]"/>
</param>
</data>
</element>
</correct>
<invalid>
<doc>
<xsl:value-of select="value[2]"/>
</doc>
</invalid>
<invalid>
<doc>
<xsl:value-of select="value[1]"/>
</doc>
</invalid>
</testCase>
<testCase>
<correct>
<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<data type="{../@name}">
<param name="minExclusive">
<xsl:value-of select="value[2]"/>
</param>
</data>
</element>
</correct>
<invalid>
<doc>
<xsl:value-of select="value[1]"/>
</doc>
</invalid>
<invalid>
<doc>
<xsl:value-of select="value[2]"/>
</doc>
</invalid>
</testCase>
</xsl:template>
</xsl:stylesheet>