<head>
<title>Axis Tests That Need Writing!</title>
<link href="axis.css" rel=stylesheet type=text/css>
</head>

<body>
<h1>Testing, 1, 2, 3...</h1>

<p>Greetings, intrepid tester/developer/reader!</p>

<p>This file exists to keep track of various tests which someone needs to write for Axis
at some point.  Ideally, any time you write a piece of code in Axis, you should also write
<b>documentation</b> and <b>tests</b> for whatever functionality you work on.  Unfortunately,
we live in the real world and that doesn't always happen.  Hence, this file.</p>

<p>This is a place to keep track, in simple english descriptions, of particular tests which
need to be written.  It serves two main purposes : 1) to help us remember these things, and 2) to provide a starting point for development when people have some spare cycles or are interested in
finding some way to participate in the Axis community.</p>

<p>On to the (soon-to-be) tests:</p>

<table width=100% border=1 cellpadding=3>
  <tr> 
    <th>Name of test</th>
    <th>Description of test</th>
    <th>Developer(s)</th>
    <th>Status</th>
  </tr>
  <tr> 
    <td>SkeletonMethods</td>
    <td>confirm that the methods from the Skeleton interface are NOT exposed in 
      the generated WSDL for services.</td>
    <td>Glen</td>
    <td>none</td>
  </tr>
  <tr>
    <td>soap12.Version</td>
    <td>Test that when a service is sent a SOAP 1.2 message, we get back a SOAP 
      1.2 response.</td>
    <td>Glen</td>
    <td>none</td>
  </tr>
  <tr> 
    <td>soap12.RpcBody</td>
    <td>Test that our SOAP 1.2 RPC implementation only allows a single body element 
      (should fault otherwise).</td>
    <td>Glen</td>
    <td>none</td>
  </tr>
</table>
</body>
