KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > grlea > log > test > commons > TestOfCommonsLoggingAdapter


1 package org.grlea.log.test.commons;
2
3 // $Id: TestOfCommonsLoggingAdapter.java,v 1.3 2006/07/13 12:44:55 grlea Exp $
4
// Copyright (c) 2004-2006 Graham Lea. All rights reserved.
5

6 // Licensed under the Apache License, Version 2.0 (the "License");
7
// you may not use this file except in compliance with the License.
8
// You may obtain a copy of the License at
9
//
10
// http://www.apache.org/licenses/LICENSE-2.0
11
//
12
// Unless required by applicable law or agreed to in writing, software
13
// distributed under the License is distributed on an "AS IS" BASIS,
14
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
// See the License for the specific language governing permissions and
16
// limitations under the License.
17

18
19 import org.grlea.log.DebugLevel;
20 import org.grlea.log.SimpleLog;
21 import org.grlea.log.adapters.commons.CommonsLoggingAdapter;
22
23 import junit.framework.TestCase;
24 import junit.framework.TestSuite;
25
26 import java.io.BufferedReader JavaDoc;
27 import java.io.ByteArrayInputStream JavaDoc;
28 import java.io.ByteArrayOutputStream JavaDoc;
29 import java.io.IOException JavaDoc;
30 import java.io.InputStreamReader JavaDoc;
31 import java.io.PrintWriter JavaDoc;
32 import java.lang.reflect.Field JavaDoc;
33 import java.lang.reflect.Method JavaDoc;
34 import java.lang.reflect.InvocationTargetException JavaDoc;
35 import java.util.Properties JavaDoc;
36
37 /**
38  * <p>Tests the public interface of {@link CommonsLoggingAdapter}.</p>
39  *
40  * @author Graham Lea
41  * @version $Revision: 1.3 $
42  */

43 public class
44 TestOfCommonsLoggingAdapter
45 extends TestCase
46 {
47    private ByteArrayOutputStream JavaDoc outputStream;
48
49    public
50    TestOfCommonsLoggingAdapter(String JavaDoc name)
51    {
52       // Standard TestCase constructor. You shouldn't edit this.
53
super(name);
54    }
55
56    static int instanceNumber = 1;
57
58    protected void
59    setUp()
60    throws Exception JavaDoc
61    {
62       outputStream = new ByteArrayOutputStream JavaDoc(512);
63
64       SimpleLog simpleLog = SimpleLog.defaultInstance();
65       Properties JavaDoc simpleLogProperties = getLogProperties(simpleLog);
66       simpleLogProperties.clear();
67       simpleLog.reloadProperties();
68       simpleLog.setWriter(new PrintWriter JavaDoc(outputStream, true));
69
70       System.setProperty("org.apache.commons.logging.Log", CommonsLoggingAdapter.class.getName());
71    }
72
73    private Properties JavaDoc
74    getLogProperties(SimpleLog simpleLog)
75    throws NoSuchFieldException JavaDoc, IllegalAccessException JavaDoc
76    {
77       Field JavaDoc propertiesField = simpleLog.getClass().getDeclaredField("properties");
78       propertiesField.setAccessible(true);
79       return (Properties JavaDoc) propertiesField.get(simpleLog);
80    }
81
82    protected void
83    tearDown()
84    {
85       outputStream = null;
86    }
87
88    public void
89    testNormalLogging()
90    throws Exception JavaDoc
91    {
92       new SimpleCommonsLoggingClass().doSomeLogging();
93
94       String JavaDoc[] expectedOutputLineParts =
95       {
96          " |main|SimpleCommonsLoggingClass|Test of Fatal",
97          " |main|SimpleCommonsLoggingClass|Test of Error",
98          " |main|SimpleCommonsLoggingClass|Test of Warn",
99          " |main|SimpleCommonsLoggingClass|Test of Info",
100       };
101
102       checkOutput(expectedOutputLineParts, true);
103    }
104
105    public void
106    testFatalLogging()
107    throws Exception JavaDoc
108    {
109       Properties JavaDoc logProperties = getLogProperties(SimpleLog.defaultInstance());
110       logProperties.setProperty(SimpleCommonsLoggingClass.class.getName(), "Fatal");
111       reconfigureLoggers();
112       new SimpleCommonsLoggingClass().doSomeLogging();
113
114       String JavaDoc[] expectedOutputLineParts =
115       {
116          " |main|SimpleCommonsLoggingClass|Test of Fatal",
117       };
118
119       checkOutput(expectedOutputLineParts, true);
120    }
121
122    private void
123    reconfigureLoggers()
124    throws NoSuchMethodException JavaDoc, IllegalAccessException JavaDoc, InvocationTargetException JavaDoc
125    {
126       Method JavaDoc reconfigureMethod = SimpleLog.class.getDeclaredMethod("reconfigureAllLoggers", new Class JavaDoc[0]);
127       reconfigureMethod.setAccessible(true);
128       reconfigureMethod.invoke(SimpleLog.defaultInstance(), new Object JavaDoc[0]);
129    }
130
131    public void
132    testTracingWhenVerboseOn()
133    throws Exception JavaDoc
134    {
135       SimpleLog.defaultInstance().setDefaultLevel(DebugLevel.L6_VERBOSE);
136
137       new SimpleCommonsLoggingClass().doSomeTracing();
138
139       String JavaDoc[] expectedOutputLineParts =
140       {
141          " |main|SimpleCommonsLoggingClass|IN: doSomeTracing()",
142          " |main|SimpleCommonsLoggingClass|OUT: doSomeTracing()",
143       };
144
145       checkOutput(expectedOutputLineParts, true);
146    }
147
148    public void
149    testTracingWhenVerboseOff()
150    throws Exception JavaDoc
151    {
152       SimpleLog.defaultInstance().setDefaultLevel(DebugLevel.L5_DEBUG);
153       new SimpleCommonsLoggingClass().doSomeTracing();
154
155       checkOutput(new String JavaDoc[0], true);
156    }
157
158    public void
159    testLogginAnError()
160    throws Exception JavaDoc
161    {
162       SimpleLog.defaultInstance().setDefaultLevel(DebugLevel.L4_INFO);
163       new SimpleCommonsLoggingClass().logAnError();
164
165       String JavaDoc[] expectedOutputLineParts =
166       {
167          " |main|SimpleCommonsLoggingClass|Test of Exception",
168          "***|main|SimpleCommonsLoggingClass|java.lang.Throwable: Test Message",
169       };
170
171       checkOutput(expectedOutputLineParts, false);
172    }
173
174    public void
175    testLoggerNameThatIsNotAClassName()
176    throws Exception JavaDoc
177    {
178       String JavaDoc loggerName = "MadeUpLoggerName";
179       SimpleLog.defaultInstance().setDefaultLevel(DebugLevel.L4_INFO);
180       new SimpleCommonsLoggingClass(loggerName).doSomeLogging();
181
182       String JavaDoc[] expectedOutputLineParts =
183       {
184          " |main|Log[MadeUpLoggerName]|Test of Fatal",
185          " |main|Log[MadeUpLoggerName]|Test of Error",
186          " |main|Log[MadeUpLoggerName]|Test of Warn",
187          " |main|Log[MadeUpLoggerName]|Test of Info",
188       };
189
190       checkOutput(expectedOutputLineParts, true);
191    }
192
193    public void
194    testConfiguringLoggerNameThatIsNotAClassName()
195    throws Exception JavaDoc
196    {
197       String JavaDoc loggerName = "MadeUpLoggerName";
198       getLogProperties(SimpleLog.defaultInstance())
199          .setProperty("org.apache.commons.logging.Log.MadeUpLoggerName", "Error");
200       reconfigureLoggers();
201       new SimpleCommonsLoggingClass(loggerName).doSomeLogging();
202
203       String JavaDoc[] expectedOutputLineParts =
204       {
205          " |main|Log[MadeUpLoggerName]|Test of Fatal",
206          " |main|Log[MadeUpLoggerName]|Test of Error",
207       };
208
209       checkOutput(expectedOutputLineParts, true);
210    }
211
212    /**
213     * Returns a test suite that will automatically run all test methods in this
214     * class beginning with "test".
215     */

216    public static TestSuite
217    suite()
218    {
219       return new TestSuite(TestOfCommonsLoggingAdapter.class);
220    }
221
222
223    protected void
224    checkOutput(String JavaDoc[] expectedOutputLineParts, boolean failWhenExtraLinesDetected)
225    throws IOException JavaDoc
226    {
227       System.err.flush();
228
229       byte[] output = outputStream.toByteArray();
230       ByteArrayInputStream JavaDoc byteIn = new ByteArrayInputStream JavaDoc(output);
231       InputStreamReader JavaDoc streamReader = new InputStreamReader JavaDoc(byteIn);
232       BufferedReader JavaDoc in = new BufferedReader JavaDoc(streamReader);
233       String JavaDoc outputLine;
234       int lineNumber = 0;
235       while ((outputLine = in.readLine()) != null)
236       {
237          if (lineNumber >= expectedOutputLineParts.length)
238          {
239             if (failWhenExtraLinesDetected)
240                fail("More output lines than expected.\nExtra line: " + outputLine);
241             else
242                break;
243          }
244
245          String JavaDoc expectedOutputLinePart = expectedOutputLineParts[lineNumber];
246          boolean linePartFound = outputLine.indexOf(expectedOutputLinePart) != -1;
247          assertEquals("'" + expectedOutputLinePart + "' found in '" + outputLine + "'",
248                       true, linePartFound);
249
250          lineNumber++;
251       }
252
253       assertEquals("output lines", expectedOutputLineParts.length, lineNumber);
254    }
255 }
Popular Tags