1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.logging.tests.java.util.logging;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.BufferedReader;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileReader;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PrintStream;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.UnsupportedEncodingException;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ResourceBundle;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.FileHandler;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Handler;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Level;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogRecord;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Logger;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.XMLFormatter;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class XMLFormatterTest extends TestCase {
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	XMLFormatter formatter = null;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	MockHandler handler = null;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	LogRecord lr = null;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() throws Exception {
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.setUp();
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		formatter = new XMLFormatter();
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		handler = new MockHandler();
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr = new LogRecord(Level.SEVERE, "pattern");
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testLocalFormat() {
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// if set resource bundle, output will use localized message,
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// but put the original message into the key element
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// further more, if message pattern has no effect
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ResourceBundle rb = ResourceBundle
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.getBundle("bundles/java/util/logging/res");
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setResourceBundle(rb);
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setMessage("pattern");
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String result = formatter.format(lr);
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<message>" + rb.getString("pattern")
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				+ "</message>") > 0);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<key>pattern</key>") > 0);
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setMessage("msg");
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		result = formatter.format(lr);
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<message>" + rb.getString("msg")
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				+ "</message>") > 0);
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<key>msg</key>") > 0);
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setMessage("pattern {0, number}");
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		result = formatter.format(lr);
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<message>pattern {0, number}</message>") > 0);
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<key>") < 0);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// if message has no relevant localized message, use the original
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setMessage("bad key");
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		result = formatter.format(lr);
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<message>bad key</message>") > 0);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(result.indexOf("<key>") < 0);
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testFullFormat() {
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setSourceClassName("source class");
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setSourceMethodName("source method");
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setLoggerName("logger name");
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setMillis(0);
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setThrown(new Throwable("message"));
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setParameters(new Object[] { "100", "200" });
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setSequenceNumber(1);
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ResourceBundle rb = ResourceBundle
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.getBundle("bundles/java/util/logging/res");
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setResourceBundle(rb);
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr.setResourceBundleName("rbname");
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String output = formatter.format(lr);
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// System.out.println(output);
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<record>") >= 0);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<date>") >= 0);
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<millis>0</millis>") >= 0);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<sequence>") >= 0);
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<level>SEVERE</level>") >= 0);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<thread>") >= 0);
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<message>" + rb.getString("pattern")
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				+ "</message>") >= 0);
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<logger>logger name</logger>") > 0);
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<class>source class</class>") > 0);
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<method>source method</method>") > 0);
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<catalog>rbname</catalog>") > 0);
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<param>100</param>") > 0);
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<param>200</param>") > 0);
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<exception>") > 0);
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<key>pattern</key>") > 0);
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testFormat() {
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String output = formatter.format(lr);
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// System.out.println(output);
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<record>") >= 0);
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<date>") >= 0);
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<millis>") >= 0);
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<sequence>") >= 0);
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<level>SEVERE</level>") >= 0);
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<thread>") >= 0);
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<message>pattern</message>") >= 0);
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<logger>") < 0);
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<class>") < 0);
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<method>") < 0);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<catalog>") < 0);
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<param>") < 0);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<exception>") < 0);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<key>") < 0);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testGetHead() throws SecurityException,
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			UnsupportedEncodingException {
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String result = formatter.getHead(handler);
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull(handler.getEncoding());
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// TODO: where do we get the default encoding from?
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// assertTrue(result.indexOf(defaultEncoding)>0);
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		handler.setEncoding("ISO-8859-1");
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String head = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\"?>";
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String dtd = "<!DOCTYPE log SYSTEM \"logger.dtd\">";
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String rootELement = "<log>";
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		result = formatter.getHead(handler);
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int headPos = result.indexOf(head);
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int dtdPos = result.indexOf(dtd);
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int rootPos = result.indexOf(rootELement);
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(headPos >= 0);
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(dtdPos > headPos);
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(rootPos > dtdPos);
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		handler.setEncoding(null);
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		result = formatter.getHead(handler);
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull(handler.getEncoding());
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// assertTrue(result.indexOf(defaultEncoding)>0);
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// regression test for Harmony-1280
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// make sure no NPE is thrown
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		formatter.getHead(null);
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testGetTail() {
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(formatter.getTail(handler).indexOf("/log>") > 0);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void testInvalidParameter() {
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		formatter.getTail(null);
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			formatter.format(null);
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail();
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NullPointerException e) {
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		formatter = new XMLFormatter();
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		lr = new LogRecord(Level.SEVERE, null);
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String output = formatter.format(lr);
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// System.out.println(formatter.getHead(handler)+output+formatter.getTail(handler));
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(output.indexOf("<message") > 0);
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public class TestFileHandlerClass {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Logger logger = Logger.getLogger(TestFileHandlerClass.class.getName());
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public TestFileHandlerClass(String logFile) throws SecurityException,
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                IOException {
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            logger.addHandler(new FileHandler(logFile));
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            LogRecord logRecord = new LogRecord(Level.INFO, "message:<init>&");
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            logRecord.setLoggerName("<init>&");
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            logRecord.setThrown(new Exception("<init>&"));
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            logRecord.setParameters(new String[] { "<init>&" });
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            logger.log(logRecord);
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_TestFileHandlerClass_constructor() throws Exception {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File logFile = new File(System.getProperty("user.home"),
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "TestFileHandlerClass.log");
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        logFile.deleteOnExit();
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrintStream out = System.out;
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrintStream err = System.err;
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setOut(null);
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setErr(null);
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new TestFileHandlerClass(logFile.getCanonicalPath());
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            BufferedReader br = new BufferedReader(new FileReader(logFile));
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String line = null;
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while ((line = br.readLine()) != null) {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (line.contains("<init>&")) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("should convert <init> to &lt;init&gt;");
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setOut(out);
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setErr(err);
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public static class MockHandler extends Handler {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public void close() {
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public void flush() {
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public void publish(LogRecord record) {
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
234