<!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>TestCase4 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 or more</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> * contributor license agreements.  See the NOTICE file distributed with</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> * this work for additional information regarding copyright ownership.</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> * (the "License"); you may not use this file except in compliance with</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> * the License.  You may obtain a copy of the License at</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> * </em>
<a name="9" href="#9">9</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="10" href="#10">10</a>  <em class="jxr_comment"> * </em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> * Unless required by applicable law or agreed to in writing, software</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> * distributed under the License is distributed on an "AS IS" BASIS,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> * See the License for the specific language governing permissions and</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> * limitations under the License.</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> */</em>
<a name="17" href="#17">17</a>  
<a name="18" href="#18">18</a>  <strong class="jxr_keyword">package</strong> org.apache.log4j.defaultInit;
<a name="19" href="#19">19</a>  
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">import</strong> junit.framework.TestCase;
<a name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> junit.framework.TestSuite;
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> junit.framework.Test;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.util.Enumeration;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.Appender;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.Logger;
<a name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.LogManager;
<a name="27" href="#27">27</a>  
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> TestCase4 <strong class="jxr_keyword">extends</strong> TestCase {
<a name="29" href="#29">29</a>  
<a name="30" href="#30">30</a>    <strong class="jxr_keyword">public</strong> TestCase4(String name) {
<a name="31" href="#31">31</a>      <strong class="jxr_keyword">super</strong>(name);
<a name="32" href="#32">32</a>    }
<a name="33" href="#33">33</a>  
<a name="34" href="#34">34</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() {
<a name="35" href="#35">35</a>    }
<a name="36" href="#36">36</a>  
<a name="37" href="#37">37</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> tearDown() {
<a name="38" href="#38">38</a>      LogManager.shutdown();
<a name="39" href="#39">39</a>    }
<a name="40" href="#40">40</a>  
<a name="41" href="#41">41</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> combinedTest() {
<a name="42" href="#42">42</a>      Logger root = Logger.getRootLogger();
<a name="43" href="#43">43</a>      <strong class="jxr_keyword">boolean</strong> rootIsConfigured = root.getAllAppenders().hasMoreElements();
<a name="44" href="#44">44</a>      assertTrue(rootIsConfigured);
<a name="45" href="#45">45</a>      Enumeration e = root.getAllAppenders();
<a name="46" href="#46">46</a>      Appender appender = (Appender) e.nextElement();
<a name="47" href="#47">47</a>      assertEquals(appender.getName(), <span class="jxr_string">"D1"</span>);
<a name="48" href="#48">48</a>      assertEquals(e.hasMoreElements(), false);
<a name="49" href="#49">49</a>    }
<a name="50" href="#50">50</a>  
<a name="51" href="#51">51</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Test suite() {
<a name="52" href="#52">52</a>      TestSuite suite = <strong class="jxr_keyword">new</strong> TestSuite();
<a name="53" href="#53">53</a>      suite.addTest(<strong class="jxr_keyword">new</strong> TestCase4(<span class="jxr_string">"combinedTest"</span>));
<a name="54" href="#54">54</a>      <strong class="jxr_keyword">return</strong> suite;
<a name="55" href="#55">55</a>    }
<a name="56" href="#56">56</a>  
<a name="57" href="#57">57</a>  }
<a name="58" href="#58">58</a>  
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

