<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>CumulativeProtocolDecoderTest xref</title>
<link type="text/css" rel="stylesheet" href="../../../../../stylesheet.css" />
</head>
<body>
<pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> *  Licensed to the Apache Software Foundation (ASF) under one</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> *  or more contributor license agreements.  See the NOTICE file</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> *  distributed with this work for additional information</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> *  regarding copyright ownership.  The ASF licenses this file</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> *  to you under the Apache License, Version 2.0 (the</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> *  "License"); you may not use this file except in compliance</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> *  with the License.  You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *</em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> *    <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> *</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> *  Unless required by applicable law or agreed to in writing,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> *  software distributed under the License is distributed on an</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> *  KIND, either express or implied.  See the License for the</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> *  specific language governing permissions and limitations</em>
<a name="17" href="#17">17</a>  <em class="jxr_comment"> *  under the License.</em>
<a name="18" href="#18">18</a>  <em class="jxr_comment"> *</em>
<a name="19" href="#19">19</a>  <em class="jxr_comment"> */</em>
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">package</strong> org.apache.mina.filter.codec;
<a name="21" href="#21">21</a>  
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.net.SocketAddress;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.util.List;
<a name="25" href="#25">25</a>  
<a name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> junit.framework.Assert;
<a name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> junit.framework.TestCase;
<a name="28" href="#28">28</a>  
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.common.DefaultTransportMetadata;
<a name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.common.IoBuffer;
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.common.IoSession;
<a name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.common.IoSessionConfig;
<a name="33" href="#33">33</a>  
<a name="34" href="#34">34</a>  <em class="jxr_javadoccomment">/**</em>
<a name="35" href="#35">35</a>  <em class="jxr_javadoccomment"> * Tests {@link CumulativeProtocolDecoder}.</em>
<a name="36" href="#36">36</a>  <em class="jxr_javadoccomment"> *</em>
<a name="37" href="#37">37</a>  <em class="jxr_javadoccomment"> * @author The Apache MINA Project (dev@mina.apache.org)</em>
<a name="38" href="#38">38</a>  <em class="jxr_javadoccomment"> * @version $Rev: 604779 $, $Date: 2007-12-16 23:11:58 -0700 (Sun, 16 Dec 2007) $</em>
<a name="39" href="#39">39</a>  <em class="jxr_javadoccomment"> */</em>
<a name="40" href="#40">40</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.html">CumulativeProtocolDecoderTest</a> <strong class="jxr_keyword">extends</strong> TestCase {
<a name="41" href="#41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ProtocolCodecSession session = <strong class="jxr_keyword">new</strong> ProtocolCodecSession();
<a name="42" href="#42">42</a>  
<a name="43" href="#43">43</a>      <strong class="jxr_keyword">private</strong> IoBuffer buf;
<a name="44" href="#44">44</a>      <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.html">IntegerDecoder</a> decoder;
<a name="45" href="#45">45</a>  
<a name="46" href="#46">46</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(String[] args) {
<a name="47" href="#47">47</a>          junit.textui.TestRunner.run(CumulativeProtocolDecoderTest.<strong class="jxr_keyword">class</strong>);
<a name="48" href="#48">48</a>      }
<a name="49" href="#49">49</a>  
<a name="50" href="#50">50</a>      @Override
<a name="51" href="#51">51</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> setUp() <strong class="jxr_keyword">throws</strong> Exception {
<a name="52" href="#52">52</a>          buf = IoBuffer.allocate(16);
<a name="53" href="#53">53</a>          decoder = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.html">IntegerDecoder</a>();
<a name="54" href="#54">54</a>          session.setTransportMetadata(
<a name="55" href="#55">55</a>                  <strong class="jxr_keyword">new</strong> DefaultTransportMetadata(
<a name="56" href="#56">56</a>                          <span class="jxr_string">"mina"</span>, <span class="jxr_string">"dummy"</span>, false, <strong class="jxr_keyword">true</strong>, SocketAddress.<strong class="jxr_keyword">class</strong>,
<a name="57" href="#57">57</a>                          IoSessionConfig.<strong class="jxr_keyword">class</strong>, IoBuffer.<strong class="jxr_keyword">class</strong>));
<a name="58" href="#58">58</a>      }
<a name="59" href="#59">59</a>  
<a name="60" href="#60">60</a>      @Override
<a name="61" href="#61">61</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> tearDown() <strong class="jxr_keyword">throws</strong> Exception {
<a name="62" href="#62">62</a>          decoder.dispose(session);
<a name="63" href="#63">63</a>      }
<a name="64" href="#64">64</a>  
<a name="65" href="#65">65</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCumulation() <strong class="jxr_keyword">throws</strong> Exception {
<a name="66" href="#66">66</a>          buf.put((byte) 0);
<a name="67" href="#67">67</a>          buf.flip();
<a name="68" href="#68">68</a>  
<a name="69" href="#69">69</a>          decoder.decode(session, buf, session.getDecoderOutput());
<a name="70" href="#70">70</a>          Assert.assertEquals(0, session.getDecoderOutputQueue().size());
<a name="71" href="#71">71</a>          Assert.assertEquals(buf.limit(), buf.position());
<a name="72" href="#72">72</a>  
<a name="73" href="#73">73</a>          buf.clear();
<a name="74" href="#74">74</a>          buf.put((byte) 0);
<a name="75" href="#75">75</a>          buf.put((byte) 0);
<a name="76" href="#76">76</a>          buf.put((byte) 1);
<a name="77" href="#77">77</a>          buf.flip();
<a name="78" href="#78">78</a>  
<a name="79" href="#79">79</a>          decoder.decode(session, buf, session.getDecoderOutput());
<a name="80" href="#80">80</a>          Assert.assertEquals(1, session.getDecoderOutputQueue().size());
<a name="81" href="#81">81</a>          Assert.assertEquals(<strong class="jxr_keyword">new</strong> Integer(1), session.getDecoderOutputQueue().poll());
<a name="82" href="#82">82</a>          Assert.assertEquals(buf.limit(), buf.position());
<a name="83" href="#83">83</a>      }
<a name="84" href="#84">84</a>  
<a name="85" href="#85">85</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testRepeatitiveDecode() <strong class="jxr_keyword">throws</strong> Exception {
<a name="86" href="#86">86</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 4; i++) {
<a name="87" href="#87">87</a>              buf.putInt(i);
<a name="88" href="#88">88</a>          }
<a name="89" href="#89">89</a>          buf.flip();
<a name="90" href="#90">90</a>  
<a name="91" href="#91">91</a>          decoder.decode(session, buf, session.getDecoderOutput());
<a name="92" href="#92">92</a>          Assert.assertEquals(4, session.getDecoderOutputQueue().size());
<a name="93" href="#93">93</a>          Assert.assertEquals(buf.limit(), buf.position());
<a name="94" href="#94">94</a>  
<a name="95" href="#95">95</a>          List&lt;Object&gt; expected = <strong class="jxr_keyword">new</strong> ArrayList&lt;Object&gt;();
<a name="96" href="#96">96</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 4; i++) {
<a name="97" href="#97">97</a>              expected.add(<strong class="jxr_keyword">new</strong> Integer(i));
<a name="98" href="#98">98</a>          }
<a name="99" href="#99">99</a>          Assert.assertEquals(expected, session.getDecoderOutputQueue());
<a name="100" href="#100">100</a>     }
<a name="101" href="#101">101</a> 
<a name="102" href="#102">102</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testWrongImplementationDetection() <strong class="jxr_keyword">throws</strong> Exception {
<a name="103" href="#103">103</a>         <strong class="jxr_keyword">try</strong> {
<a name="104" href="#104">104</a>             <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.html">WrongDecoder</a>().decode(session, buf, session.getDecoderOutput());
<a name="105" href="#105">105</a>             Assert.fail();
<a name="106" href="#106">106</a>         } <strong class="jxr_keyword">catch</strong> (IllegalStateException e) {
<a name="107" href="#107">107</a>             <em class="jxr_comment">// OK</em>
<a name="108" href="#108">108</a>         }
<a name="109" href="#109">109</a>     }
<a name="110" href="#110">110</a> 
<a name="111" href="#111">111</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.html">IntegerDecoder</a> <strong class="jxr_keyword">extends</strong> CumulativeProtocolDecoder {
<a name="112" href="#112">112</a> 
<a name="113" href="#113">113</a>         @Override
<a name="114" href="#114">114</a>         <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> doDecode(IoSession session, IoBuffer in,
<a name="115" href="#115">115</a>                 ProtocolDecoderOutput out) <strong class="jxr_keyword">throws</strong> Exception {
<a name="116" href="#116">116</a>             Assert.assertTrue(in.hasRemaining());
<a name="117" href="#117">117</a>             <strong class="jxr_keyword">if</strong> (in.remaining() &lt; 4) {
<a name="118" href="#118">118</a>                 <strong class="jxr_keyword">return</strong> false;
<a name="119" href="#119">119</a>             }
<a name="120" href="#120">120</a> 
<a name="121" href="#121">121</a>             out.write(<strong class="jxr_keyword">new</strong> Integer(in.getInt()));
<a name="122" href="#122">122</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
<a name="123" href="#123">123</a>         }
<a name="124" href="#124">124</a> 
<a name="125" href="#125">125</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> dispose() <strong class="jxr_keyword">throws</strong> Exception {
<a name="126" href="#126">126</a>         }
<a name="127" href="#127">127</a> 
<a name="128" href="#128">128</a>     }
<a name="129" href="#129">129</a> 
<a name="130" href="#130">130</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.html">WrongDecoder</a> <strong class="jxr_keyword">extends</strong> CumulativeProtocolDecoder {
<a name="131" href="#131">131</a> 
<a name="132" href="#132">132</a>         @Override
<a name="133" href="#133">133</a>         <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> doDecode(IoSession session, IoBuffer in,
<a name="134" href="#134">134</a>                 ProtocolDecoderOutput out) <strong class="jxr_keyword">throws</strong> Exception {
<a name="135" href="#135">135</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
<a name="136" href="#136">136</a>         }
<a name="137" href="#137">137</a> 
<a name="138" href="#138">138</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> dispose() <strong class="jxr_keyword">throws</strong> Exception {
<a name="139" href="#139">139</a>         }
<a name="140" href="#140">140</a>     }
<a name="141" href="#141">141</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

