You are viewing a plain text version of this content. The canonical link for it is here.
Posted to site-dev@james.apache.org by rd...@apache.org on 2008/12/02 21:06:07 UTC

svn commit: r722598 [17/36] - in /james/site/trunk/www/mpt: ./ antlib/ antlib/css/ antlib/emma/ antlib/emma/_files/ antlib/images/ antlib/xref-test/ antlib/xref-test/org/ antlib/xref-test/org/apache/ antlib/xref-test/org/apache/james/ antlib/xref-test/...

Added: james/site/trunk/www/mpt/main/emma/_files/5.html
URL: http://svn.apache.org/viewvc/james/site/trunk/www/mpt/main/emma/_files/5.html?rev=722598&view=auto
==============================================================================
--- james/site/trunk/www/mpt/main/emma/_files/5.html (added)
+++ james/site/trunk/www/mpt/main/emma/_files/5.html Tue Dec  2 12:05:59 2008
@@ -0,0 +1 @@
+<HTML><HEAD><META CONTENT="text/html; charset=UTF-8" HTTP-EQUIV="Content-Type"/><TITLE>EMMA Coverage Report</TITLE><STYLE TYPE="text/css"> TABLE,TD,TH {border-style:solid; border-color:black;} TD,TH {background:white;margin:0;line-height:100%;padding-left:0.5em;padding-right:0.5em;} TD {border-width:0 1px 0 0;} TH {border-width:1px 1px 1px 0;} TR TD.h {color:red;} TABLE {border-spacing:0; border-collapse:collapse;border-width:0 0 1px 1px;} P,H1,H2,H3,TH {font-family:verdana,arial,sans-serif;font-size:10pt;} TD {font-family:courier,monospace;font-size:10pt;} TABLE.hdft {border-spacing:0;border-collapse:collapse;border-style:none;} TABLE.hdft TH,TABLE.hdft TD {border-style:none;line-height:normal;} TABLE.hdft TH.tl,TABLE.hdft TD.tl {background:#6699CC;color:white;} TABLE.hdft TD.nv {background:#6633DD;color:white;} .nv A:link {color:white;} .nv A:visited {color:white;} .nv A:active {color:yellow;} TABLE.hdft A:link {color:white;} TABLE.hdft A:visited {color:white;} TABLE.hdft 
 A:active {color:yellow;} .in {color:#356085;} TABLE.s TD {padding-left:0.25em;padding-right:0.25em;} TABLE.s TD.l {padding-left:0.25em;padding-right:0.25em;text-align:right;background:#F0F0F0;} TABLE.s TR.z TD {background:#FF9999;} TABLE.s TR.p TD {background:#FFFF88;} TABLE.s TR.c TD {background:#CCFFCC;} A:link {color:#0000EE;text-decoration:none;} A:visited {color:#0000EE;text-decoration:none;} A:hover {color:#0000EE;text-decoration:underline;} TABLE.cn {border-width:0 0 1px 0;} TABLE.s {border-width:1px 0 1px 1px;} TD.h {color:red;border-width:0 1px 0 0;} TD.f {border-width:0 1px 0 1px;} TD.hf {color:red;border-width:0 1px 0 1px;} TH.f {border-width:1px 1px 1px 1px;} TR.cis TD {background:#F0F0F0;} TR.cis TD {border-width:1px 1px 1px 0;} TR.cis TD.h {color:red;border-width:1px 1px 1px 0;} TR.cis TD.f {border-width:1px 1px 1px 1px;} TR.cis TD.hf {color:red;border-width:1px 1px 1px 1px;} TD.b {border-style:none;background:transparent;line-height:50%;}  TD.bt {border-width:
 1px 0 0 0;background:transparent;line-height:50%;} TR.o TD {background:#F0F0F0;}TABLE.it {border-style:none;}TABLE.it TD,TABLE.it TH {border-style:none;}</STYLE></HEAD><BODY><TABLE CLASS="hdft" WIDTH="100%" CELLSPACING="0"><TR><TH CLASS="tl"><A HREF="http://emma.sourceforge.net/">EMMA</A> Coverage Report (generated Tue Dec 02 19:48:30 GMT 2008)</TH></TR><TR><TD CLASS="nv">[<A HREF="../index.html">all classes</A>][<A HREF="0.html">org.apache.james.mpt</A>]</TD></TR></TABLE><H2>COVERAGE SUMMARY FOR SOURCE FILE [<SPAN CLASS="in">ProtocolSession.java</SPAN>]</H2><TABLE WIDTH="100%" CELLSPACING="0"><TR><TH>name</TH><TH>class, %</TH><TH>method, %</TH><TH>block, %</TH><TH>line, %</TH></TR><TR><TD>ProtocolSession.java</TD><TD CLASS="h">40%  (2/5)</TD><TD CLASS="h">18%  (7/40)</TD><TD CLASS="h">14%  (105/770)</TD><TD CLASS="h">15%  (27.5/187)</TD></TR></TABLE><H3>COVERAGE BREAKDOWN BY CLASS A
 ND METHOD</H3><TABLE CLASS="cn" WIDTH="100%" CELLSPACING="0"><TR><TH CLASS="f">name</TH><TH>class, %</TH><TH>method, %</TH><TH>block, %</TH><TH>line, %</TH></TR><TR><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#0">ProtocolSession$ContinuationElement</A></TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/88)</TD><TD CLASS="h">0%   (0/23)</TD></TR><TR><TD CLASS="f"><A HREF="#0">ProtocolSession$ContinuationElement (ProtocolSession, int): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/13)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#2">isClient (): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/2)</TD><TD CLASS="h">0% �
 � (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#3">testProtocol (Session [], boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/56)</TD><TD CLASS="h">0%   (0/14)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#4">toString (): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/17)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#5">ProtocolSession$ServerResponse</A></TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/8)</TD><TD CLASS="h">0%   (0/174)</TD><TD CLASS="h">0%   (0/40)</TD></TR><TR><TD CLASS="f"><A HREF="#5">ProtocolSession$ServerResponse (ProtocolSession, String, String): void</A></TD><TD> </TD><TD CLASS="h">0% 
   (0/1)</TD><TD CLASS="h">0%   (0/8)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#7">ProtocolSession$ServerResponse (ProtocolSession, int, String, String, String)...</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/18)</TD><TD CLASS="h">0%   (0/6)</TD></TR><TR><TD CLASS="f"><A HREF="#8">checkResponse (Session, boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/47)</TD><TD CLASS="h">0%   (0/9)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#9">isClient (): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/2)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#a">match (String, String): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/6)</TD><TD CLASS="h">0
 %   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#b">readLine (Session): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/25)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR><TD CLASS="f"><A HREF="#c">testProtocol (Session [], boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/30)</TD><TD CLASS="h">0%   (0/7)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#d">toString (): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/38)</TD><TD CLASS="h">0%   (0/8)</TD></TR><TR><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#e">ProtocolSession$ServerUnorderedBlockResponse</A></TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD
  CLASS="h">0%   (0/135)</TD><TD CLASS="h">0%   (0/36)</TD></TR><TR><TD CLASS="f"><A HREF="#e">ProtocolSession$ServerUnorderedBlockResponse (ProtocolSession, List, String):...</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/8)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#10">ProtocolSession$ServerUnorderedBlockResponse (ProtocolSession, int, List, Str...</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/19)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR><TD CLASS="f"><A HREF="#11">checkResponse (Session, boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/91)</TD><TD CLASS="h">0%   (0/24)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#12">toString (): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0% Â
  Â (0/17)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#13">ProtocolSession</A></TD><TD>100% (1/1)</TD><TD CLASS="h">22%  (4/18)</TD><TD CLASS="h">23%  (68/296)</TD><TD CLASS="h">25%  (16.5/66)</TD></TR><TR><TD CLASS="f"><A HREF="#14">CL (String): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/10)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#15">CONT (int): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/16)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR><TD CLASS="f"><A HREF="#16">SL (String, String): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/11)</TD><TD CLASS="h">0
 %   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#17">SL (int, String, String, String): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/19)</TD><TD CLASS="h">0%   (0/4)</TD></TR><TR><TD CLASS="f"><A HREF="#18">SUB (List, String): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/11)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#19">SUB (int, List, String, String): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/19)</TD><TD CLASS="h">0%   (0/4)</TD></TR><TR><TD CLASS="f"><A HREF="#1a">access$0 (ProtocolSession, boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#1b">access$1 (Pro
 tocolSession, boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#1b">access$2 (ProtocolSession): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/3)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#1d">access$3 (ProtocolSession): ProtocolSession$ProtocolElement</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/3)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#1e">doContinue (): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/55)</TD><TD CLASS="h">0%   (0/15)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#1f">isContinueAfterFailure (): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS=
 "h">0%   (0/3)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#20">setContinueAfterFailure (boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#21">toString (): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/66)</TD><TD CLASS="h">0%   (0/12)</TD></TR><TR><TD CLASS="f"><A HREF="#22">CL (int, String): void</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>100% (17/17)</TD><TD>100% (3/3)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#13">ProtocolSession (): void</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>100% (17/17)</TD><TD>100% (5/5)</TD></TR><TR><TD CLASS="f"><A HREF="#24">getSessionCount (): int</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>100% (5/5)</TD><TD>100% (1/1)</TD></TR><TR CLASS="
 o"><TD CLASS="f"><A HREF="#25">runSessions (Session []): void</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>100% (29/29)</TD><TD>100% (8/8)</TD></TR><TR><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#26">ProtocolSession$ClientRequest</A></TD><TD>100% (1/1)</TD><TD CLASS="h">50%  (3/6)</TD><TD CLASS="h">48%  (37/77)</TD><TD CLASS="h">50%  (11/22)</TD></TR><TR><TD CLASS="f"><A HREF="#26">ProtocolSession$ClientRequest (ProtocolSession, String): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/6)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#28">isClient (): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/2)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f
 "><A HREF="#29">toString (): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/24)</TD><TD CLASS="h">0%   (0/6)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#2a">testProtocol (Session [], boolean): void</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>71%  (20/28)</TD><TD CLASS="h">71%  (5/7)</TD></TR><TR><TD CLASS="f"><A HREF="#2b">ProtocolSession$ClientRequest (ProtocolSession, int, String): void</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>100% (12/12)</TD><TD>100% (4/4)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#2c">writeMessage (Session): void</A></TD><TD> </TD><TD>100% (1/1)</TD><TD>100% (5/5)</TD><TD>100% (2/2)</TD></TR></TABLE><P></P><TABLE CLASS="s" WIDTH="100%" CELLSPACING="0"><TR><TD CLASS="l">1</TD><TD>/****************************************************************</TD></TR><TR><TD CLASS="l">2</TD><TD> * Licensed to the A
 pache Software Foundation (ASF) under one   *</TD></TR><TR><TD CLASS="l">3</TD><TD> * or more contributor license agreements.  See the NOTICE file *</TD></TR><TR><TD CLASS="l">4</TD><TD> * distributed with this work for additional information        *</TD></TR><TR><TD CLASS="l">5</TD><TD> * regarding copyright ownership.  The ASF licenses this file   *</TD></TR><TR><TD CLASS="l">6</TD><TD> * to you under the Apache License, Version 2.0 (the            *</TD></TR><TR><TD CLASS="l">7</TD><TD> * &#34;License&#34;); you may not use this file except in compliance   *</TD></TR><TR><TD CLASS="l">8</TD><TD> * with the License.  You may obtain a copy of the License at   *</TD></TR><T
 R><TD CLASS="l">9</TD><TD> *                                                              *</TD></TR><TR><TD CLASS="l">10</TD><TD> *   http://www.apache.org/licenses/LICENSE-2.0                 *</TD></TR><TR><TD CLASS="l">11</TD><TD> *                                                              *</TD></TR><TR><TD CLASS="l">12</TD><TD> * Unless required by applicable law or agreed to in writing,   *</TD></TR><TR><TD CLASS="l">13</TD><TD> * software distributed under the License i
 s distributed on an  *</TD></TR><TR><TD CLASS="l">14</TD><TD> * &#34;AS IS&#34; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *</TD></TR><TR><TD CLASS="l">15</TD><TD> * KIND, either express or implied.  See the License for the    *</TD></TR><TR><TD CLASS="l">16</TD><TD> * specific language governing permissions and limitations      *</TD></TR><TR><TD CLASS="l">17</TD><TD> * under the License.                                           *</TD></TR><TR><TD CLASS="l">18</TD><TD> ****************************************************************/</TD></TR><TR><TD CLASS="l">19</TD><TD> </TD></TR><TR><TD CLASS="l">20</TD><TD>package org.apache.james.mpt;</TD></TR><TR><TD CLASS="l"
 >21</TD><TD> </TD></TR><TR><TD CLASS="l">22</TD><TD>import java.io.IOException;</TD></TR><TR><TD CLASS="l">23</TD><TD>import java.util.ArrayList;</TD></TR><TR><TD CLASS="l">24</TD><TD>import java.util.Iterator;</TD></TR><TR><TD CLASS="l">25</TD><TD>import java.util.List;</TD></TR><TR><TD CLASS="l">26</TD><TD>import java.util.regex.Pattern;</TD></TR><TR><TD CLASS="l">27</TD><TD> </TD></TR><TR><TD CLASS="l">28</TD><TD> </TD></TR><TR><TD CLASS="l">29</TD><TD>/**</TD></TR><TR><TD CLASS="l">30</TD><TD> * A protocol session which can be run against a reader and writer, which checks</TD></TR><TR><TD CLASS="l">31</TD><TD> * the server response against the expected values. TODO make ProtocolSession</TD></TR><TR><TD CLASS="l">32</TD><TD> * itself be a permissible ProtocolElement, so that we can nest and reuse</TD></TR><TR><TD CLASS="l">33</TD><TD
 > * sessions.</TD></TR><TR><TD CLASS="l">34</TD><TD> * </TD></TR><TR><TD CLASS="l"><A NAME="13">35</A></TD><TD> * @author Darrell DeBoer &lt;darrell@apache.org&gt;</TD></TR><TR><TD CLASS="l"><A NAME="1b">36</A></TD><TD> * </TD></TR><TR><TD CLASS="l">37</TD><TD> * @version $Revision: 722585 $</TD></TR><TR><TD CLASS="l"><A NAME="1a">38</A></TD><TD> */</TD></TR><TR CLASS="c"><TD CLASS="l">39</TD><TD>public class ProtocolSession implements ProtocolInteractor {</TD></TR><TR CLASS="p"><TD TITLE="71% line coverage (17 out of 24 instructions)" CLASS="l">40</TD><TD TITLE="71% line coverage (17 out of 24 instructions)">    private boolean continued = false;</TD></TR><TR><TD CLASS="l">41</TD><TD> </TD></TR><TR CLASS="p"><TD TITLE="81% line coverage (17 out of 21 instructions)" CLASS="l">42</TD><TD TITLE="81% line coverage (17 out of 21 instructions)">    private boolean contin
 uationExpected = false;</TD></TR><TR><TD CLASS="l">43</TD><TD> </TD></TR><TR><TD CLASS="l">44</TD><TD>    private int maxSessionNumber;</TD></TR><TR><TD CLASS="l">45</TD><TD> </TD></TR><TR CLASS="c"><TD CLASS="l">46</TD><TD>    protected List&lt;ProtocolElement&gt; testElements = new ArrayList&lt;ProtocolElement&gt;();</TD></TR><TR><TD CLASS="l">47</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="1d">48</A></TD><TD>    private Iterator elementsIterator;</TD></TR><TR><TD CLASS="l">49</TD><TD> </TD></TR><TR><TD CLASS="l">50</TD><TD>    private Session[] sessions;</TD></TR><TR><TD CLASS="l">51</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">52</TD><TD>    private ProtocolElement nextTest;</TD></TR><TR><TD CLASS="l"><A NAME="1f">53</A></TD><TD> </TD></TR><TR CLASS="c"><TD CLASS="l">54</TD><TD>    private boolean continueAfterFailure = fal
 se;</TD></TR><TR><TD CLASS="l">55</TD><TD> </TD></TR><TR><TD CLASS="l">56</TD><TD>    public final boolean isContinueAfterFailure() {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="20">57</A></TD><TD>        return continueAfterFailure;</TD></TR><TR><TD CLASS="l">58</TD><TD>    }</TD></TR><TR><TD CLASS="l">59</TD><TD> </TD></TR><TR><TD CLASS="l">60</TD><TD>    public final void setContinueAfterFailure(boolean continueAfterFailure) {</TD></TR><TR CLASS="z"><TD CLASS="l">61</TD><TD>        this.continueAfterFailure = continueAfterFailure;</TD></TR><TR CLASS="z"><TD CLASS="l">62</TD><TD>    }</TD></TR><TR><TD CLASS="l">63</TD><TD> </TD></TR><TR><TD CLASS="l">64</TD><TD>    /**</TD></TR><TR><TD CLASS="l">65</TD><TD>     * Returns the number of sessions required to run this ProtocolSess
 ion. If</TD></TR><TR><TD CLASS="l"><A NAME="24">66</A></TD><TD>     * the number of readers and writers provided is less than this number, an</TD></TR><TR><TD CLASS="l">67</TD><TD>     * exception will occur when running the tests.</TD></TR><TR><TD CLASS="l">68</TD><TD>     */</TD></TR><TR><TD CLASS="l">69</TD><TD>    public int getSessionCount() {</TD></TR><TR CLASS="c"><TD CLASS="l">70</TD><TD>        return maxSessionNumber + 1;</TD></TR><TR><TD CLASS="l">71</TD><TD>    }</TD></TR><TR><TD CLASS="l">72</TD><TD> </TD></TR><TR><TD CLASS="l">73</TD><TD>    /**</TD></TR><TR><TD CLASS="l">74</TD><TD>     * Executes the ProtocolSession in real time against the readers and writers</TD></TR><TR><TD CLASS="l">75</TD><TD>     * supp
 lied, writing client requests and reading server responses in the</TD></TR><TR><TD CLASS="l">76</TD><TD>     * order that they appear in the test elements. The index of a reader/writer</TD></TR><TR><TD CLASS="l">77</TD><TD>     * in the array corresponds to the number of the session. If an exception</TD></TR><TR><TD CLASS="l">78</TD><TD>     * occurs, no more test elements are executed.</TD></TR><TR><TD CLASS="l">79</TD><TD>     * </TD></TR><TR><TD CLASS="l">80</TD><TD>     * @param out</TD></TR><TR><TD CLASS="l">81</TD><TD>     *            The client requests are written to here.</TD></TR><TR><TD CLASS="l"><A NAME="25">82</A></TD><TD>     * @param in</TD></TR><TR><TD CLASS="l">8
 3</TD><TD>     *            The server responses are read from here.</TD></TR><TR><TD CLASS="l">84</TD><TD>     */</TD></TR><TR><TD CLASS="l">85</TD><TD>    public void runSessions(Session[] sessions) throws Exception {</TD></TR><TR CLASS="c"><TD CLASS="l">86</TD><TD>        this.sessions = sessions;</TD></TR><TR CLASS="c"><TD CLASS="l">87</TD><TD>        elementsIterator = testElements.iterator();</TD></TR><TR CLASS="c"><TD CLASS="l">88</TD><TD>        while (elementsIterator.hasNext()) {</TD></TR><TR CLASS="c"><TD CLASS="l">89</TD><TD>            Object obj = elementsIterator.next();</TD></TR><TR CLASS="c"><TD CLASS="l">90</TD><TD>            if (obj instanceof ProtocolElement) {</
 TD></TR><TR CLASS="c"><TD CLASS="l">91</TD><TD>                ProtocolElement test = (ProtocolElement) obj;</TD></TR><TR CLASS="c"><TD CLASS="l">92</TD><TD>                test.testProtocol(sessions, continueAfterFailure);</TD></TR><TR><TD CLASS="l">93</TD><TD>            }</TD></TR><TR><TD CLASS="l">94</TD><TD>        }</TD></TR><TR CLASS="c"><TD CLASS="l"><A NAME="1e">95</A></TD><TD>    }</TD></TR><TR><TD CLASS="l">96</TD><TD> </TD></TR><TR><TD CLASS="l">97</TD><TD>    public void doContinue() {</TD></TR><TR><TD CLASS="l">98</TD><TD>        try {</TD></TR><TR CLASS="z"><TD CLASS="l">99</TD><TD>            if (continuationExpected) {</TD></TR><TR CLASS="z"><TD CLASS="l">100</TD><TD>     
            continued = true;</TD></TR><TR CLASS="z"><TD CLASS="l">101</TD><TD>                while (elementsIterator.hasNext()) {</TD></TR><TR CLASS="z"><TD CLASS="l">102</TD><TD>                    Object obj = elementsIterator.next();</TD></TR><TR CLASS="z"><TD CLASS="l">103</TD><TD>                    if (obj instanceof ProtocolElement) {</TD></TR><TR CLASS="z"><TD CLASS="l">104</TD><TD>                        nextTest = (ProtocolElement) obj;</TD></TR><TR><TD CLASS="l">105</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">106</TD><TD>                        if (!nextTest.isClient()) {
 </TD></TR><TR CLASS="z"><TD CLASS="l">107</TD><TD>                            break;</TD></TR><TR><TD CLASS="l">108</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">109</TD><TD>                        nextTest.testProtocol(sessions, continueAfterFailure);</TD></TR><TR><TD CLASS="l">110</TD><TD>                    }</TD></TR><TR><TD CLASS="l">111</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">112</TD><TD>                if (!elementsIterator.hasNext()) {</TD></TR><TR CLASS="z"><TD CLASS="l">113</TD><TD>            �
 �       nextTest = null;</TD></TR><TR><TD CLASS="l">114</TD><TD>                }</TD></TR><TR><TD CLASS="l">115</TD><TD>            } else {</TD></TR><TR CLASS="z"><TD CLASS="l">116</TD><TD>                throw new RuntimeException(&#34;Unexpected continuation&#34;);</TD></TR><TR><TD CLASS="l">117</TD><TD>            }</TD></TR><TR CLASS="z"><TD CLASS="l">118</TD><TD>        } catch (Exception e) {</TD></TR><TR CLASS="z"><TD CLASS="l">119</TD><TD>            throw new RuntimeException(e);</TD></TR><TR><TD CLASS="l">120</TD><TD>        }</TD></TR><TR CLASS="z"><TD CLASS="l">121</TD><TD>    }</TD></TR><TR><TD CLASS="l">122</TD><TD> </TD></TR><TR><TD CLAS
 S="l"><A NAME="14">123</A></TD><TD>    /* (non-Javadoc)</TD></TR><TR><TD CLASS="l">124</TD><TD>     * @see org.apache.james.mpt.ProtocolScript#CL(java.lang.String)</TD></TR><TR><TD CLASS="l">125</TD><TD>     */</TD></TR><TR><TD CLASS="l">126</TD><TD>    public void CL(String clientLine) {</TD></TR><TR CLASS="z"><TD CLASS="l">127</TD><TD>        testElements.add(new ClientRequest(clientLine));</TD></TR><TR CLASS="z"><TD CLASS="l">128</TD><TD>    }</TD></TR><TR><TD CLASS="l">129</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="16">130</A></TD><TD>    /**</TD></TR><TR><TD CLASS="l">131</TD><TD>     * @see org.apache.james.mpt.ProtocolScript#SL(java.lang.String, java.lang.String)</TD></TR><TR><TD CLASS="l">132</TD><TD>     */</TD></TR><TR><TD CLASS="l">133</TD><TD>    public void SL(String server
 Line, String location) {</TD></TR><TR CLASS="z"><TD CLASS="l">134</TD><TD>        testElements.add(new ServerResponse(serverLine, location));</TD></TR><TR CLASS="z"><TD CLASS="l">135</TD><TD>    }</TD></TR><TR><TD CLASS="l">136</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="18">137</A></TD><TD>    /**</TD></TR><TR><TD CLASS="l">138</TD><TD>     * @see org.apache.james.mpt.ProtocolScript#SUB(java.util.List, java.lang.String)</TD></TR><TR><TD CLASS="l">139</TD><TD>     */</TD></TR><TR><TD CLASS="l">140</TD><TD>    public void SUB(List&lt;String&gt; serverLines, String location) {</TD></TR><TR CLASS="z"><TD CLASS="l">141</TD><TD>        testElements</TD></TR><TR CLASS="z"><TD CLASS="l">142</TD><TD>                .add(new ServerUnorderedBlockResponse(serverLines, locati
 on));</TD></TR><TR CLASS="z"><TD CLASS="l">143</TD><TD>    }</TD></TR><TR><TD CLASS="l">144</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="22">145</A></TD><TD>    /**</TD></TR><TR><TD CLASS="l">146</TD><TD>     * @see org.apache.james.mpt.ProtocolScript#CL(int, java.lang.String)</TD></TR><TR><TD CLASS="l">147</TD><TD>     */</TD></TR><TR><TD CLASS="l">148</TD><TD>    public void CL(int sessionNumber, String clientLine) {</TD></TR><TR CLASS="c"><TD CLASS="l">149</TD><TD>        this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);</TD></TR><TR CLASS="c"><TD CLASS="l">150</TD><TD>        testElements.add(new ClientRequest(sessionNumber, clientLine));</TD></TR><TR CLASS="c"><TD CLASS="l">151</TD><TD>    }</TD></TR><TR><TD CLASS="l">152</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="15">153</
 A></TD><TD>    /**</TD></TR><TR><TD CLASS="l">154</TD><TD>     * @see org.apache.james.mpt.ProtocolScript#CONT(int)</TD></TR><TR><TD CLASS="l">155</TD><TD>     */</TD></TR><TR><TD CLASS="l">156</TD><TD>    public void CONT(int sessionNumber) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">157</TD><TD>        this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);</TD></TR><TR CLASS="z"><TD CLASS="l">158</TD><TD>        testElements.add(new ContinuationElement(sessionNumber));</TD></TR><TR CLASS="z"><TD CLASS="l">159</TD><TD>    }</TD></TR><TR><TD CLASS="l">160</TD><TD> </TD></TR><TR><TD CLASS="l">161</TD><TD>    /**</TD></TR><TR><TD CLASS="l"><A NAME="17">162</A></TD><TD>     * @see org.apache.james.mpt.ProtocolScript#SL(int, java.lang.String, java.lang.String,Â
  java.lang.String)</TD></TR><TR><TD CLASS="l">163</TD><TD>     */</TD></TR><TR><TD CLASS="l">164</TD><TD>    public void SL(int sessionNumber, String serverLine, String location,</TD></TR><TR><TD CLASS="l">165</TD><TD>            String lastClientMessage) {</TD></TR><TR CLASS="z"><TD CLASS="l">166</TD><TD>        this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);</TD></TR><TR CLASS="z"><TD CLASS="l">167</TD><TD>        testElements.add(new ServerResponse(sessionNumber, serverLine,</TD></TR><TR CLASS="z"><TD CLASS="l">168</TD><TD>                location, lastClientMessage));</TD></TR><TR CLASS="z"><TD CLASS="l">169</TD><TD>    }</TD></TR><TR><TD CLASS="l">170</TD><TD> </TD></TR><TR><TD CLASS="l">171</TD><TD>    /**</TD></TR><T
 R><TD CLASS="l"><A NAME="19">172</A></TD><TD>     * @see org.apache.james.mpt.ProtocolScript#SUB(int, java.util.List, java.lang.String, java.lang.String)</TD></TR><TR><TD CLASS="l">173</TD><TD>     */</TD></TR><TR><TD CLASS="l">174</TD><TD>    public void SUB(int sessionNumber, List&lt;String&gt; serverLines, String location,</TD></TR><TR><TD CLASS="l">175</TD><TD>            String lastClientMessage) {</TD></TR><TR CLASS="z"><TD CLASS="l">176</TD><TD>        this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);</TD></TR><TR CLASS="z"><TD CLASS="l">177</TD><TD>        testElements.add(new ServerUnorderedBlockResponse(sessionNumber,</TD></TR><TR CLASS="z"><TD CLASS="l">178</TD><TD>                serverLines, location, lastClien
 tMessage));</TD></TR><TR CLASS="z"><TD CLASS="l">179</TD><TD>    }</TD></TR><TR><TD CLASS="l">180</TD><TD> </TD></TR><TR><TD CLASS="l">181</TD><TD>    /**</TD></TR><TR><TD CLASS="l">182</TD><TD>     * A client request, which write the specified message to a Writer.</TD></TR><TR><TD CLASS="l">183</TD><TD>     */</TD></TR><TR><TD CLASS="l">184</TD><TD>    private class ClientRequest implements ProtocolElement {</TD></TR><TR><TD CLASS="l">185</TD><TD>        private int sessionNumber;</TD></TR><TR><TD CLASS="l">186</TD><TD> </TD></TR><TR><TD CLASS="l">187</TD><TD>        private String message;</TD></TR><TR><TD CLASS="l">188</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="26">189</A></TD><TD>        /**</TD></TR><TR><TD CLASS="l">190</TD><TD>        �
 �* Initialises the ClientRequest with the supplied message.</TD></TR><TR><TD CLASS="l">191</TD><TD>         */</TD></TR><TR><TD CLASS="l">192</TD><TD>        public ClientRequest(String message) {</TD></TR><TR CLASS="z"><TD CLASS="l">193</TD><TD>            this(-1, message);</TD></TR><TR CLASS="z"><TD CLASS="l">194</TD><TD>        }</TD></TR><TR><TD CLASS="l">195</TD><TD> </TD></TR><TR><TD CLASS="l">196</TD><TD>        /**</TD></TR><TR><TD CLASS="l">197</TD><TD>         * Initialises the ClientRequest, with a message and session number.</TD></TR><TR><TD CLASS="l">198</TD><TD>         * </TD></TR><TR><TD CLASS="l">199</TD><TD>         * @param sessionNumber</TD></TR><TR><TD CLASS="l">200</TD>
 <TD>         * @param message</TD></TR><TR><TD CLASS="l"><A NAME="2b">201</A></TD><TD>         */</TD></TR><TR CLASS="c"><TD CLASS="l">202</TD><TD>        public ClientRequest(int sessionNumber, String message) {</TD></TR><TR CLASS="c"><TD CLASS="l">203</TD><TD>            this.sessionNumber = sessionNumber;</TD></TR><TR CLASS="c"><TD CLASS="l">204</TD><TD>            this.message = message;</TD></TR><TR CLASS="c"><TD CLASS="l">205</TD><TD>        }</TD></TR><TR><TD CLASS="l">206</TD><TD> </TD></TR><TR><TD CLASS="l">207</TD><TD>        /**</TD></TR><TR><TD CLASS="l">208</TD><TD>         * Writes the request message to the PrintWriters. If the sessionNumber ==</TD></TR><TR><TD CLASS="l">
 209</TD><TD>         * -1, the request is written to *all* supplied writers, otherwise, only</TD></TR><TR><TD CLASS="l">210</TD><TD>         * the writer for this session is writted to.</TD></TR><TR><TD CLASS="l">211</TD><TD>         * </TD></TR><TR><TD CLASS="l"><A NAME="2a">212</A></TD><TD>         * @throws Exception</TD></TR><TR><TD CLASS="l">213</TD><TD>         */</TD></TR><TR><TD CLASS="l">214</TD><TD>        public void testProtocol(Session[] sessions,</TD></TR><TR><TD CLASS="l">215</TD><TD>                boolean continueAfterFailure) throws Exception {</TD></TR><TR CLASS="c"><TD CLASS="l">216</TD><TD>            if (sessionNumber &lt;�
 � 0) {</TD></TR><TR CLASS="c"><TD CLASS="l">217</TD><TD>                for (int i = 0; i &lt; sessions.length; i++) {</TD></TR><TR CLASS="c"><TD CLASS="l">218</TD><TD>                    Session session = sessions[i];</TD></TR><TR CLASS="c"><TD CLASS="l">219</TD><TD>                    writeMessage(session);</TD></TR><TR><TD CLASS="l">220</TD><TD>                }</TD></TR><TR><TD CLASS="l">221</TD><TD>            } else {</TD></TR><TR CLASS="z"><TD CLASS="l">222</TD><TD>                Session session = sessions[sessionNumber];</TD></TR><TR CLASS="z"><TD CLASS="l">223</TD><TD>            �
 � Â Â Â writeMessage(session);</TD></TR><TR><TD CLASS="l"><A NAME="2c">224</A></TD><TD>            }</TD></TR><TR CLASS="c"><TD CLASS="l">225</TD><TD>        }</TD></TR><TR><TD CLASS="l">226</TD><TD> </TD></TR><TR><TD CLASS="l">227</TD><TD>        private void writeMessage(Session session) throws Exception {</TD></TR><TR CLASS="c"><TD CLASS="l"><A NAME="28">228</A></TD><TD>            session.writeLine(message);</TD></TR><TR CLASS="c"><TD CLASS="l">229</TD><TD>        }</TD></TR><TR><TD CLASS="l">230</TD><TD> </TD></TR><TR><TD CLASS="l">231</TD><TD>        public boolean isClient() {</TD></TR><TR CLASS="z"><TD CLASS="l">232</TD><TD>            return true;</TD></TR><TR><TD CLASS="l">233</TD><TD>        }</TD>
 </TR><TR><TD CLASS="l">234</TD><TD> </TD></TR><TR><TD CLASS="l">235</TD><TD>        /**</TD></TR><TR><TD CLASS="l">236</TD><TD>         * Constructs a &lt;code&gt;String&lt;/code&gt; with all attributes</TD></TR><TR><TD CLASS="l">237</TD><TD>         * in name = value format.</TD></TR><TR><TD CLASS="l">238</TD><TD>         *</TD></TR><TR><TD CLASS="l">239</TD><TD>         * @return a &lt;code&gt;String&lt;/code&gt; representation </TD></TR><TR><TD CLASS="l"><A NAME="29">240</A></TD><TD>         * of this object.</TD></TR><TR><TD CLASS="l">241</TD><TD>         */</TD></TR><TR><TD CLASS="l">242</TD><TD>        public String toString()</TD></TR><TR><TD CLASS="l">243</TD><TD>        {
 </TD></TR><TR CLASS="z"><TD CLASS="l">244</TD><TD>            final String TAB = &#34; &#34;;</TD></TR><TR><TD CLASS="l">245</TD><TD>            </TD></TR><TR CLASS="z"><TD CLASS="l">246</TD><TD>            String retValue = &#34;ClientRequest ( &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">247</TD><TD>                + &#34;sessionNumber = &#34; + this.sessionNumber + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">248</TD><TD>                + &#34;message = &#34; + this.message + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">249</TD><TD>                + &#34; )&#34;;</TD></TR><TR><TD CLASS="l">250</TD><TD>        </TD></TR><TR CLASS="z"><
 TD CLASS="l">251</TD><TD>            return retValue;</TD></TR><TR><TD CLASS="l">252</TD><TD>        }</TD></TR><TR><TD CLASS="l">253</TD><TD>        </TD></TR><TR><TD CLASS="l">254</TD><TD>        </TD></TR><TR><TD CLASS="l">255</TD><TD>    }</TD></TR><TR><TD CLASS="l">256</TD><TD> </TD></TR><TR><TD CLASS="l">257</TD><TD>    /**</TD></TR><TR><TD CLASS="l">258</TD><TD>     * Represents a single-line server response, which reads a line from a</TD></TR><TR><TD CLASS="l">259</TD><TD>     * reader, and compares it with the defined regular expression definition of</TD></TR><TR><TD CLASS="l">260</TD><TD>     * this line.</TD></TR><TR><TD CLASS="l">261</TD><TD>     */</TD></TR><TR><TD CLASS="l">262</TD><TD>  Â
  Â private class ServerResponse implements ProtocolElement {</TD></TR><TR><TD CLASS="l">263</TD><TD>        private String lastClientMessage;</TD></TR><TR><TD CLASS="l">264</TD><TD> </TD></TR><TR><TD CLASS="l">265</TD><TD>        private int sessionNumber;</TD></TR><TR><TD CLASS="l">266</TD><TD> </TD></TR><TR><TD CLASS="l">267</TD><TD>        private String expectedLine;</TD></TR><TR><TD CLASS="l">268</TD><TD> </TD></TR><TR><TD CLASS="l">269</TD><TD>        protected String location;</TD></TR><TR><TD CLASS="l">270</TD><TD> </TD></TR><TR><TD CLASS="l">271</TD><TD>        /**</TD></TR><TR><TD CLASS="l">272</TD><TD>         * Sets up a server response.</TD></TR><TR><TD CLASS="l">273</TD><TD>         * </TD></TR><TR><TD CLASS="l">274</TD
 ><TD>         * @param expectedPattern</TD></TR><TR><TD CLASS="l">275</TD><TD>         *            A Perl regular expression pattern used to test the line</TD></TR><TR><TD CLASS="l">276</TD><TD>         *            recieved.</TD></TR><TR><TD CLASS="l"><A NAME="5">277</A></TD><TD>         * @param location</TD></TR><TR><TD CLASS="l">278</TD><TD>         *            A descriptive value to use in error messages.</TD></TR><TR><TD CLASS="l">279</TD><TD>         */</TD></TR><TR><TD CLASS="l">280</TD><TD>        public ServerResponse(String expectedPattern, String location) {</TD></TR><TR CLASS="z"><TD CLASS="l">281<
 /TD><TD>            this(-1, expectedPattern, location, null);</TD></TR><TR CLASS="z"><TD CLASS="l">282</TD><TD>        }</TD></TR><TR><TD CLASS="l">283</TD><TD> </TD></TR><TR><TD CLASS="l">284</TD><TD>        /**</TD></TR><TR><TD CLASS="l">285</TD><TD>         * Sets up a server response.</TD></TR><TR><TD CLASS="l">286</TD><TD>         * </TD></TR><TR><TD CLASS="l">287</TD><TD>         * @param sessionNumber</TD></TR><TR><TD CLASS="l">288</TD><TD>         *            The number of session for a multi-session test</TD></TR><TR><TD CLASS="l">289</TD><TD>         * @param expectedPattern</TD></TR><TR><TD CLASS="l">290</TD><TD>         *�
 � Â Â Â Â Â Â Â Â Â Â Â A Perl regular expression pattern used to test the line</TD></TR><TR><TD CLASS="l">291</TD><TD>         *            recieved.</TD></TR><TR><TD CLASS="l">292</TD><TD>         * @param location</TD></TR><TR><TD CLASS="l">293</TD><TD>         *            A descriptive value to use in error messages.</TD></TR><TR><TD CLASS="l">294</TD><TD>         */</TD></TR><TR CLASS="z"><TD CLASS="l">295</TD><TD>        public ServerResponse(int sessionNumber, String expectedPattern,</TD></TR><TR><TD CLASS="l">296</TD><TD>                String location, String lastClientMessage) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A
  NAME="7">297</A></TD><TD>            this.sessionNumber = sessionNumber;</TD></TR><TR CLASS="z"><TD CLASS="l">298</TD><TD>            this.expectedLine = expectedPattern;</TD></TR><TR CLASS="z"><TD CLASS="l">299</TD><TD>            this.location = location;</TD></TR><TR CLASS="z"><TD CLASS="l">300</TD><TD>            this.lastClientMessage = lastClientMessage;</TD></TR><TR CLASS="z"><TD CLASS="l">301</TD><TD>        }</TD></TR><TR><TD CLASS="l">302</TD><TD> </TD></TR><TR><TD CLASS="l">303</TD><TD>        /**</TD></TR><TR><TD CLASS="l">304</TD><TD>         * Reads a line from the supplied reader, and tests that it matches the</TD></TR><TR><TD CLASS="l">305</TD><TD>       �
 � * expected regular expression. If the sessionNumber == -1, then all</TD></TR><TR><TD CLASS="l">306</TD><TD>         * readers are tested, otherwise, only the reader for this session is</TD></TR><TR><TD CLASS="l">307</TD><TD>         * tested.</TD></TR><TR><TD CLASS="l">308</TD><TD>         * </TD></TR><TR><TD CLASS="l">309</TD><TD>         * @param out</TD></TR><TR><TD CLASS="l">310</TD><TD>         *            Is ignored.</TD></TR><TR><TD CLASS="l">311</TD><TD>         * @param in</TD></TR><TR><TD CLASS="l">312</TD><TD>         *            The server response is read from here.</TD></TR><TR><TD CLASS="l">313</T
 D><TD>         * @throws InvalidServerResponseException</TD></TR><TR><TD CLASS="l">314</TD><TD>         *             If the actual server response didn't match the regular</TD></TR><TR><TD CLASS="l"><A NAME="c">315</A></TD><TD>         *             expression expected.</TD></TR><TR><TD CLASS="l">316</TD><TD>         */</TD></TR><TR><TD CLASS="l">317</TD><TD>        public void testProtocol(Session[] sessions,</TD></TR><TR><TD CLASS="l">318</TD><TD>                boolean continueAfterFailure) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">319</TD><TD>            if (sessionNumber &lt; 0) {</TD></TR><TR CLASS="z
 "><TD CLASS="l">320</TD><TD>                for (int i = 0; i &lt; sessions.length; i++) {</TD></TR><TR CLASS="z"><TD CLASS="l">321</TD><TD>                    Session session = sessions[i];</TD></TR><TR CLASS="z"><TD CLASS="l">322</TD><TD>                    checkResponse(session, continueAfterFailure);</TD></TR><TR><TD CLASS="l">323</TD><TD>                }</TD></TR><TR><TD CLASS="l">324</TD><TD>            } else {</TD></TR><TR CLASS="z"><TD CLASS="l">325</TD><TD>                Session session = sessions[sessionNumber];</TD></TR><TR CLASS="z"><TD CLASS="l">326</TD><TD>             �
 �  checkResponse(session, continueAfterFailure);</TD></TR><TR><TD CLASS="l">327</TD><TD>            }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="8">328</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">329</TD><TD> </TD></TR><TR><TD CLASS="l">330</TD><TD>        protected void checkResponse(Session session,</TD></TR><TR><TD CLASS="l">331</TD><TD>                boolean continueAfterFailure) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">332</TD><TD>            String testLine = readLine(session);</TD></TR><TR CLASS="z"><TD CLASS="l">333</TD><TD>            if (!match(expectedLine, testLine)) {</TD></TR><TR CLASS="z"><TD CLASS="l">334</TD><TD>                String�
 �errMsg = &#34;\nLocation: &#34; + location + &#34;\nLastClientMsg: &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">335</TD><TD>                        + lastClientMessage + &#34;\nExpected: '&#34; + expectedLine</TD></TR><TR CLASS="z"><TD CLASS="l">336</TD><TD>                        + &#34;'\nActual   : '&#34; + testLine + &#34;'&#34;;</TD></TR><TR CLASS="z"><TD CLASS="l">337</TD><TD>                if (continueAfterFailure) {</TD></TR><TR CLASS="z"><TD CLASS="l">338</TD><TD>                    System.out.println(errMsg);</TD></TR><TR><TD CLASS="l">339</TD><TD>                } else {</TD></TR><TR CLASS=
 "z"><TD CLASS="l">340</TD><TD>                    throw new InvalidServerResponseException(errMsg);</TD></TR><TR><TD CLASS="l">341</TD><TD>                }</TD></TR><TR><TD CLASS="l">342</TD><TD>            }</TD></TR><TR CLASS="z"><TD CLASS="l">343</TD><TD>        }</TD></TR><TR><TD CLASS="l">344</TD><TD> </TD></TR><TR><TD CLASS="l">345</TD><TD>        /**</TD></TR><TR><TD CLASS="l">346</TD><TD>         * A convenience method which returns true if the actual string matches</TD></TR><TR><TD CLASS="l">347</TD><TD>         * the expected regular expression.</TD></TR><TR><TD CLASS="l">348</TD><TD>         * </TD></TR><TR><TD CLASS="l">349</TD><TD> Â
  Â Â Â Â Â Â Â * @param expected</TD></TR><TR><TD CLASS="l">350</TD><TD>         *            The regular expression used for matching.</TD></TR><TR><TD CLASS="l">351</TD><TD>         * @param actual</TD></TR><TR><TD CLASS="l"><A NAME="a">352</A></TD><TD>         *            The actual message to match.</TD></TR><TR><TD CLASS="l">353</TD><TD>         * @return &lt;code&gt;true&lt;/code&gt; if the actual matches the expected.</TD></TR><TR><TD CLASS="l">354</TD><TD>         */</TD></TR><TR><TD CLASS="l">355</TD><TD>        protected boolean match(String expected, String actual) {</TD></TR><TR CLASS="z"><TD CLASS="l">356</TD><TD>      Â�
 �     final boolean result = Pattern.matches(expected, actual);</TD></TR><TR CLASS="z"><TD CLASS="l">357</TD><TD>            return result;</TD></TR><TR><TD CLASS="l">358</TD><TD>        }</TD></TR><TR><TD CLASS="l">359</TD><TD> </TD></TR><TR><TD CLASS="l">360</TD><TD>        /**</TD></TR><TR><TD CLASS="l">361</TD><TD>         * Grabs a line from the server and throws an error message if it</TD></TR><TR><TD CLASS="l">362</TD><TD>         * doesn't work out</TD></TR><TR><TD CLASS="l">363</TD><TD>         * </TD></TR><TR><TD CLASS="l"><A NAME="b">364</A></TD><TD>         * @return String of the line from the server</TD></TR><TR><TD CLASS="l">365</TD><TD>      Â
  Â Â */</TD></TR><TR><TD CLASS="l">366</TD><TD>        protected String readLine(Session session) throws Exception {</TD></TR><TR><TD CLASS="l">367</TD><TD>            try {</TD></TR><TR CLASS="z"><TD CLASS="l">368</TD><TD>                return session.readLine();</TD></TR><TR CLASS="z"><TD CLASS="l">369</TD><TD>            } catch (IOException e) {</TD></TR><TR CLASS="z"><TD CLASS="l">370</TD><TD>                String errMsg = &#34;\nLocation: &#34; + location + &#34;\nExpected: &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">371</TD><TD>                        + expectedLine + &#34;\nReason: Server Timeout.&#34;;</TD></TR><TR CLASS="z"
 ><TD CLASS="l">372</TD><TD>                throw new InvalidServerResponseException(errMsg);</TD></TR><TR><TD CLASS="l"><A NAME="9">373</A></TD><TD>            }</TD></TR><TR><TD CLASS="l">374</TD><TD>        }</TD></TR><TR><TD CLASS="l">375</TD><TD> </TD></TR><TR><TD CLASS="l">376</TD><TD>        public boolean isClient() {</TD></TR><TR CLASS="z"><TD CLASS="l">377</TD><TD>            return false;</TD></TR><TR><TD CLASS="l">378</TD><TD>        }</TD></TR><TR><TD CLASS="l">379</TD><TD> </TD></TR><TR><TD CLASS="l">380</TD><TD>        /**</TD></TR><TR><TD CLASS="l">381</TD><TD>         * Constructs a &lt;code&gt;String&lt;/code&gt; with all attributes</TD></TR><TR><TD CLASS="l">382</TD><TD> �
 �       * in name = value format.</TD></TR><TR><TD CLASS="l">383</TD><TD>         *</TD></TR><TR><TD CLASS="l">384</TD><TD>         * @return a &lt;code&gt;String&lt;/code&gt; representation </TD></TR><TR><TD CLASS="l"><A NAME="d">385</A></TD><TD>         * of this object.</TD></TR><TR><TD CLASS="l">386</TD><TD>         */</TD></TR><TR><TD CLASS="l">387</TD><TD>        public String toString()</TD></TR><TR><TD CLASS="l">388</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">389</TD><TD>            final String TAB = &#34; &#34;;</TD></TR><TR><TD CLASS="l">390</TD><TD>            </TD></TR><TR CLASS="z"><TD CLASS="l">391</TD><TD>          
   String result = &#34;ServerResponse ( &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">392</TD><TD>                + &#34;lastClientMessage = &#34; + this.lastClientMessage + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">393</TD><TD>                + &#34;sessionNumber = &#34; + this.sessionNumber + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">394</TD><TD>                + &#34;expectedLine = &#34; + this.expectedLine + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">395</TD><TD>                + &#34;location = &#34; + this.location + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">396</TD><TD>                + &#34; )&#34;;</TD></TR><TR><TD CLASS="l">397<
 /TD><TD>        </TD></TR><TR CLASS="z"><TD CLASS="l">398</TD><TD>            return result;</TD></TR><TR><TD CLASS="l">399</TD><TD>        }</TD></TR><TR><TD CLASS="l">400</TD><TD>        </TD></TR><TR><TD CLASS="l">401</TD><TD>        </TD></TR><TR><TD CLASS="l">402</TD><TD>    }</TD></TR><TR><TD CLASS="l">403</TD><TD> </TD></TR><TR><TD CLASS="l">404</TD><TD>    /**</TD></TR><TR><TD CLASS="l">405</TD><TD>     * Represents a set of lines which must be recieved from the server, in a</TD></TR><TR><TD CLASS="l">406</TD><TD>     * non-specified order.</TD></TR><TR><TD CLASS="l">407</TD><TD>     */</TD></TR><TR><TD CLASS="l">408</TD><TD>    private class ServerUnorderedBlockResponse extends ServerResponse
  {</TD></TR><TR CLASS="z"><TD CLASS="l">409</TD><TD>        private List&lt;String&gt; expectedLines = new ArrayList&lt;String&gt;();</TD></TR><TR><TD CLASS="l">410</TD><TD> </TD></TR><TR><TD CLASS="l">411</TD><TD>        /**</TD></TR><TR><TD CLASS="l">412</TD><TD>         * Sets up a ServerUnorderedBlockResponse with the list of expected</TD></TR><TR><TD CLASS="l">413</TD><TD>         * lines.</TD></TR><TR><TD CLASS="l">414</TD><TD>         * </TD></TR><TR><TD CLASS="l">415</TD><TD>         * @param expectedLines</TD></TR><TR><TD CLASS="l">416</TD><TD>         *            A list containing a reqular expression for each expected</TD></TR><TR><TD CLASS="l">417</TD><TD>  �
 � Â Â Â Â Â Â *            line.</TD></TR><TR><TD CLASS="l"><A NAME="e">418</A></TD><TD>         * @param location</TD></TR><TR><TD CLASS="l">419</TD><TD>         *            A descriptive location string for error messages.</TD></TR><TR><TD CLASS="l">420</TD><TD>         */</TD></TR><TR><TD CLASS="l">421</TD><TD>        public ServerUnorderedBlockResponse(List&lt;String&gt; expectedLines, String location) {</TD></TR><TR CLASS="z"><TD CLASS="l">422</TD><TD>            this(-1, expectedLines, location, null);</TD></TR><TR CLASS="z"><TD CLASS="l">423</TD><TD>        }</TD></TR><TR><TD CLASS="l">424</TD><TD> </TD></TR><TR><TD CLASS="l">425</TD><TD>        /*
 *</TD></TR><TR><TD CLASS="l">426</TD><TD>         * Sets up a ServerUnorderedBlockResponse with the list of expected</TD></TR><TR><TD CLASS="l">427</TD><TD>         * lines.</TD></TR><TR><TD CLASS="l">428</TD><TD>         * </TD></TR><TR><TD CLASS="l">429</TD><TD>         * @param sessionNumber</TD></TR><TR><TD CLASS="l">430</TD><TD>         *            The number of the session to expect this block, for a</TD></TR><TR><TD CLASS="l">431</TD><TD>         *            multi-session test.</TD></TR><TR><TD CLASS="l">432</TD><TD>         * @param expectedLines</TD></TR><TR><TD CLASS="l">433</TD><TD>         *  �
 �         A list containing a reqular expression for each expected</TD></TR><TR><TD CLASS="l">434</TD><TD>         *            line.</TD></TR><TR><TD CLASS="l">435</TD><TD>         * @param location</TD></TR><TR><TD CLASS="l">436</TD><TD>         *            A descriptive location string for error messages.</TD></TR><TR><TD CLASS="l">437</TD><TD>         */</TD></TR><TR><TD CLASS="l">438</TD><TD>        public ServerUnorderedBlockResponse(int sessionNumber,</TD></TR><TR><TD CLASS="l"><A NAME="10">439</A></TD><TD>                List&lt;String&gt; expectedLines, String location, String lastClientMessage) {</TD></TR><TR CLASS="z">
 <TD CLASS="l">440</TD><TD>            super(sessionNumber, &#34;&lt;Unordered Block&gt;&#34;, location,</TD></TR><TR CLASS="z"><TD CLASS="l">441</TD><TD>                    lastClientMessage);</TD></TR><TR CLASS="z"><TD CLASS="l">442</TD><TD>            this.expectedLines = expectedLines;</TD></TR><TR CLASS="z"><TD CLASS="l">443</TD><TD>        }</TD></TR><TR><TD CLASS="l">444</TD><TD> </TD></TR><TR><TD CLASS="l">445</TD><TD>        /**</TD></TR><TR><TD CLASS="l">446</TD><TD>         * Reads lines from the server response and matches them against the</TD></TR><TR><TD CLASS="l">447</TD><TD>         * list of expected regular expressions. Each regular expression in th
 e</TD></TR><TR><TD CLASS="l">448</TD><TD>         * expected list must be matched by only one server response line.</TD></TR><TR><TD CLASS="l">449</TD><TD>         * </TD></TR><TR><TD CLASS="l">450</TD><TD>         * @param reader</TD></TR><TR><TD CLASS="l">451</TD><TD>         *            Server responses are read from here.</TD></TR><TR><TD CLASS="l">452</TD><TD>         * @throws InvalidServerResponseException</TD></TR><TR><TD CLASS="l">453</TD><TD>         *             If a line is encountered which doesn't match one of the</TD></TR><TR><TD CLASS="l"><A NAME="11">454</A></TD><TD>         *       Â
  Â Â Â Â Â expected lines.</TD></TR><TR><TD CLASS="l">455</TD><TD>         */</TD></TR><TR><TD CLASS="l">456</TD><TD>        protected void checkResponse(Session session,</TD></TR><TR><TD CLASS="l">457</TD><TD>                boolean continueAfterFailure) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">458</TD><TD>            List&lt;String&gt; testLines = new ArrayList&lt;String&gt;(expectedLines);</TD></TR><TR CLASS="z"><TD CLASS="l">459</TD><TD>            while (testLines.size() &gt; 0) {</TD></TR><TR CLASS="z"><TD CLASS="l">460</TD><TD>                String actualLine = readLine(session);</TD></TR><TR><TD CLASS="l">461</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">462</TD><TD
 >                boolean foundMatch = false;</TD></TR><TR CLASS="z"><TD CLASS="l">463</TD><TD>                for (int i = 0; i &lt; testLines.size(); i++) {</TD></TR><TR CLASS="z"><TD CLASS="l">464</TD><TD>                    String expected = (String) testLines.get(i);</TD></TR><TR CLASS="z"><TD CLASS="l">465</TD><TD>                    if (match(expected, actualLine)) {</TD></TR><TR CLASS="z"><TD CLASS="l">466</TD><TD>                        foundMatch = true;</TD></TR><TR CLASS="z"><TD CLASS="l">467</TD><TD>                        testLines.remove(expected
 );</TD></TR><TR CLASS="z"><TD CLASS="l">468</TD><TD>                        break;</TD></TR><TR><TD CLASS="l">469</TD><TD>                    }</TD></TR><TR><TD CLASS="l">470</TD><TD>                }</TD></TR><TR><TD CLASS="l">471</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">472</TD><TD>                if (!foundMatch) {</TD></TR><TR CLASS="z"><TD CLASS="l">473</TD><TD>                    StringBuffer errMsg = new StringBuffer().append(</TD></TR><TR CLASS="z"><TD CLASS="l">474</TD><TD>                            &#34;\nLocation: &#34;).append(location).append(</TD></TR><TR CLASS="z">
 <TD CLASS="l">475</TD><TD>                            &#34;\nExpected one of: &#34;);</TD></TR><TR CLASS="z"><TD CLASS="l">476</TD><TD>                    Iterator iter = expectedLines.iterator();</TD></TR><TR CLASS="z"><TD CLASS="l">477</TD><TD>                    while (iter.hasNext()) {</TD></TR><TR CLASS="z"><TD CLASS="l">478</TD><TD>                        errMsg.append(&#34;\n    &#34;);</TD></TR><TR CLASS="z"><TD CLASS="l">479</TD><TD>                        errMsg.append(iter.next());</TD></TR><TR><TD CLASS="l">480</TD><TD>                 
    }</TD></TR><TR CLASS="z"><TD CLASS="l">481</TD><TD>                    errMsg.append(&#34;\nActual: &#34;).append(actualLine);</TD></TR><TR CLASS="z"><TD CLASS="l">482</TD><TD>                    if (continueAfterFailure) {</TD></TR><TR CLASS="z"><TD CLASS="l">483</TD><TD>                        System.out.println(errMsg.toString());</TD></TR><TR><TD CLASS="l">484</TD><TD>                    } else {</TD></TR><TR CLASS="z"><TD CLASS="l">485</TD><TD>                        throw new InvalidServerResponseException(errMsg</TD></TR><TR CLASS="z"><TD CLASS="l">486</TD><TD>              Â
  Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â .toString());</TD></TR><TR><TD CLASS="l">487</TD><TD>                    }</TD></TR><TR><TD CLASS="l">488</TD><TD>                }</TD></TR><TR><TD CLASS="l">489</TD><TD>            }</TD></TR><TR CLASS="z"><TD CLASS="l">490</TD><TD>        }</TD></TR><TR><TD CLASS="l">491</TD><TD> </TD></TR><TR><TD CLASS="l">492</TD><TD>        /**</TD></TR><TR><TD CLASS="l">493</TD><TD>         * Constructs a &lt;code&gt;String&lt;/code&gt; with all attributes</TD></TR><TR><TD CLASS="l">494</TD><TD>         * in name = value format.</TD></TR><TR><TD CLASS="l">495</TD><TD>         *</TD></TR><TR><TD CLASS="l">496</TD>
 <TD>         * @return a &lt;code&gt;String&lt;/code&gt; representation </TD></TR><TR><TD CLASS="l"><A NAME="12">497</A></TD><TD>         * of this object.</TD></TR><TR><TD CLASS="l">498</TD><TD>         */</TD></TR><TR><TD CLASS="l">499</TD><TD>        public String toString()</TD></TR><TR><TD CLASS="l">500</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">501</TD><TD>            final String TAB = &#34; &#34;;</TD></TR><TR><TD CLASS="l">502</TD><TD>            </TD></TR><TR CLASS="z"><TD CLASS="l">503</TD><TD>            String result = &#34;ServerUnorderedBlockResponse ( &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">504</TD><TD>            �
 �   + &#34;expectedLines = &#34; + this.expectedLines + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">505</TD><TD>                + &#34; )&#34;;</TD></TR><TR><TD CLASS="l">506</TD><TD>        </TD></TR><TR CLASS="z"><TD CLASS="l">507</TD><TD>            return result;</TD></TR><TR><TD CLASS="l">508</TD><TD>        }</TD></TR><TR><TD CLASS="l">509</TD><TD>        </TD></TR><TR><TD CLASS="l">510</TD><TD>        </TD></TR><TR><TD CLASS="l">511</TD><TD>    }</TD></TR><TR><TD CLASS="l">512</TD><TD> </TD></TR><TR><TD CLASS="l">513</TD><TD>    private class ContinuationElement implements ProtocolElement {</TD></TR><TR><TD CLASS="l">514</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="0">515</A></TD><TD>      �
 � private final int sessionNumber;</TD></TR><TR><TD CLASS="l">516</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">517</TD><TD>        public ContinuationElement(final int sessionNumber) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">518</TD><TD>            this.sessionNumber = sessionNumber &lt; 0 ? 0 : sessionNumber;</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="3">519</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">520</TD><TD> </TD></TR><TR><TD CLASS="l">521</TD><TD>        public void testProtocol(Session[] sessions,</TD></TR><TR><TD CLASS="l">522</TD><TD>                boolean continueAfterFailure) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">523</TD><TD>            Session sess
 ion = sessions[sessionNumber];</TD></TR><TR CLASS="z"><TD CLASS="l">524</TD><TD>            continuationExpected = true;</TD></TR><TR CLASS="z"><TD CLASS="l">525</TD><TD>            continued = false;</TD></TR><TR CLASS="z"><TD CLASS="l">526</TD><TD>            String testLine = session.readLine();</TD></TR><TR CLASS="z"><TD CLASS="l">527</TD><TD>            if (!&#34;+&#34;.equals(testLine) || !continued) {</TD></TR><TR CLASS="z"><TD CLASS="l">528</TD><TD>                final String message = &#34;Expected continuation&#34;;</TD></TR><TR CLASS="z"><TD CLASS="l">529</TD><TD>                if (continueAfterFailure) {</TD></TR><TR CLASS="z"><TD CLASS="l">530</TD><TD>   Â
  Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â System.out.print(message);</TD></TR><TR><TD CLASS="l">531</TD><TD>                } else {</TD></TR><TR CLASS="z"><TD CLASS="l">532</TD><TD>                    throw new InvalidServerResponseException(message);</TD></TR><TR><TD CLASS="l">533</TD><TD>                }</TD></TR><TR><TD CLASS="l">534</TD><TD>            }</TD></TR><TR CLASS="z"><TD CLASS="l">535</TD><TD>            continuationExpected = false;</TD></TR><TR CLASS="z"><TD CLASS="l">536</TD><TD>            continued = false;</TD></TR><TR><TD CLASS="l">537</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">538</TD><TD>            if
  (nextTest != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">539</TD><TD>                nextTest.testProtocol(sessions, continueAfterFailure);</TD></TR><TR><TD CLASS="l"><A NAME="2">540</A></TD><TD>            }</TD></TR><TR CLASS="z"><TD CLASS="l">541</TD><TD>        }</TD></TR><TR><TD CLASS="l">542</TD><TD> </TD></TR><TR><TD CLASS="l">543</TD><TD>        public boolean isClient() {</TD></TR><TR CLASS="z"><TD CLASS="l">544</TD><TD>            return false;</TD></TR><TR><TD CLASS="l">545</TD><TD>        }</TD></TR><TR><TD CLASS="l">546</TD><TD> </TD></TR><TR><TD CLASS="l">547</TD><TD>        /**</TD></TR><TR><TD CLASS="l">548</TD><TD>         * Constructs a &lt;code&gt;String&lt;/code&gt; with
  all attributes</TD></TR><TR><TD CLASS="l">549</TD><TD>         * in name = value format.</TD></TR><TR><TD CLASS="l">550</TD><TD>         *</TD></TR><TR><TD CLASS="l">551</TD><TD>         * @return a &lt;code&gt;String&lt;/code&gt; representation </TD></TR><TR><TD CLASS="l"><A NAME="4">552</A></TD><TD>         * of this object.</TD></TR><TR><TD CLASS="l">553</TD><TD>         */</TD></TR><TR><TD CLASS="l">554</TD><TD>        public String toString()</TD></TR><TR><TD CLASS="l">555</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">556</TD><TD>            final String TAB = &#34; &#34;;</TD></TR><TR><TD CLASS="l">557</TD><TD>            </TD></TR><TR CLASS="z
 "><TD CLASS="l">558</TD><TD>            String result = &#34;ContinuationElement ( &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">559</TD><TD>                + &#34;sessionNumber = &#34; + this.sessionNumber + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">560</TD><TD>                + &#34; )&#34;;</TD></TR><TR><TD CLASS="l">561</TD><TD>        </TD></TR><TR CLASS="z"><TD CLASS="l">562</TD><TD>            return result;</TD></TR><TR><TD CLASS="l">563</TD><TD>        }</TD></TR><TR><TD CLASS="l">564</TD><TD>        </TD></TR><TR><TD CLASS="l">565</TD><TD>        </TD></TR><TR><TD CLASS="l">566</TD><TD>    }</TD></TR><TR><TD CLASS="l">567</TD><TD> </TD></TR><TR><TD CL
 ASS="l">568</TD><TD>    /**</TD></TR><TR><TD CLASS="l">569</TD><TD>     * Represents a generic protocol element, which may write requests to the</TD></TR><TR><TD CLASS="l">570</TD><TD>     * server, read responses from the server, or both. Implementations should</TD></TR><TR><TD CLASS="l">571</TD><TD>     * test the server response against an expected response, and throw an</TD></TR><TR><TD CLASS="l">572</TD><TD>     * exception on mismatch.</TD></TR><TR><TD CLASS="l">573</TD><TD>     */</TD></TR><TR><TD CLASS="l">574</TD><TD>    private interface ProtocolElement {</TD></TR><TR><TD CLASS="l">575</TD><TD>        /**</TD></TR><TR><TD CLASS="l">576</TD><TD>         * Executes the ProtocolElement against 
 the supplied session.</TD></TR><TR><TD CLASS="l">577</TD><TD>         * </TD></TR><TR><TD CLASS="l">578</TD><TD>         * @param continueAfterFailure</TD></TR><TR><TD CLASS="l">579</TD><TD>         *            TODO</TD></TR><TR><TD CLASS="l">580</TD><TD>         * @throws Exception</TD></TR><TR><TD CLASS="l">581</TD><TD>         */</TD></TR><TR><TD CLASS="l">582</TD><TD>        void testProtocol(Session[] sessions,</TD></TR><TR><TD CLASS="l">583</TD><TD>                boolean continueAfterFailure) throws Exception;</TD></TR><TR><TD CLASS="l">584</TD><TD> </TD></TR><TR><TD CLASS="l">585</TD><TD>        boolean isClient();</TD></TR><TR><TD CLASS="l">586</TD><TD>  �
 � Â }</TD></TR><TR><TD CLASS="l">587</TD><TD> </TD></TR><TR><TD CLASS="l">588</TD><TD>    /**</TD></TR><TR><TD CLASS="l">589</TD><TD>     * Constructs a &lt;code&gt;String&lt;/code&gt; with all attributes</TD></TR><TR><TD CLASS="l">590</TD><TD>     * in name = value format.</TD></TR><TR><TD CLASS="l">591</TD><TD>     *</TD></TR><TR><TD CLASS="l">592</TD><TD>     * @return a &lt;code&gt;String&lt;/code&gt; representation </TD></TR><TR><TD CLASS="l"><A NAME="21">593</A></TD><TD>     * of this object.</TD></TR><TR><TD CLASS="l">594</TD><TD>     */</TD></TR><TR><TD CLASS="l">595</TD><TD>    public String toString()</TD></TR><TR><TD CLASS="l">596</TD><TD>    {</TD></TR><TR CLASS="z"><TD CLASS="l">597</TD><TD>        final String TAB = &#34; &#34;;</T
 D></TR><TR><TD CLASS="l">598</TD><TD>        </TD></TR><TR CLASS="z"><TD CLASS="l">599</TD><TD>        String result  = &#34;ProtocolSession ( &#34;</TD></TR><TR CLASS="z"><TD CLASS="l">600</TD><TD>            + &#34;continued = &#34; + this.continued + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">601</TD><TD>            + &#34;continuationExpected = &#34; + this.continuationExpected + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">602</TD><TD>            + &#34;maxSessionNumber = &#34; + this.maxSessionNumber + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">603</TD><TD>            + &#34;testElements = &#34; + this.testElements + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">604</TD><TD>    �
 �       + &#34;elementsIterator = &#34; + this.elementsIterator + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">605</TD><TD>            + &#34;sessions = &#34; + this.sessions + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">606</TD><TD>            + &#34;nextTest = &#34; + this.nextTest + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">607</TD><TD>            + &#34;continueAfterFailure = &#34; + this.continueAfterFailure + TAB</TD></TR><TR CLASS="z"><TD CLASS="l">608</TD><TD>            + &#34; )&#34;;</TD></TR><TR><TD CLASS="l">609</TD><TD>    </TD></TR><TR CLASS="z"><TD CLASS="l">610</TD><TD>        return result;</TD></TR><TR><TD CLASS="l">611</TD><TD>    }</TD></TR><TR><TD CLASS="l">612
 </TD><TD>    </TD></TR><TR><TD CLASS="l">613</TD><TD>    </TD></TR><TR><TD CLASS="l">614</TD><TD>}</TD></TR></TABLE><P></P><TABLE CLASS="hdft" WIDTH="100%" CELLSPACING="0"><TR><TD CLASS="nv">[<A HREF="../index.html">all classes</A>][<A HREF="0.html">org.apache.james.mpt</A>]</TD></TR><TR><TD CLASS="tl"><A HREF="http://sourceforge.net/projects/emma">EMMA 2.0.5312</A> (C) Vladimir Roubtsov</TD></TR></TABLE></BODY></HTML>
\ No newline at end of file