<?xml version="1.0"?>
<?xsl-stylesheet href="ts-html.xsl" type="text/xsl"?>
<!DOCTYPE testsuite PUBLIC "-//W3C//DTD XMLPWG Test Suite V1.4//EN" "ts.dtd">
<testsuite role="editors-copy">

  <!-- Top assertion is: 37 -->

  <!-- For when I have more time...
  xmlns="http://www.w3.org/2000/xp/Group/1/09/ts"
  xmlns:h="http://www.w3.org/1999/xhtml"-->
  <header>
    <title>SOAP Version 1.2 Test Collection</title>
    <w3c-doctype>Editors' copy $Date: 2001/11/16 21:06:05 $</w3c-doctype>
    <authlist>
      <author>
        <name>Hugo Haas</name>
        <affiliation>W3C</affiliation>
      </author>
      <author>
	<name>Oisin Hurley</name>
	<affiliation>IONA Technologies</affiliation>
      </author>
    </authlist>
    <pubdate>
      <year>2001</year>
    </pubdate>
    <abstract>
      <p>This document draws a list of testable assertions
	found in the <a href="http://www.w3.org/TR/soap12/">SOAP
	Version 1.2 specification</a>, and provides a set of tests in
	order to show whether the assertion is implemented in a SOAP
	processor.</p>
      <p>The goal of this document is to get a
	list of features whose implementation can be tested in order
	to satisfy the entrance criteria of the <a
	  href="http://www.w3.org/Consortium/Process-20010719/tr.html#RecsPR">Proposed
	  Recommendation stage</a>.</p>
      <p>It is incorrect to claim to be compliant with the <a
	href="http://www.w3.org/TR/soap12/">SOAP Version 1.2
	specification</a> by passing successfully all the tests
	provided in this test suite. An implementation which would
	pass all the tests below may claim to be <em>compliant with the test
	suite dated $Date: 2001/11/16 21:06:05 $</em>.</p>
    </abstract>
    <status>
      <p>This document has been produced by the <a
	  href="http://www.w3.org/2000/xp/Group/">W3C XML Protocol
	  Working Group</a>. All information in this document is to
	  be considered as work in progress.</p>

      <p>Contributions to this document are encouraged. Please refer
      to <a href="../10/ts-contribution">W3C SOAP Version 1.2 test
      collection - How to contribute</a> to find out more about
      contributing.</p>

      <p>This version is based on the 2001/11/08 14:16:59
	editors' copies of the SOAP Version 1.2 part 1 and part 2
	specifications.</p>

      <p>Please refer to the latest SOAP Version 1.2 Working Drafts
      (<a href="http://www.w3.org/TR/soap12-part1/">part 1</a> and <a
      href="http://www.w3.org/TR/soap12-part2/">part 2</a>) for any
      normative information.</p>

      <p>Please send comments on this document to <a
	  href="mailto:xml-dist-app@w3.org">xml-dist-app@w3.org</a>
	(<a
	  href="http://lists.w3.org/Archives/Public/xml-dist-app/">public
	  archive</a>), especially if something is missing from this
	list of assertions.</p>
    </status>
    <langusage>
      <language id="en">English</language>
    </langusage>
  </header>

  <body>
    <p>This section reproduces the structure of the SOAP Version 1.2
      Working Draft. The tests have been grouped into four categories:
      the core features from the messaging framework specification,
      tests regarding the RPC convention, the SOAP encoding and the
      HTTP binding as defined in the adjuncts specification.</p>

    <p>Assertions are given a unique number. Should assertions be
      modified, the assertion number will be changed so that tests can
      be easily named.</p>

    <p><em>A</em> means assertion. Test are numbered as
    <em>AxTy</em>, when x is the assertion number.</p>

    <p>SOAPBuilders interoperability tests have been classified in
      this document. They are numbered as follows:
      <em>SBRng</em>, meaning SOAPBuilders round n, group g. Some
      tests are listed as testing two assertions (e.g. arrays and
      structs). Obviously, structs and arrays can use simple types,
      but this is not listed as such to avoid making the document too
      complex.</p>

    <p>All the tests follow the following rules:</p>

    <ul>
      <li><p>Communication with the SOAP processor tested is done by
      HTTP, using the HTTP binding described in the adjuncts
      specification.</p>
      </li>
      <li><p>The node tested must act as the actor
      <uri>http://www.w3.org/2000/xp/Group/1/09/ts-tests/test</uri>.</p>
      </li>
    </ul>

    <group id="env">
      <gtitle>Core specification</gtitle>

      <assertion number="1">

	<specref>
	  <p><span class="spectoc">Part 1 Section 2.1: SOAP Nodes</span></p>
	</specref>

	<spectext>
	  <blockquote>
	    <p>A SOAP node receiving a SOAP message MUST perform
	      processing according to the SOAP processing model and, if
	      appropriate, generate SOAP faults, SOAP responses and 
	      send additional SOAP messages, as provided by
	      the remainder of this specification.</p>
	  </blockquote>
	</spectext>

	<comment>
	  <p>The implementation of this assertion is tested by the
	  entire test suite.</p>
	</comment>

	<tests>
	  <p>None proposed.</p>
	</tests>

      </assertion>

      <assertion number="2">

	<specref>
	  <p><span class="spectoc">Part 1 Section 2.2: SOAP Actors and SOAP
	      Nodes</span></p>
	</specref>

	<spectext>
	  <blockquote>
	    <p>Each SOAP node MUST act in the role of the special SOAP
	      actor named "<a
		href="http://www.w3.org/2001/09/soap-envelope/actor/next">http://www.w3.org/2001/09/soap-envelope/actor/next</a>",
	      and can additionally assume the roles of zero or more
	      other SOAP actors.</p>
	  </blockquote>
	</spectext>

	<comment>
	  <p>Other header blocks with unrecognized values for the actor
	    attribute must be ignored.</p>

	  <p>SB tests do not cover the case of the URI of the node, they
	    only cover the .../next URI case.</p>

	  <p>SBR2C tests: <span class="sb">SBR2
	      echoMeStringRequest</span> which uses mustUnderstand="0";
	    <span class="sb">SBR2 echoMeStructRequest</span> which uses
	    mustUnderstand="1"; <span class="sb">SBR2 unknown header
	      entry</span> which uses a combination of both.</p>
	</comment>

	<tests>

          <p>The following tests use the SOAP module identified by the
          URI
          <uri>http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK</uri>.
          When processing an <module>echoOK</module> module, the SOAP
          processor must return an <module>responseOK</module> in the
          same namespace, with a value of <value>OK</value>.</p>

	  <test number="1">
	    <scenario>
	      <p>The node tested is sent a message containing a block
		<module>echoOk</module> block targetted to
		<uri>http://www.w3.org/2001/06/soap-envelope/actor/next</uri>:</p>
	      <soapmsg>
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"&gt;
  &lt;env:Body&gt;
    &lt;m:echoOK
      xmlns:m="http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK" 
      env:actor="http://www.w3.org/2001/06/soap-envelope/actor/next"/&gt;
  &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</soapmsg>
	    </scenario>
	    <pcriteria>
	      <p>The tested node returns a SOAP message containing a
	      <module>responseOK</module> block in the body, whose
	      value is <value>OK</value>:</p>
	      <soapmsg>
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"&gt;
  &lt;env:Body&gt;
    &lt;m:responseOK
      xmlns:m="http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK"&gt;OK&lt;/m:responseOK&gt;
  &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</soapmsg>
	    </pcriteria>
	  </test>

	  <test number="2">
	    <scenario>
	      <p>The node tested is sent a message containing a block
		<module>echoOk</module> block targetted to
		<uri>http://www.w3.org/2000/xp/Group/1/09/ts-tests/tested</uri>:</p>
	      <soapmsg>
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"&gt;
  &lt;env:Body&gt;
    &lt;m:echoOK
      xmlns:m="http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK" 
      env:actor="http://www.w3.org/2000/xp/Group/1/09/ts-tests/tested"/&gt;
  &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</soapmsg>
	    </scenario>
	    <pcriteria>
	      <p>The tested node returns a SOAP message containing a
	      <module>responseOK</module> block in the body, whose
	      value is <value>OK</value>:</p>
	      <soapmsg>
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"&gt;
  &lt;env:Body&gt;
    &lt;m:responseOK
      xmlns:m="http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK"&gt;OK&lt;/m:responseOK&gt;
  &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</soapmsg>
	    </pcriteria>
	  </test>

	</tests>

      </assertion>

      <assertion number="3">

	<specref>
	  <p><span class="spectoc">Part 1 Section 2.2: SOAP Actors and SOAP
	      Nodes</span></p>
	</specref>

	<spectext>
	  <blockquote>
	    <p>A SOAP node can establish itself as the ultimate SOAP
	      receiver by acting in the (additional) role of the
	      anonymous SOAP actor.</p>
	  </blockquote>
	</spectext>

	<comment>
	  <p>Another similar assertion later?</p>

	  <p>Pretty much any RPC test is redundant with this.</p>

	  <p><span class="sb">SBR1 tests</span>; <span class="sb">SBR2A
	      tests</span>; <span class="sb">SBR2B tests</span></p>
	</comment>

	<tests>
	  <test number="1">
	    <scenario>
	      <p>The node tested is sent a message containing a block
		<module>echoOk</module> block targetted to
		the anonymous actor:</p>
	      <soapmsg>
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"&gt;
  &lt;env:Body&gt;
    &lt;m:echoOK
      xmlns:m="http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK"/&gt;
  &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</soapmsg>
	    </scenario>
	    <pcriteria>
	      <p>The tested node returns a SOAP message containing a
	      <module>responseOK</module> block in the body, whose
	      value is <value>OK</value>:</p>
	      <soapmsg>
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"&gt;
  &lt;env:Body&gt;
    &lt;m:responseOK
      xmlns:m="http://www.w3.org/2000/xp/Group/1/09/ts-tests/echoOK"&gt;OK&lt;/m:responseOK&gt;
  &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</soapmsg>
	    </pcriteria>
	  </test>
	</tests>

      </assertion>

      <assertion number="3.1">

	<specref>

	  <p><span class="spectoc">Part 1 Section 2.2: SOAP Actors and
	      SOAP Nodes Headers</span></p>

	</specref>
        <spectext>
          <blockquote>
             <p>SOAP nodes MUST NOT act in the role of the special SOAP 
                actor named "http://www.w3.org/2001/09/soap-envelope/actor/none".</p>
          </blockquote>
	</spectext>
	<tests>

	</tests>

      </assertion>

      <assertion number="4">

	<specref>

	  <p><span class="spectoc">Part 1 Section 2.4: Understanding SOAP
	      Headers</span></p>

	</specref>
	<spectext>

	  <blockquote>
          <p>SOAP header blocks carry optional <em>attribute
            information items</em> with a local name of
            <code>mustUnderstand</code> and a namespace name of
            <em>http://www.w3.org/2001/09/soap-envelope</em> (see
            4.2.3 SOAP mustUnderstand Attribute). When the value of such an
            <em>attribute information item</em> is
            "true", the SOAP block is said to be
            mandatory. For such SOAP blocks the targeted SOAP node
            MUST: either process the SOAP block according to the
            semantics conveyed by the combination of local name and
            namespace name of the outer-most <em>element information
            item</em> of that block; or not process the SOAP message
            at all, and generate a fault (see 4.4 SOAP Fault).</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Check how A4, A5 and A6 are related (in the spec, and for
	    the tests).</p>

	</comment>
	<tests>

	  <p>Send an understandable mustUnderstand block.</p>

	  <p>Send an ununderstandable (??) mustUnderstand block.</p>

	  <p>SB tests: check A5 and A6.</p>

	</tests>
      </assertion>
      <assertion number="5">

	<specref>

	  <p><span class="spectoc">Part 1 Section 2.5: Processing SOAP
	      Messages</span></p>

	</specref>
	<spectext>

	  <blockquote> <p>Generate a single SOAP MustUnderstand fault
	    (see 4.4.2 MustUnderstand Faults) if one or more SOAP
	    blocks targeted at the SOAP node are mandatory and are not
	    understood by that node. If such a fault is generated, any
	    further processing MUST NOT be done.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Some commonality with A4.</p>

	</comment>
	<tests>

	  <p>Send one not understandable mustUnderstand block.</p>

	  <p>Send several not understandable mustUnderstand block.</p>

	  <p>Check processing and the fault returned.</p>

	  <p>Send a combination of blocks and check that the SOAP node
	    does the right thing (needs details; see the example from
	    the Dinard face-to-face).</p>

	  <p>SBR2C tests: <span class="sb">SBR2 unknown header entry
	      element</span> unknown header sent with
	    mustUnderstand="0"/"1" targetted to the/another SOAP
	    node</p>

	</tests>
      </assertion>
      <assertion number="6">

	<specref>

	  <p><span class="spectoc">Part 1 Section 2.5: Processing SOAP
	      Messages</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>
            A SOAP node MUST process SOAP blocks targetted at it that
            are identified as mandatory. 
              </p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Some commonality with A4.</p>

	  <p>SB tests should cover this.</p>

	</comment>
	<tests>

	  <p>Send one mustUnderstand block.</p>

	  <p>Send several mustUnderstand blocks.</p>

	  <p>Check that they are processed.</p>

	  <p>SBR2C tests: <span class="sb">SBR2
	      echoMeStructRequest</span> sends an understandable header
	    with mustUnderstand="1".</p>

	</tests>
      </assertion>
      <assertion number="7">

	<specref>

	  <p><span class="spectoc">Part 1 Section 2.5: Processing SOAP
	      Messages</span></p>

	</specref>
	<spectext>

	  <blockquote> <p>If the SOAP node is a SOAP intermediary,
	    the SOAP message pattern and results of processing
	    (e.g. no fault generated) MAY require that the SOAP
	    message be sent further along the SOAP message path. Such
	    relayed SOAP messages MUST contain all SOAP header blocks
	    and the SOAP body blocks from the original SOAP message,
	    in the original order, except that SOAP header blocks
	    targeted at the SOAP intermediary MUST be removed (such
	    SOAP blocks are removed regardless of whether they were
	    processed or ignored). Additional SOAP header blocks MAY
	    be inserted at any point in the SOAP message, and such
	    inserted SOAP header blocks MAY be indistinguishable from
	    one or more just removed (effectively leaving them in
	    place, but emphasizing the need to reinterpret at each
	    SOAP node along the SOAP message path.)</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Check that a SOAP node behaves correctly as an
	    intermediary.</p>

	</comment>
	<tests>

	  <p>Check that the targeted blocks (both with .../next and a
	    particular URI) are removed.</p>

	  <p>Check that all the others are present in the original order
	    (use IDs to distinguish them).</p>

            <p>Not quite sure what is to be done for blockc that turn
            out to be re-inserted into the message - cannot prove it</p>

	</tests>
      </assertion>

      <assertion number="8">

	<specref>

	  <p><span class="spectoc">Part 1 Section 3: Relation to XML</span></p>

	</specref>
	<spectext>

	  <blockquote><p>A SOAP node MUST ensure that all <em>element information
        items</em> and <em>attribute information items</em> in
        messages that it generates are correctly namespace
        qualified. A SOAP node MUST be able to process SOAP
        namespace information in messages that it receives.
        It MUST treat messages with incorrect namespace information
        as a version error (see 4.1.2
        Envelope Versioning Model).</p>
	      </blockquote>

	</spectext>

	<tests>

	  <p>Send a message with an unknown namespace.</p>

	  <p>Send a message without any namespace.</p>

	</tests>
      </assertion>

      <assertion number="8.1">

	<specref>

	  <p><span class="spectoc">Part 1 Section 3: Relation to XML
	      </span></p>

	</specref>
	<spectext>

	  <blockquote> <p>Schema documents for these namespaces can
          be found by dereferencing the namespace identifiers. 
          These schemas are normative.</p>
	      </blockquote>

	</spectext>

        <comment>
          <p> the schema for the SOAP namespaces is the 'gold
          standard' against which all envelopes will be applied. It
          should be correct!</p>
        </comment>

	<tests>

	  <p>attempt to access the schema document</p>
          <p>apply schema document to an envelope instance</p>

	</tests>
      </assertion>

      <assertion number="8.3">

	<specref>

	  <p><span class="spectoc">Part 1 Section 3: Relation to XML
	      </span></p>

	</specref>
	<spectext>

	  <blockquote> <p>A SOAP message MUST NOT contain a Document Type
      Declaration. On receipt of a SOAP message containing a Document
      Type Declaration, a SOAP receiver MUST generate a fault (see 4.4
      SOAP Fault) with faultcode of "Client.DTD".</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>send a SOAP message with a DTD and check for failure</p>

	</tests>
      </assertion>

      <assertion number="8.2">

	<specref>

	  <p><span class="spectoc">Part 1 Section 3: Relation to XML</span></p>

	</specref>
	<spectext>

	  <blockquote> 
          <p> 
	      A SOAP message
	      SHOULD NOT contain processing instruction information items. A
	      SOAP receiver MUST ignore <em>processing instruction
		information items</em> in SOAP messages it receives.
          </p>
	  </blockquote>     

	</spectext>

	<tests>

	  <p>send a SOAP message with a PI and check that it is ignored</p>

	</tests>
      </assertion>

      <assertion number="8.6">
	<specref>
	  <p><span class="spectoc">Part 1 Section 3: Relation to XML</span></p>
	</specref>
	<spectext>
	  <blockquote>
	    <p>A SOAP message MUST NOT impose any XML schema processing
	      (assessment and validation) requirement on the part of any
	      receiving SOAP node.</p>
	  </blockquote>
	</spectext>
	<comment>
	  <p>Probably not testable.</p>
	</comment>
	<tests>
	</tests>
      </assertion>

      <assertion number="9">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4: SOAP Envelope</span></p>

	</specref>
	<spectext>

	  <p>The introduction of section 4 explains the structure of a
	    SOAP message.</p>

	</spectext>
	<comment>

	  <p>The structure of the envelope could be checked on every
	    test, and this would not require an extra test.</p>

	</comment>
	<tests>

	  <p>@@@</p>

	</tests>
      </assertion>

      <assertion number="9.1">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.1.1: SOAP
	  encodingStyle Attribute</span></p>

	</specref>
	<spectext>

	  <blockquote><p>The encodingStyle attribute information item is a whitespace
          delimited list where each item in the list is of type anyURI in the
          namespace http://www.w3.org/2001/XMLSchema. 
         </p></blockquote>

	</spectext>
	<tests>

	  <p>if an encoding style is present, check the namespace, the
	  schema type and the structure of the list (ie whitespace
	  delimited, using all different types of whitespace) </p>

	</tests>
      </assertion>

      <assertion number="9.2">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.1.1: SOAP
	  encodingStyle Attribute</span></p>

	</specref>
	<spectext>

	  <blockquote><p>all URIs syntactically beginning with
          "http://www.w3.org/2001/09/soap-encoding" indicate
          conformance with the SOAP encoding rules defined in [1](SOAP
          Encoding), though with potentially tighter rules added.</p></blockquote>

	</spectext>
	<tests>

	  <p>check that everything using this URI root will conform to
	  encoding tests </p>

	</tests>
      </assertion>

      <assertion number="9.3">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.1.1: SOAP
	  encodingStyle Attribute</span></p>

	</specref>
	<spectext>

	  <blockquote><p>A value of the zero-length URI ("") explicitly indicates
          that no claims are made for the encoding style of contained
          elements. This can be used to turn off any claims from
          containing elements.</p></blockquote>

	</spectext>
        <comment>
          <p>does this means that the 'claims' can be turned off
        forever or for just the scope of the element on which the
        encodingStyle attribute is attached</p>
        </comment>
	<tests>

	  <p>check that the "" URI is accepted</p>
          <p>check that the "" URI switches off a previous encoding
          style</p>
          <p>check the scope of this 'switch off'</p>

	</tests>
      </assertion>

      <assertion number="10">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.1.2: Envelope Versioning
Model</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>If a SOAP message is received by a SOAP 1.2 node in which
            the document element information item does NOT have a
            local name of Envelope and a namespace name of
            http://www.w3.org/2001/09/soap-envelope the SOAP node MUST
            treat this as a version error and generate a
            VersionMismatch SOAP fault (see 4.4 SOAP Fault). A SOAP
            VersionMismatch fault message MUST use the SOAP/1.1
            envelope namespace
            "http://schemas.xmlsoap.org/soap/envelope/" (see A Version
            Transition From SOAP/1.1 to SOAP Version 1.2).</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>Send a message with a different namespace and check tha
	  that a fault returns and that the fault is the correct
	  one.</p>
          <p> Check that the fault is using the 1.1 envelope namespace  </p>

	</tests>
      </assertion>

      <assertion number="11">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.2: SOAP Header</span></p>

	</specref>
	<spectext>

	  <blockquote>
      <p>The <code>Header</code>  <em>element information item</em> has:</p>

	<ul>

	  <li><p>A local name of <code>Header</code> 
	  </p></li>

	  <li><p>A namespace name of
            <em>http://www.w3.org/2001/09/soap-envelope</em>
            </p></li>

	  <li><p>Zero or more namespace qualified <em>attribute
	    information item</em> children.</p></li>

	  <li><p>Zero or more namespace qualified <em>element
	    information item</em> children.</p></li>

	</ul>

        <p>All child <em>element information items</em> of
        the SOAP Header are called SOAP header blocks.</p>

        <p>Each SOAP header block <em>element information item</em>:</p>

        <ul>

          <li><p>MUST be namespace qualified;</p></li>

          <li><p>MAY have an <code>encodingStyle</code> <em>attribute
          information item</em></p></li>

          <li><p>MAY have
          an <code>actor</code> <em>attribute information
          item</em></p></li>

          <li><p>MAY have a <code>mustUnderstand</code>
          <em>attribute information item</em></p></li>

        </ul>
	  </blockquote>

	</spectext>
	<comment>

	  <p>As for DA9, the syntax should be checked at every
	  test.</p>

	</comment>
	<tests>

        <p>tests are pretty much specified in the quote above!</p>      
	</tests>
      </assertion>

      <assertion number="12">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.2.1: Use of Header
Attributes</span></p>

	</specref>
	<spectext>

	  <blockquote>
           <p>A SOAP
           receiver MUST ignore all SOAP header block <em>attribute
           information items</em> that are applied to other
           descendant <em>element information
           items</em> of the SOAP <code>Header</code>  <em>element information
           item</em>.</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>Send a message with the actor and mustUnderstand attributes
	    randomly located on elements.</p>

	</tests>
      </assertion>

      <assertion number="12.1">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.2.1: Use of Header
Attributes</span></p>

	</specref>
	<spectext>

	  <blockquote>
          <p>SOAP header block <em>attribute information
          items</em> MUST appear in the SOAP message itself in order
          to be effective; default values which may be specified in an
          XML Schema or other description language do not affect SOAP
          processing (see 3 Relation to XML).</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>provide a schema that defaults a value and check that it
	  fails</p>

	</tests>
      </assertion>


<!--
      <assertion number="13">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.2.2:SOAP actor
Attribute</span></p>

	  <p>Note that this section has redundant information and hence
	    redundant assertions.</p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>This [actor] attribute MUST appear in the SOAP message
	      itself in order to be effective, and not in an eventual
	      corresponding XML Schema (see section <a
		href="http://www.w3.org/TR/soap12/#_Toc478383492">3</a>
	      and <a
		href="http://www.w3.org/TR/soap12/#_Toc478383498">4.2.1</a>).</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Application specific; not testable.</p>

	</comment>
	<tests>

	  <p>@@@</p>

	</tests>
      </assertion>
-->

<!--
      <assertion number="14">

	<specref>

	  <p><span class="spectoc">Section
		4.2.3:SOAP mustUnderstand
		Attribute</span></p>

	  <p>Note that this section has redundant information and hence
	    redundant assertions.</p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>This [mustUnderstand] attribute MUST appear in the SOAP
	      message itself in order to be effective, and not in an
	      eventual corresponding XML Schema (see section <a
		href="http://www.w3.org/TR/soap12/#_Toc478383492">3</a>
	      and <a
		href="http://www.w3.org/TR/soap12/#_Toc478383498">4.2.1</a>).</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Application specific; not testable.</p>

	</comment>
	<tests>

	  <p>@@@</p>

	</tests>
      </assertion>
-->

      <assertion number="14.1">
	<specref>
	  <p><span class="spectoc">Part 1 Section
		4.2.3:SOAP mustUnderstand Attribute</span></p>
	</specref>
	<spectext>
	  <blockquote>
          <p>The type of the <code>mustUnderstand</code> <em>attribute
          information item</em> is boolean in the namespace <a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>.
          Omitting this attribute information item is defined as being
          semantically equivalent to including it with a value of
          "false".</p>
	  </blockquote>
	</spectext>
	<tests>
	  <p>Test with a "false" value and without a value and check
	  that the results are the same</p>
	</tests>
      </assertion>

      <assertion number="15">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.4: SOAP Fault</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>If present, the SOAP <code>Fault</code> 
        MUST appear as a SOAP body block and MUST NOT appear more than
        once within a SOAP Body.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>This should be tested in every scenario in which a fault is
	    expected.</p>

	</comment>
	<tests>

	  <p>@@@</p>

	</tests>
      </assertion>
      <assertion number="16">

	<specref>
	  <p><span class="spectoc">Part 1 Section 4.4: SOAP Fault</span></p>
	</specref>
	<spectext>

	  <p>Section 4.4 describes the structure of a fault element,
	    plus:</p>

	  <blockquote>
	    <p>[The detail element information item] MUST be
        present when the contents of the SOAP Body could not be
        processed successfully. It MUST NOT be used to carry error
	      information about any SOAP header blocks. Detailed error
	      information for SOAP header blocks MUST be carried within
	      the SOAP header blocks themselves.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>This should be tested in every scenario in which a fault is
	    expected.</p>

	</comment>
	<tests>

	  <p>Additional test: check that details about a fault in a
	    header isn't carried in the detail element but in header
	    blocks.</p>

	</tests>
      </assertion>
      <assertion number="17">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.4.1: SOAP Fault
Codes</span></p>

	</specref>
	<spectext>

	  <blockquote>
<p>The SOAP <code>faultcode</code>  values defined in this
          section MUST be used as values for the SOAP
          <code>faultcode</code>  <em>element information item</em>
          when describing faults defined by SOAP 1.2 Part 1 (this
          document). The namespace identifier for these SOAP
          <code>faultcode</code>  values is "<a
          href="http://www.w3.org/2001/09/soap-envelope">http://www.w3.org/2001/09/soap-envelope</a>".</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>Trigger a number of faults and check that the appropriate
	    faultcode is used.</p>

	</tests>
      </assertion>
      <assertion number="18">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.4.2: MustUnderstand
Faults</span></p>

	</specref>
	<spectext>

	  <p>Section 4.4.2 defines the syntax of a mustUnderstand fault,
	    i.e. the syntax of the Misunderstood element.</p>

	</spectext>
	<comment>

	  <p>The syntax could be tested. However, this error reporting
	    mechanism is not mandatory. The syntax should be tested when
	    faults are generated, if this is the case that the
	    Misunderstood element is used.</p>

	</comment>
	<tests>

	  <p>@@@</p>

	</tests>
      </assertion>
    </group>

    <group id="enc">
      <gtitle>Encoding</gtitle>

      <assertion number="34">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4:
		SOAP Encoding</span></p>

	</specref>
	<spectext>

	  <blockquote>
      <p>The data serialized according to the rules defined in this
      section MAY contain references to data outside the serialization.
      When present, these references MUST be Uniform Resource Identifiers.</p>	  </blockquote>

	</spectext>

	<tests>
	</tests>
      </assertion>

      <assertion number="8.4">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.1: Rules for Encoding Types in XML</span></p>

	</specref>
	<spectext>

	  <blockquote> <p>SOAP uses unqualified attribute information
            items with a local name of id and a type of ID in the
            http://www.w3.org/2001/XMLSchema namespace to specify the
            unique identifier of an encoded element.</p>
            </blockquote>

	</spectext>

	<comment>
	  <p>Not sure about what to do with this assertion.</p>
	</comment>

	<tests>

	  <p>send a SOAP message with a id attributes and validate
	  with schema</p>
          <p>perhaps check that the encoded element is indeed unique</p>

	</tests>
      </assertion>

      <assertion number="8.5">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.1: Rules for Encoding Types in XML</span></p>

	</specref>
	<spectext>

	  <blockquote> <p> SOAP uses unqualified attribute information
          items with a local name of href and a type of anyURI in the
          http://www.w3.org/2001/XMLSchema namespace to specify a
          reference to such a value, in a manner conforming to the XML
          Specification[8], XML Schema Specification[5], and XML
          Linking Language Specification[9].  </p> </blockquote>

	</spectext>

	<tests>

	  <p>send a SOAP message with a href attribute and validate
	  with schema</p>
          <p>pull out relevant information in the referenced
	  specifications to ensure that the there is conformance</p>

	</tests>
      </assertion>

      <assertion number="19">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.1:
		Rules for Encoding Types in XML</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>All values are represented as element content. A
	      multi-reference value MUST be represented as the content
	      of an independent element.</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>@@@</p>

	</tests>
      </assertion>
      <assertion number="20">

	<specref>

	  <p><span class="spectoc">Part 1 Section 4.1:
		Rules for Encoding Types in XML</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>For each element containing a value, the type of the
	      value MUST be represented by at least one of the following
	      conditions: (a) the containing element instance contains
	      an <code>xsi:type</code> attribute, (b) the containing element instance
	      is itself contained within an element containing a
	      (possibly defaulted) <code>enc:arrayType</code> attribute or (c) or the
	      name of the element bears a definite relation to the type,
	      that type then determinable from a schema.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Should be tested every time a response is received from the
	    SOAP node tested.</p>

	</comment>
	<tests>

	</tests>
      </assertion>
      <assertion number="21">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.2:
		Simple Types</span></p>

	</specref>
	<spectext>

	  <p>Section 4.1 and section 4.2 define simple values.</p>

	  <blockquote>
	    <p>All simple values MUST be encoded as the content of
	      elements whose type is either defined in "XML Schema Part
	      2: Datatypes" Specification [11], or is based on a type
	      found there by using the mechanisms provided in the XML
	      Schema specification.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Implementations should be tested to ensure that they
	    understand simple values.</p>

	  <p>A variety of types should be used, including the examples
	    found in the SOAP Version 1.2 specification (subsections of
	    section 5.2).</p>

	  <p>SB tests are pretty extensive.</p>

	</comment>
	<tests>

	  <p>SBR1 tests: <span class="sb">SBR1 echoString</span>; <span
	      class="sb">SBR1 echoInteger</span>; <span class="sb">SBR1
	      echoFloat</span>; <span class="sb">SBR1 echoBase64</span>;
	    <span class="sb">SBR1 echoDate</span></p>

	  <p>SBR2A tests: <span class="sb">SBR2 echoString</span>; <span
	      class="sb">SBR2 echoInteger</span>; <span class="sb">SBR2
	      echoFloat</span>; <span class="sb">SBR2 echoBase64</span>;
	    <span class="sb">SBR2 echoDate</span>; <span
	      class="sb">SBR2 echoDecimal</span>; <span class="sb">SBR2
	      echoBoolean</span></p>

	  <p>SBR2B tests: <span class="sb">SBR2
	      echoStructAsSimpleTypes</span>; <span class="sb">SBR2
	      echoSimpleTypesAsStruct</span></p>

	</tests>
      </assertion>
      <assertion number="25">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.3:
		Polymorphic Accessor</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>A polymorphic accessor instance MUST contain an
	      <code>xsi:type</code> attribute that describes the type of the actual
	      value.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Not sure what/how to test that.</p>

	</comment>
	<tests>

	</tests>
      </assertion>
      <assertion number="22">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.4:
		Compound Types</span></p>

	  <p><span class="spectoc">Part 2 Section 4.4.1: Compound
	  Values and References to Values</span></p>

	</specref>
	<spectext>

	  <p>Section 4.1 and section 4.4 &amp; 4.4.1 define compound
	    values.</p>

	  <blockquote>
	    <p>A "struct" is a compound value in which accessor name is
	      the only distinction among member values, and no accessor
	      has the same name as any other.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Implementations should be tested to ensure that they
	    understand compound values.</p>

	  <p>SB tests pretty extensive.</p>

	</comment>
	<tests>

	  <p>SBR1 tests:<span class="sb">SBR1 echoStruct</span>; <span
	      class="sb">SBR1 echoStructArray</span></p>

	  <p>SBR2A tests: <span class="sb">SBR2 echoStruct</span>; <span
	      class="sb">SBR2 echoStructArray</span></p>

	  <p>SBR2B tests: <span class="sb">SBR2
	      echoStructAsSimpleTypes</span>; <span class="sb">SBR2
	      echoSimpleTypesAsStruct</span>; <span class="sb">SBR2
	      echoNestedStruct</span>; <span class="sb">SBR2
	      echoNestedArray</span></p>

	</tests>
      </assertion>
      <assertion number="23">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.4:
		Compound Types</span></p>

	  <p><span class="spectoc">Part 2 Section 4.4.1: Compound Values,
	      Structs and References to Values</span></p>

	</specref>
	<spectext>

	  <p>Sections 4.1 and 4.4.1 define multi-reference values.</p>

	</spectext>
	<comment>

	  <p>Implementations should be tested to ensure that they
	    understand multi-reference values.</p>

	</comment>
	<tests>

	</tests>
      </assertion>
      <assertion number="24">

	<specref>

	  <p><span class="spectoc">Part 2 Section 4.4:
		Compound Types</span></p>

	  <p><span class="spectoc">Part 2 Section 4.4.2: Arrays</span></p>

	</specref>
	<spectext>

	  <p>Sections 4.1 and 4.4.2 define arrays.</p>

	</spectext>
	<comment>

	  <p>Implementations should be tested to ensure that they
	    understand arrays.</p>

	  <p>SB tests pretty extensive.</p>

	</comment>
	<tests>

	  <p>SBR1 tests: <span class="sb">SBR1 echoStringArray</span>;
	    <span class="sb">SBR1 echoIntegerArray</span>; <span
	      class="sb">SBR1 echoFloatArray</span>; <span class="sb">SBR1
		echoStructArray</span></p>

	  <p>SBR2A tests: <span class="sb">SBR2 echoStringArray</span>;
	    <span class="sb">SBR2 echoIntegerArray</span>; <span
	      class="sb">SBR2 echoFloatArray</span>; <span
	      class="sb">SBR2 echoStructArray</span></p>

	  <p>SBR2B tests: <span class="sb">SBR2
	      echo2DStringArray</span>; <span class="sb">SBR2
	      echoNestedArray</span></p>

	</tests>
      </assertion>
      <assertion number="26">

	<specref>

	  <p><span class="spectoc">Part 2 Section
		4.4.2.1: Partially Transmitted Arrays</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>A partially transmitted array indicates in an
	      <code>enc:offset</code> attribute the zero-origin offset of the first
	      element transmitted.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Test the understanding of the enc:offset attribute.</p>

	</comment>
	<tests>

	</tests>
      </assertion>
      <assertion number="27">

	<specref>

	  <p><span class="spectoc">Part 2 Section
		4.4.2.2: Sparse Arrays</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>Each element representing a member value contains a
	      <code>enc:position</code> attribute that indicates its position
	      within the array.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Test the understanding of the enc:position attribute.</p>

	</comment>
	<tests>

	</tests>
      </assertion>

    </group>

    <group id="rpc">
      <gtitle>RPC convention</gtitle>

      <assertion number="35">
	<specref>

	  <p><span class="spectoc">Part 2 Section
		5.1: RPC and SOAP Body</span></p>

	</specref>
	<spectext>
	  <blockquote>
<p>The name of the return value accessor is "result" and
		  it is namespace-qualified with the namespace identifier
          "http://www.w3.org/2001/09/soap-rpc"
		  The return value accessor MUST be present if the return
          value of the procedure is non-void. The return value
          accessor MUST NOT be present if the return value
		  of the procedure is void.</p>
	  </blockquote>
	</spectext>
	<tests>
	</tests>
      </assertion>

      <assertion number="32">

	<specref>

	  <p><span class="spectoc">Part 2 Section 5.1:
		RPC and SOAP Body</span></p>

	</specref>
	<spectext>

	  <p>Section 5.1 states the rules for RPCs.</p>

	</spectext>
	<comment>

	  <p>Most of the tests will use RPCs, so the syntax of the
	    response should be tested.</p>

	  <p>SB tests make use of this.</p>

	</comment>
	<tests>

	  <p><span class="sb">SBR1 tests</span>; a particular case is
	    tested by <span class="sb">SBR1 echoVoid</span> (no
	    arguments in nor out).</p>

	  <p><span class="sb">SBR2 tests</span>; a particular case is
	    tested by <span class="sb">SBR2 echoVoid</span> (no
	    arguments in nor out).</p>

	</tests>
      </assertion>
      <assertion number="33">

	<specref>

	  <p><span class="spectoc">Part 2 Section 5.2:
		RPC and SOAP Header</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>Additional information relevant to the encoding of an RPC
	      invocation but not part of the formal procedure or method
	      signature MAY be expressed in the RPC encoding. If so, it
	      MUST be expressed as a header block.</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>Send an RPC with some extra information in a header
	    block.<br />
	  </p>
	</tests>
      </assertion>

      <assertion number="36">
	<specref>
	  <p><span class="spectoc">Part 2 Section 5.3:
		RPC Faults</span></p>
	</specref>
	<spectext>
	  <blockquote>
        <p>Errors arising during RPC invocations are reported
        according to the following rules (in decreasing order
        of precedence):</p>

	<ol>

	  <li><p>A <code>soap-env:Server</code> fault SHOULD be
          generated when the server cannot handle the message because
          of some temporary condition, e.g. when it is out of
          memory.</p>
	  </li>

          <li>
            <p>A <code>soap-env:DataEncodingUnknown</code> fault
            SHOULD be generated when the arguments are encoded in a
            data encoding unknown to the server.</p>
          </li>


	  <li>
            <p>An <code>rpc:ProcedureNotPresent</code> fault MUST be
            generated when the server cannot find the procedure
            specified.</p>
	  </li>

	  <li>
            <p>An <code>rpc:BadArguments</code> fault MUST be
            generated when the server cannot parse the arguments or
            when there is a mismatch between what the server expects
            and what the client has sent.</p>
	  </li>

	  <li><p>Other faults arising in an extension or from the
          application SHOULD be generated as described in <a href="#SOAP-PART1">[1]</a>(<a href="soap12-part1.html#soapfault">SOAP Faults</a>).</p>
      </li>

	</ol>
	  </blockquote>
	</spectext>
	<tests>
	</tests>
      </assertion>
    </group>

    <group id="http">
      <gtitle>HTTP binding</gtitle>

      <assertion number="29">

	<specref>

	  <p><span class="spectoc">Part 2 Section 6:
		Using SOAP in HTTP</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>HTTP applications MUST use the media type "application/soap"
	      according to RFC 2376 when including SOAP messages in
	      HTTP exchanges.</p>
	  </blockquote>

	</spectext>

	<tests>

	  <p>Test that application/soap SOAP data is processed for an HTTP
	    request.</p>

	  <p>Check that HTTP response containing a SOAP message is using
	    the correct media type.</p>

	</tests>
      </assertion>
      <assertion number="30">

	<specref>

	  <p><span class="spectoc">Part 2 Section 6.1:
		SOAP HTTP Request</span></p>

	</specref>
	<spectext>

	  <blockquote>
	    <p>this binding only defines SOAP within HTTP POST
	      requests</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>If HTTP is the binding used for the tests, this will be
	    verified at each tests. Maybe check that SOAP message is
	    correctly embedded (Host header, Content-Length,
	    etc). HTTP/1.1 validity?</p>

	</comment>
	<tests>

	</tests>
      </assertion>
      <assertion number="28">

	<specref>

	  <p><span class="spectoc">Part 2 Section 6.1.1:
		The SOAPAction HTTP Header Field</span></p>

	</specref>
	<spectext>

	  <blockquote>
        <p>If a SOAP Receiver does require SOAPAction's presence in
        order to operate, it MUST respond to requests which either
        contain an unrecognised SOAPAction header value or do not
        contain a SOAPAction header with a 427 "SOAPAction Required"
        HTTP response status code. Such response messages MAY contain
        a 'Required-SOAPAction' HTTP response header field, whose value
        is the URI which can be used in the SOAPAction request header
        field to re-submit the request.</p>
	  </blockquote>

	</spectext>
	<tests>
	</tests>
      </assertion>

      <assertion number="37">

	<specref>

	  <p><span class="spectoc">Part 2 Section 6.1.1:
		The SOAPAction HTTP Header Field</span></p>

	</specref>
	<spectext>

	  <blockquote>
        <p>Support for SOAPAction is OPTIONAL in implementations.
        Implementations SHOULD NOT generate or require SOAPAction UNLESS
        they have a particular purpose for doing so (e.g., a SOAP
        Receivers specifies its use).</p>
	  </blockquote>

	</spectext>
	<comment>
	  <p>Check that SOAPAction isn't always required? "particular
	  purpose" is vague</p>
	</comment>
	<tests>
	</tests>
      </assertion>

      <assertion number="31">

	<specref>

	  <p><span class="spectoc">Part 2 Section 6.2:
		SOAP HTTP Response</span></p>

	</specref>
	<spectext>

	  <blockquote>
        <p>SOAP over HTTP follows the semantics of the HTTP Status
        codes for communicating status information in HTTP. For
        example, a 2xx status code indicates that the client's request
        including the SOAP component was successfully received,
        understood, and accepted etc.</p>

        <p>If an error occurs while processing the request, the SOAP
        HTTP server MUST issue an HTTP 500 "Internal Server Error"
        response and include a SOAP message in the response containing
        a SOAP fault (see SOAP Faults)
        indicating the SOAP processing error.</p>
	  </blockquote>

	</spectext>
	<comment>

	  <p>Get a series of tests testing different cases. Will
	  probably be covered by other tests.</p>

	</comment>
	<tests>

	</tests>
      </assertion>

    </group>
  </body>

  <changelog>
    <date>16 November 2001 (HH)</date>
    <desc>
      <p>Integrated changes made in the spec. Now in sync 2001/11/08 14:16:59
	editors' copies.</p>
    </desc>
    <date>10 October 2001 (HH)</date>
    <desc><p>New version from Oisin. Incorporated new assertions from
    the 2 October drafts.</p>
    </desc>
    <date>24 September 2001 (HH)</date>
    <desc>
      <p>Finished conversion to XML.<br />
	Grouped tests in categories.<br />
	Rewrote the boilerplate and intro to reflect face-to-face
	decision to develop this document.<br />
	Wrote some tests.</p>
    </desc>
    <date>31 July 2001 (HH)</date>
    <desc><p>Removed DA/A distinction.<br />
	Evaluation of the SB tests.<br />
	Added a references section
	for the As.</p></desc>
    <date>25 July 2001 (HH)</date>
    <desc><p>First version of the draft. Very rough.</p></desc>
  </changelog>

</testsuite>
