|
Subject: Re: [xsl] XSL 3 function returning attributes sequence, and XSpec question From: "cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 29 Jun 2016 08:14:50 -0000 |
In fact, this should be test="..." instead of select="..."
But this do not work, because it's impossible to add attributes to a
document node.
Here is Arnaud Malguy's response (off-list), which works fine :
<x:expect label="two attributes, @name and @namespace"
select="/*/@*">
<result name="..." namespace="..."/>
</x:expect>
The idea is to add an element in the expected result to carry the
expected attributes and to remove it by the @select="/*/@*"
in order to get only the attributes since your functions returns
attributes.
Arnaud
Applied, this is successful :
<x:scenario label="Scenario for testing extractName function">
<x:call function="local:extractName">
<x:param name="name" as="xs:string" select="'foe'"/>
</x:call>
<x:expect label="two attributes, @name and @namespace" select="/*/@*">
<result name="foe" namespace="..."/>
</x:expect>
</x:scenario>
And this fails :
<x:scenario label="Scenario for testing extractName function">
<x:call function="local:extractName">
<x:param name="name" as="xs:string" select="'foe'"/>
</x:call>
<x:expect label="two attributes, @name and @namespace" select="/*/@*">
<result name="bar" namespace="..."/>
</x:expect>
</x:scenario>
Thanks Michael and Arnaud.
Best regards,
Christophe
Le 2016-06-29 09:49, Michael Kay mike@xxxxxxxxxxxx a C)crit :
> Perhaps
>
> select="exists($x:result[. instance of attribute(name)) and
exists($x:result[. instance of attribute(namespace)])
>
> Michael Kay
> Saxonica
>
>> On 29 Jun 2016, at 08:27, cmarchand@xxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>> Hello !
>>
>> I need to generate one or two attributes, based on a string value, and I
need to use this code many times. So I've written a function :
>>
>> <xsl:function name="local:extractName" as="attribute()*">
>> <xsl:param name="name" as="xs:string"/>
>> <xsl:choose>
>> <xsl:when test="$name castable as xs:QName">
>> <xsl:variable name="qname" select="xs:QName($name)" as="xs:QName"/>
>> <xsl:sequence>
>> <xsl:attribute name="name" select="local-name-from-QName($qname)"/>
>> <xsl:attribute name="namespace"
select="namespace-uri-from-QName($qname)"/>
>> </xsl:sequence>
>> </xsl:when>
>> <xsl:otherwise>
>> <xsl:sequence>
>> <xsl:attribute name="name" select="$name"/>
>> </xsl:sequence>
>> </xsl:otherwise>
>> </xsl:choose>
>> </xsl:function>
>>
>> This function still contains bugs, but for the described problem, it's
enough.
>>
>> I call this function in a template :
>>
>> <xsl:copy-of select="local:extractName(@name)"/>
>>
>> And this works perfectly.
>>
>> Now, I want to write a unit test for this function. I first want to check
that it returns a sequence of 2 attributes :
>>
>> <x:scenario label="Scenario for testing extractName function">
>> <x:call function="local:extractName">
>> <x:param name="name" as="xs:string" select="'toto'"/>
>> </x:call>
>> <!--x:expect label="two attributes, @name and @namespace"
select="exists(/*/@name) and exists(/*/@namespace)"/-->
>> <x:expect label="two attributes, @name and @namespace"
select="count($x:result/*) ge 2"/>
>> </x:scenario>
>>
>> I've tried many things, but I can't have a successful test. Any idea of how
to test this ?
>>
>> If someone want to get the whole project :
https://github.com/cmarchand/xsl-doc The xspec is in src/test/xspec/, and
works under Oxygen 15.2 to 17. The maven build will be much more complicated
to run, as dependencies are not in central repository.
>>
>> Thanks in advance,
>>
>> Christophe
>>
>> XSL-List info and archive [1]
>> EasyUnsubscribe (by email)
>
> XSL-List info and archive [1]
> EasyUnsubscribe [2] (by email)
Links:
------
[1] http://www.mulberrytech.com/xsl/xsl-list
[2] -list/2837134
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] XSL 3 function returning , Michael Kay mike@xxx | Thread | [xsl] Saxon-CE pass data to JS, Chris Despopoulos de |
| Re: [xsl] XSL 3 function returning , Michael Kay mike@xxx | Date | [xsl] Saxon-CE pass data to JS, Chris Despopoulos de |
| Month |