<!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=ISO-8859-1" /><title>TransportTypeTest xref</title>
<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
</head>
<body>
<pre>

<a name="1" href="#1">1</a>   <em class="comment">/*</em>
<a name="2" href="#2">2</a>   <em class="comment"> *   @(#) $Id: TransportTypeTest.java 357871 2005-12-20 01:56:40Z trustin $</em>
<a name="3" href="#3">3</a>   <em class="comment"> *</em>
<a name="4" href="#4">4</a>   <em class="comment"> *   Copyright 2004 The Apache Software Foundation</em>
<a name="5" href="#5">5</a>   <em class="comment"> *</em>
<a name="6" href="#6">6</a>   <em class="comment"> *   Licensed under the Apache License, Version 2.0 (the "License");</em>
<a name="7" href="#7">7</a>   <em class="comment"> *   you may not use this file except in compliance with the License.</em>
<a name="8" href="#8">8</a>   <em class="comment"> *   You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="comment"> *</em>
<a name="10" href="#10">10</a>  <em class="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="comment"> *</em>
<a name="12" href="#12">12</a>  <em class="comment"> *   Unless required by applicable law or agreed to in writing, software</em>
<a name="13" href="#13">13</a>  <em class="comment"> *   distributed under the License is distributed on an "AS IS" BASIS,</em>
<a name="14" href="#14">14</a>  <em class="comment"> *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</em>
<a name="15" href="#15">15</a>  <em class="comment"> *   See the License for the specific language governing permissions and</em>
<a name="16" href="#16">16</a>  <em class="comment"> *   limitations under the License.</em>
<a name="17" href="#17">17</a>  <em class="comment"> *</em>
<a name="18" href="#18">18</a>  <em class="comment"> */</em>
<a name="19" href="#19">19</a>  <strong>package</strong> <a href="../../../../org/apache/mina/common/package-summary.html">org.apache.mina.common</a>;
<a name="20" href="#20">20</a>  
<a name="21" href="#21">21</a>  <strong>import</strong> junit.framework.Assert;
<a name="22" href="#22">22</a>  <strong>import</strong> junit.framework.TestCase;
<a name="23" href="#23">23</a>  
<a name="24" href="#24">24</a>  <em>/**<em>*</em></em>
<a name="25" href="#25">25</a>  <em> * Tests {@link TransportType}.</em>
<a name="26" href="#26">26</a>  <em> * </em>
<a name="27" href="#27">27</a>  <em> * @author The Apache Directory Project (dev@directory.apache.org)</em>
<a name="28" href="#28">28</a>  <em> * @version $Rev: 357871 $, $Date: 2005-12-20 10:56:40 +0900 (Tue, 20 Dec 2005) $</em>
<a name="29" href="#29">29</a>  <em> */</em>
<a name="30" href="#30">30</a>  <strong>public</strong> <strong>class</strong> <a href="../../../../org/apache/mina/common/TransportTypeTest.html">TransportTypeTest</a> <strong>extends</strong> TestCase {
<a name="31" href="#31">31</a>  
<a name="32" href="#32">32</a>      <strong>public</strong> <strong>static</strong> <strong>void</strong> main(String[] args) {
<a name="33" href="#33">33</a>          junit.textui.TestRunner.run(TransportTypeTest.<strong>class</strong>);
<a name="34" href="#34">34</a>      }
<a name="35" href="#35">35</a>      
<a name="36" href="#36">36</a>      <strong>public</strong> <strong>void</strong> testRegistration()
<a name="37" href="#37">37</a>      {
<a name="38" href="#38">38</a>          TransportType myType = <strong>new</strong> TransportType( <strong>new</strong> String[] { <span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span> }, <strong>true</strong> );
<a name="39" href="#39">39</a>          
<a name="40" href="#40">40</a>          Assert.assertSame( myType, TransportType.getInstance( <span class="string">"a"</span> ) );
<a name="41" href="#41">41</a>          Assert.assertSame( myType, TransportType.getInstance( <span class="string">"A"</span> ) );
<a name="42" href="#42">42</a>          Assert.assertSame( myType, TransportType.getInstance( <span class="string">"b"</span> ) );
<a name="43" href="#43">43</a>          Assert.assertSame( myType, TransportType.getInstance( <span class="string">"B"</span> ) );
<a name="44" href="#44">44</a>          Assert.assertSame( myType, TransportType.getInstance( <span class="string">"c"</span> ) );
<a name="45" href="#45">45</a>          Assert.assertSame( myType, TransportType.getInstance( <span class="string">"C"</span> ) );
<a name="46" href="#46">46</a>          <strong>try</strong>
<a name="47" href="#47">47</a>          {
<a name="48" href="#48">48</a>              TransportType.getInstance( <span class="string">"unknown"</span> );
<a name="49" href="#49">49</a>              Assert.fail();
<a name="50" href="#50">50</a>          }
<a name="51" href="#51">51</a>          <strong>catch</strong>( IllegalArgumentException e )
<a name="52" href="#52">52</a>          {
<a name="53" href="#53">53</a>              <em class="comment">// ignore</em>
<a name="54" href="#54">54</a>          }
<a name="55" href="#55">55</a>          
<a name="56" href="#56">56</a>          <strong>try</strong>
<a name="57" href="#57">57</a>          {
<a name="58" href="#58">58</a>              <strong>new</strong> TransportType( <strong>new</strong> String[] { <span class="string">"A"</span> }, false );
<a name="59" href="#59">59</a>              Assert.fail();
<a name="60" href="#60">60</a>          }
<a name="61" href="#61">61</a>          <strong>catch</strong>( IllegalArgumentException e )
<a name="62" href="#62">62</a>          {
<a name="63" href="#63">63</a>              <em class="comment">// ignore</em>
<a name="64" href="#64">64</a>          }
<a name="65" href="#65">65</a>      }
<a name="66" href="#66">66</a>  
<a name="67" href="#67">67</a>  }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

