<!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>EnhancedPatternLayoutTest 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;
<a name="19" href="#19">19</a>  
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.spi.LoggingEvent;
<a name="21" href="#21">21</a>  
<a name="22" href="#22">22</a>  
<a name="23" href="#23">23</a>  <em class="jxr_javadoccomment">/**</em>
<a name="24" href="#24">24</a>  <em class="jxr_javadoccomment"> * Test for EnhancedPatternLayout.</em>
<a name="25" href="#25">25</a>  <em class="jxr_javadoccomment"> *</em>
<a name="26" href="#26">26</a>  <em class="jxr_javadoccomment"> */</em>
<a name="27" href="#27">27</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../org/apache/log4j/EnhancedPatternLayoutTest.html">EnhancedPatternLayoutTest</a> <strong class="jxr_keyword">extends</strong> <a href="../../../org/apache/log4j/LayoutTest.html">LayoutTest</a> {
<a name="28" href="#28">28</a>    <em class="jxr_javadoccomment">/**</em>
<a name="29" href="#29">29</a>  <em class="jxr_javadoccomment">   * Construct new instance of PatternLayoutTest.</em>
<a name="30" href="#30">30</a>  <em class="jxr_javadoccomment">   *</em>
<a name="31" href="#31">31</a>  <em class="jxr_javadoccomment">   * @param testName test name.</em>
<a name="32" href="#32">32</a>  <em class="jxr_javadoccomment">   */</em>
<a name="33" href="#33">33</a>    <strong class="jxr_keyword">public</strong> <a href="../../../org/apache/log4j/EnhancedPatternLayoutTest.html">EnhancedPatternLayoutTest</a>(<strong class="jxr_keyword">final</strong> String testName) {
<a name="34" href="#34">34</a>      <strong class="jxr_keyword">super</strong>(testName, <span class="jxr_string">"text/plain"</span>, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
<a name="35" href="#35">35</a>    }
<a name="36" href="#36">36</a>  
<a name="37" href="#37">37</a>    <em class="jxr_javadoccomment">/**</em>
<a name="38" href="#38">38</a>  <em class="jxr_javadoccomment">   * @{inheritDoc}</em>
<a name="39" href="#39">39</a>  <em class="jxr_javadoccomment">   */</em>
<a name="40" href="#40">40</a>    <strong class="jxr_keyword">protected</strong> Layout createLayout() {
<a name="41" href="#41">41</a>      <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> EnhancedPatternLayout(<span class="jxr_string">"[%t] %p %c - %m%n"</span>);
<a name="42" href="#42">42</a>    }
<a name="43" href="#43">43</a>  
<a name="44" href="#44">44</a>    <em class="jxr_javadoccomment">/**</em>
<a name="45" href="#45">45</a>  <em class="jxr_javadoccomment">   * Tests format.</em>
<a name="46" href="#46">46</a>  <em class="jxr_javadoccomment">   */</em>
<a name="47" href="#47">47</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFormat() {
<a name="48" href="#48">48</a>      Logger logger = Logger.getLogger(<span class="jxr_string">"org.apache.log4j.LayoutTest"</span>);
<a name="49" href="#49">49</a>      LoggingEvent event =
<a name="50" href="#50">50</a>        <strong class="jxr_keyword">new</strong> LoggingEvent(
<a name="51" href="#51">51</a>          <span class="jxr_string">"org.apache.log4j.Logger"</span>, logger, Level.INFO, <span class="jxr_string">"Hello, World"</span>, <strong class="jxr_keyword">null</strong>);
<a name="52" href="#52">52</a>      EnhancedPatternLayout layout = (EnhancedPatternLayout) createLayout();
<a name="53" href="#53">53</a>      String result = layout.format(event);
<a name="54" href="#54">54</a>      StringBuffer buf = <strong class="jxr_keyword">new</strong> StringBuffer(100);
<a name="55" href="#55">55</a>      buf.append('[');
<a name="56" href="#56">56</a>      buf.append(event.getThreadName());
<a name="57" href="#57">57</a>      buf.append(<span class="jxr_string">"] "</span>);
<a name="58" href="#58">58</a>      buf.append(event.getLevel().toString());
<a name="59" href="#59">59</a>      buf.append(' ');
<a name="60" href="#60">60</a>      buf.append(event.getLoggerName());
<a name="61" href="#61">61</a>      buf.append(<span class="jxr_string">" - "</span>);
<a name="62" href="#62">62</a>      buf.append(event.getMessage());
<a name="63" href="#63">63</a>      buf.append(System.getProperty(<span class="jxr_string">"line.separator"</span>));
<a name="64" href="#64">64</a>      assertEquals(buf.toString(), result);
<a name="65" href="#65">65</a>    }
<a name="66" href="#66">66</a>  
<a name="67" href="#67">67</a>    <em class="jxr_javadoccomment">/**</em>
<a name="68" href="#68">68</a>  <em class="jxr_javadoccomment">   * Tests getPatternFormat().</em>
<a name="69" href="#69">69</a>  <em class="jxr_javadoccomment">   */</em>
<a name="70" href="#70">70</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testGetPatternFormat() {
<a name="71" href="#71">71</a>      EnhancedPatternLayout layout = (EnhancedPatternLayout) createLayout();
<a name="72" href="#72">72</a>      assertEquals(<span class="jxr_string">"[%t] %p %c - %m%n"</span>, layout.getConversionPattern());
<a name="73" href="#73">73</a>    }
<a name="74" href="#74">74</a>  
<a name="75" href="#75">75</a>    <em class="jxr_javadoccomment">/**</em>
<a name="76" href="#76">76</a>  <em class="jxr_javadoccomment">   * Tests DEFAULT_CONVERSION_PATTERN constant.</em>
<a name="77" href="#77">77</a>  <em class="jxr_javadoccomment">   */</em>
<a name="78" href="#78">78</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testDefaultConversionPattern() {
<a name="79" href="#79">79</a>      assertEquals(<span class="jxr_string">"%m%n"</span>, EnhancedPatternLayout.DEFAULT_CONVERSION_PATTERN);
<a name="80" href="#80">80</a>    }
<a name="81" href="#81">81</a>  
<a name="82" href="#82">82</a>    <em class="jxr_javadoccomment">/**</em>
<a name="83" href="#83">83</a>  <em class="jxr_javadoccomment">   * Tests DEFAULT_CONVERSION_PATTERN constant.</em>
<a name="84" href="#84">84</a>  <em class="jxr_javadoccomment">   */</em>
<a name="85" href="#85">85</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testTTCCConversionPattern() {
<a name="86" href="#86">86</a>      assertEquals(
<a name="87" href="#87">87</a>        <span class="jxr_string">"%r [%t] %p %c %x - %m%n"</span>, EnhancedPatternLayout.TTCC_CONVERSION_PATTERN);
<a name="88" href="#88">88</a>    }
<a name="89" href="#89">89</a>  
<a name="90" href="#90">90</a>    <em class="jxr_javadoccomment">/**</em>
<a name="91" href="#91">91</a>  <em class="jxr_javadoccomment">   * Tests buffer downsizing code path.</em>
<a name="92" href="#92">92</a>  <em class="jxr_javadoccomment">   */</em>
<a name="93" href="#93">93</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFormatResize() {
<a name="94" href="#94">94</a>      Logger logger = Logger.getLogger(<span class="jxr_string">"org.apache.log4j.xml.PatternLayoutTest"</span>);
<a name="95" href="#95">95</a>      NDC.clear();
<a name="96" href="#96">96</a>  
<a name="97" href="#97">97</a>      <strong class="jxr_keyword">char</strong>[] msg = <strong class="jxr_keyword">new</strong> <strong class="jxr_keyword">char</strong>[2000];
<a name="98" href="#98">98</a>  
<a name="99" href="#99">99</a>      <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; msg.length; i++) {
<a name="100" href="#100">100</a>       msg[i] = 'A';
<a name="101" href="#101">101</a>     }
<a name="102" href="#102">102</a> 
<a name="103" href="#103">103</a>     LoggingEvent event1 =
<a name="104" href="#104">104</a>       <strong class="jxr_keyword">new</strong> LoggingEvent(
<a name="105" href="#105">105</a>         <span class="jxr_string">"org.apache.log4j.Logger"</span>, logger, Level.DEBUG, <strong class="jxr_keyword">new</strong> String(msg), <strong class="jxr_keyword">null</strong>);
<a name="106" href="#106">106</a>     EnhancedPatternLayout layout = (EnhancedPatternLayout) createLayout();
<a name="107" href="#107">107</a>     String result = layout.format(event1);
<a name="108" href="#108">108</a>     LoggingEvent event2 =
<a name="109" href="#109">109</a>       <strong class="jxr_keyword">new</strong> LoggingEvent(
<a name="110" href="#110">110</a>         <span class="jxr_string">"org.apache.log4j.Logger"</span>, logger, Level.WARN, <span class="jxr_string">"Hello, World"</span>, <strong class="jxr_keyword">null</strong>);
<a name="111" href="#111">111</a>     result = layout.format(event2);
<a name="112" href="#112">112</a>     assertEquals(<span class="jxr_string">"["</span>, result.substring(0, 1));
<a name="113" href="#113">113</a>   }
<a name="114" href="#114">114</a> 
<a name="115" href="#115">115</a>   <em class="jxr_javadoccomment">/**</em>
<a name="116" href="#116">116</a> <em class="jxr_javadoccomment">   * Class to ensure that protected members are still available.</em>
<a name="117" href="#117">117</a> <em class="jxr_javadoccomment">   */</em>
<a name="118" href="#118">118</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a href="../../../org/apache/log4j/PatternLayoutTest.html">DerivedPatternLayout</a> <strong class="jxr_keyword">extends</strong> EnhancedPatternLayout {
<a name="119" href="#119">119</a>     <em class="jxr_javadoccomment">/**</em>
<a name="120" href="#120">120</a> <em class="jxr_javadoccomment">     * Constructs a new instance of DerivedPatternLayout.</em>
<a name="121" href="#121">121</a> <em class="jxr_javadoccomment">     */</em>
<a name="122" href="#122">122</a>     <strong class="jxr_keyword">public</strong> <a href="../../../org/apache/log4j/PatternLayoutTest.html">DerivedPatternLayout</a>() {
<a name="123" href="#123">123</a>     }
<a name="124" href="#124">124</a> 
<a name="125" href="#125">125</a>     <em class="jxr_javadoccomment">/**</em>
<a name="126" href="#126">126</a> <em class="jxr_javadoccomment">     * Get BUF_SIZE.</em>
<a name="127" href="#127">127</a> <em class="jxr_javadoccomment">     * @return return initial buffer size in characters.</em>
<a name="128" href="#128">128</a> <em class="jxr_javadoccomment">     * @deprecated</em>
<a name="129" href="#129">129</a> <em class="jxr_javadoccomment">     */</em>
<a name="130" href="#130">130</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getBufSize() {
<a name="131" href="#131">131</a>       <strong class="jxr_keyword">return</strong> BUF_SIZE;
<a name="132" href="#132">132</a>     }
<a name="133" href="#133">133</a> 
<a name="134" href="#134">134</a>     <em class="jxr_javadoccomment">/**</em>
<a name="135" href="#135">135</a> <em class="jxr_javadoccomment">     * Get MAX_CAPACITY.</em>
<a name="136" href="#136">136</a> <em class="jxr_javadoccomment">     * @return maximum capacity in characters.</em>
<a name="137" href="#137">137</a> <em class="jxr_javadoccomment">     * @deprecated</em>
<a name="138" href="#138">138</a> <em class="jxr_javadoccomment">     */</em>
<a name="139" href="#139">139</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getMaxCapacity() {
<a name="140" href="#140">140</a>       <strong class="jxr_keyword">return</strong> MAX_CAPACITY;
<a name="141" href="#141">141</a>     }
<a name="142" href="#142">142</a>   }
<a name="143" href="#143">143</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

