<?xml-stylesheet type="text/xsl" href="/style/testcase.xsl"?>
<t:test xmlns:t="http://xproc.org/ns/testsuite"
        xmlns:p="http://www.w3.org/ns/xproc"
        xmlns:c="http://www.w3.org/ns/xproc-step"
        xmlns:err="http://www.w3.org/ns/xproc-error">

<t:title>Test parameters-003</t:title>

<t:pipeline>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
                xmlns:c="http://www.w3.org/ns/xproc-step"
                xmlns:ex="http://example.net/"
                version="1.0">

    <p:output port="result"/>
    <p:serialization port="result" indent="true"/>

    <p:declare-step name="step" type="ex:step">
        <p:input kind="parameter" port="p1" primary="true"/>
        <p:input kind="parameter" port="p2"/>
        <p:output port="result">
            <p:pipe port="result" step="result"/>
        </p:output>
        <p:parameters name="p1">
            <p:input port="parameters">
                <p:pipe port="p1" step="step"/>
            </p:input>
        </p:parameters>
        <p:wrap name="p1-params" wrapper="c:p1-params" match="/">
          <p:input port="source">
            <p:pipe step="p1" port="result"/>
          </p:input>
        </p:wrap>
        <p:parameters name="p2">
            <p:input port="parameters">
                <p:pipe port="p2" step="step"/>
            </p:input>
        </p:parameters>
        <p:wrap name="p2-params" wrapper="c:p2-params" match="/">
          <p:input port="source">
            <p:pipe step="p2" port="result"/>
          </p:input>
        </p:wrap>
        <p:wrap-sequence name="result" wrapper="c:parameters">
          <p:input port="source">
            <p:pipe step="p1-params" port="result"/>
            <p:pipe step="p2-params" port="result"/>
          </p:input>
        </p:wrap-sequence>
    </p:declare-step>

    <ex:step>
      <p:with-param name="param1-1" select="'param1'"/>
      <p:with-param name="param1-2" select="'param2'" port="p1"/>
      <p:with-param name="param2-1" select="'param3'" port="p2"/>
    </ex:step>

    <p:xslt>
      <p:input port="stylesheet">
        <p:inline>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                          xmlns:xs="http://www.w3.org/2001/XMLSchema"
                          xmlns:c="http://www.w3.org/ns/xproc-step"
		          exclude-result-prefixes="xs"
                          version="2.0">

            <xsl:template match="element()">
              <xsl:copy>
                <xsl:apply-templates select="@*,node()"/>
              </xsl:copy>
            </xsl:template>

            <xsl:template match="attribute()|text()|comment()|processing-instruction()">
              <xsl:copy/>
            </xsl:template>

            <xsl:template match="c:param-set">
              <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:for-each select="c:param">
                  <xsl:sort select="@name"/>
                  <xsl:apply-templates select="."/>
                </xsl:for-each>
              </xsl:copy>
            </xsl:template>
          </xsl:stylesheet>
        </p:inline>
      </p:input>
      <p:input port="parameters">
        <p:empty/>
      </p:input>
    </p:xslt>
</p:declare-step>
</t:pipeline>

<t:output port="result">
<c:parameters xmlns:c="http://www.w3.org/ns/xproc-step">
   <c:p1-params>
      <c:param-set>
         <c:param name="param1-1" namespace="" value="param1"/>
         <c:param name="param1-2" namespace="" value="param2"/>
      </c:param-set>
   </c:p1-params>
   <c:p2-params>
      <c:param-set>
         <c:param name="param2-1" namespace="" value="param3"/>
      </c:param-set>
   </c:p2-params>
</c:parameters>
</t:output>
</t:test>
