Global Context Item - xspec/xspec GitHub Wiki
Global context item absent
When the XSpec <x:description> element does not have @run-as or has @run-as="import", the global context item is absent (the global . is absent) during the test. Consequently:
- Named templates are called without a context item if you don't provide
x:context. - Global parameters and global variables in your stylesheet are always evaluated without a context item.
For example, in this stylesheet
<xsl:stylesheet ...>
<xsl:param name="p" select="foo" />
<xsl:variable name="v" select="base-uri()" />
$p and $v rely on the global context item. Testing this stylesheet does not work (the test will be terminated prematurely), because . is absent when evaluating @select of $p and $v during the test.
One solution is to override $p and $v with global x:param:
<x:description ...>
<x:param name="p" href="source-document.xml" select="foo" />
<x:param name="v" href="source-document.xml" select="base-uri()" />
<x:scenario ...>
Alternatively, you may want to refactor your stylesheet so that the global context item is always accessed indirectly as a single global parameter and then your XSpec can override it with a global x:param. See tutorial/global-context-item/.
Different global context item in each scenario
When /x:description/@run-as is external, every XSpec scenario has a different global context item depending on how the tested component is invoked. See its page for details.