diff options
author | James Shaw <jshaw@netsurf-browser.org> | 2007-07-14 11:14:05 +0000 |
---|---|---|
committer | James Shaw <jshaw@netsurf-browser.org> | 2007-07-14 11:14:05 +0000 |
commit | 15c17e42f48d21a9f821c02fb1f8c4e4959e2432 (patch) | |
tree | a432b870b181b348bb050c64d5f0a2594b578f28 /test | |
parent | b91bbfdbf3fb3c4318abdbc281af96af4ec3722a (diff) | |
download | libdom-15c17e42f48d21a9f821c02fb1f8c4e4959e2432.tar.gz libdom-15c17e42f48d21a9f821c02fb1f8c4e4959e2432.tar.bz2 |
Implement metadata function comment. Partially implement <assertEquals>
on DOMStrings. dom_string_create_from_const_ptr lookup is currently
hardwired.
svn path=/trunk/dom/; revision=3410
Diffstat (limited to 'test')
-rw-r--r-- | test/test-to-c.xsl | 170 |
1 files changed, 135 insertions, 35 deletions
diff --git a/test/test-to-c.xsl b/test/test-to-c.xsl index 5502d60..6c26730 100644 --- a/test/test-to-c.xsl +++ b/test/test-to-c.xsl @@ -7,14 +7,14 @@ test representation. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings"><!-- TODO: exslt not currently used --> - <!-- relative to transform --> - <xsl:param name="interfaces-docname">dom1-interfaces.xml</xsl:param> - <xsl:param name="target-uri-base">http://www.w3.org/2001/DOM-Test-Suite/tests/Level-1/</xsl:param> -<xsl:output method="text" encoding="UTF-8"/> -<xsl:variable name="domspec" select="document($interfaces-docname)"/> + <xsl:param name="interfaces-docname">dom1-interfaces.xml</xsl:param> + <xsl:param name="target-uri-base">http://www.w3.org/2001/DOM-Test-Suite/tests/Level-1/</xsl:param> + <xsl:output method="text" encoding="UTF-8"/> + <xsl:variable name="domspec" select="document($interfaces-docname)"/> + <!-- swallow any text which we don't understand --> -<xsl:template match="text()"/> +<xsl:template match="text()" mode="body"/> <!-- for anything that doesn't match another template, @@ -24,7 +24,7 @@ at $interfaces-docname. This should either be a <method> or <attribute>. If it is neither, we generate an <xsl:message> reporting that the element is not known. --> -<xsl:template match="*"> +<xsl:template match="*" mode="body"> <!-- the element name matches by this template --> <xsl:variable name="feature" select="local-name(.)"/> <xsl:variable name="interface" select="@interface"/> @@ -69,37 +69,52 @@ we generate an <xsl:message> reporting that the element is not known. </xsl:template> <xsl:template match="*[local-name() = 'test']"> + <xsl:apply-templates select="*[local-name() = 'metadata']"/> <xsl:text> -int main(int argc, char **argv) { +int main(int argc, char **argv) +{ + dom_exception err; </xsl:text> -<xsl:apply-templates/> +<xsl:apply-templates mode="body"/> <xsl:text> return 0; } </xsl:text> </xsl:template> +<xsl:template match="*[local-name() = 'metadata']"> + <xsl:text>/** +</xsl:text> + <xsl:call-template name="emit-description"> + <xsl:with-param name="description" select="translate(*[local-name() = 'description'], '	', ' ')"/> + </xsl:call-template> + <xsl:text> */</xsl:text> +</xsl:template> + +<!-- swallowing templates in body mode --> +<xsl:template match="*[local-name()='metadata']" mode="body"/> + <!-- ================================ Language construct templates ================================ --> -<xsl:template match="*[local-name() = 'var']"> +<xsl:template match="*[local-name() = 'var']" mode="body"> <xsl:text> struct </xsl:text><xsl:call-template name="convert_var_type"> <xsl:with-param name="var_type" select="@type"/> </xsl:call-template> *<xsl:value-of select="@name"/>; </xsl:template> -<xsl:template match="*[local-name() = 'if']"> -<xsl:text> if (</xsl:text><!-- TODO: condition --><xsl:text>) { -</xsl:text> -<!-- TODO: statement(s) --> +<xsl:template match="*[local-name() = 'if']" mode="body"> <xsl:text> - }</xsl:text> + if (</xsl:text><xsl:apply-templates select="*[1]" mode="body"/><xsl:text>) { +</xsl:text> +<xsl:apply-templates select="*[position() > 1 and local-name() != 'else']" mode="body"/> +<xsl:text> }</xsl:text> <xsl:for-each select="*[local-name() = 'else']"> <xsl:text> else { </xsl:text> - <xsl:apply-templates/> + <xsl:apply-templates mode="body"/> <xsl:text>}</xsl:text> </xsl:for-each> <xsl:text> @@ -112,6 +127,10 @@ DOM templates ================================ --> +<xsl:template match="*[local-name() = 'contentType']" mode="body"> + <xsl:text>strcmp(TODO, "</xsl:text><xsl:value-of select="@type"/><xsl:text>") == 0</xsl:text> +</xsl:template> + <xsl:template name="produce-method"> <!-- TODO: implement me --> </xsl:template> @@ -146,9 +165,21 @@ DOM templates <xsl:if test="@value"> <!-- TODO: set attribute to a value --> </xsl:if> + <!-- + call an attribute accessor. this takes the form + err = dom_<objecttype>_get_<attributename>(<objectstruct>, &<targetattributestruct>); + --> <xsl:if test="@var"> <xsl:text> - err</xsl:text><xsl:text> = TODO_function_call(</xsl:text><xsl:value-of select="@obj"/><xsl:text>, &</xsl:text><xsl:value-of select="@var"/><xsl:text>); + err = </xsl:text> + <xsl:call-template name="convert_var_type"> + <xsl:with-param name="var_type"><xsl:value-of select="//*[local-name() = 'var' and @name = $obj]/@type"/></xsl:with-param> + </xsl:call-template> + <xsl:text>_get_</xsl:text> + <xsl:call-template name="convert_attribute_name"> + <xsl:with-param name="attribute_name"><xsl:value-of select="$attribute/@name"/></xsl:with-param> + </xsl:call-template> + <xsl:text>(</xsl:text><xsl:value-of select="@obj"/><xsl:text>, &</xsl:text><xsl:value-of select="@var"/><xsl:text>); assert(err == DOM_NO_ERR); </xsl:text> @@ -161,40 +192,109 @@ Assert templates ================================ --> -<xsl:template match="*[local-name() = 'assertNotNull']"> +<xsl:template match="*[local-name() = 'assertNotNull']" mode="body"> <!-- TODO: what does the @id string do, and do we need it here? --> <xsl:text> assert(</xsl:text><xsl:value-of select="@actual"/><xsl:text> != NULL); </xsl:text> </xsl:template> -<xsl:template match="*[local-name() = 'assertNull']"> +<xsl:template match="*[local-name() = 'assertNull']" mode="body"> <!-- TODO: what does the @id string do, and do we need it here? --> <xsl:text> assert(</xsl:text><xsl:value-of select="@actual"/><xsl:text> == NULL); </xsl:text> </xsl:template> +<xsl:template match="*[local-name() = 'assertEquals']" mode="body"> + <!-- + TODO: this is hard, because we need to know what the types of the objects are + that we're comparing + --> + <xsl:variable name="actual" select="@actual"/> + <xsl:variable name="var_type" select="//*[local-name() = 'var' and @name = $actual]/@type"/> + + <xsl:choose> + <xsl:when test="$var_type = 'DOMString'"> + <xsl:text> struct dom_string *match; + err = dom_string_create_from_const_ptr(doc <!-- TODO: how do we obtain a handle to doc? We could lookup //var[@type = 'Document', but what if there's more than one? -->, </xsl:text><xsl:value-of select="@expected"/><xsl:text>, + SLEN(</xsl:text><xsl:value-of select="@expected"/><xsl:text>), &match); + assert(err == DOM_NO_ERR); <!-- TODO: pull this line out, since it's reused everywhere --> + assert(dom_string_cmp(</xsl:text><xsl:value-of select="@actual"/><xsl:text>, match) == 0); <!-- TODO: handle case insensitivity if @insensitive is set--> +</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="no">Warning in assertEquals template: don't know how to compare variable type '<xsl:value-of select="$var_type"/>'</xsl:message> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + <!-- helper templates --> <xsl:template name="convert_var_type"> <!-- TODO: convert certain types, e.g. from DocumentType to dom_document_type --> -<xsl:param name="var_type"/> -<xsl:text>dom_</xsl:text><xsl:choose> - <xsl:when test="$var_type = 'Document'"> - <xsl:text>document</xsl:text> - </xsl:when> - <xsl:when test="$var_type = 'DocumentType'"> - <xsl:text>document_type</xsl:text> - </xsl:when> - <xsl:when test="$var_type = 'DOMString'"> - <xsl:text>string</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="no">Warning in convert_var_type template: unrecognised variable type '<xsl:value-of select="$var_type"/>'</xsl:message> - <xsl:value-of select="$var_type"/> - </xsl:otherwise> -</xsl:choose> + <xsl:param name="var_type"/> + <xsl:text>dom_</xsl:text> + <xsl:choose> + <xsl:when test="$var_type = 'Document'"> + <xsl:text>document</xsl:text> + </xsl:when> + <xsl:when test="$var_type = 'DocumentType'"> + <xsl:text>document_type</xsl:text> + </xsl:when> + <xsl:when test="$var_type = 'DOMString'"> + <xsl:text>string</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="no">Warning in convert_var_type template: unrecognised variable type '<xsl:value-of select="$var_type"/>'</xsl:message> + <xsl:value-of select="$var_type"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template name="convert_attribute_name"> + <xsl:param name="attribute_name"/> + <xsl:message><xsl:value-of select="$attribute_name"/></xsl:message> + <xsl:choose> + <xsl:when test="$attribute_name = 'nodeValue'"> + <xsl:text>node_value</xsl:text> + </xsl:when> + <xsl:otherwise> + <!-- assume no conversion is needed --> + <xsl:text><xsl:value-of select="$attribute_name"/></xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- +stolen from test-to-java.xsl +Prepends every line with asterisks, suitable for use in a block comment +--> +<xsl:template name="emit-description"> + <xsl:param name="description"/> + <xsl:choose> + <xsl:when test="contains($description, '
')"> + <xsl:variable name="preceding" select="substring-before($description, '
')"/> + <xsl:if test="string-length($preceding) > 0"> + <xsl:text> * </xsl:text> + <xsl:value-of select="substring-before($description, '
')"/> +<xsl:text> +</xsl:text> + </xsl:if> + <xsl:variable name="following" select="substring-after($description, '
')"/> + <xsl:if test="string-length($following) > 0"> + <xsl:call-template name="emit-description"> + <xsl:with-param name="description" select="substring-after($description, '
')"/> + </xsl:call-template> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:text> * </xsl:text> + <xsl:value-of select="$description"/> + <xsl:text> + </xsl:text> + </xsl:otherwise> + </xsl:choose> </xsl:template> </xsl:stylesheet> |