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
388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    XMLFormatter formatter = null;
398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    MockHandler handler = null;
418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    LogRecord lr = null;
438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void setUp() throws Exception {
458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.setUp();
468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        formatter = new XMLFormatter();
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MockHandler();
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr = new LogRecord(Level.SEVERE, "pattern");
498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testLocalFormat() {
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // if set resource bundle, output will use localized message,
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // but put the original message into the key element
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // further more, if message pattern has no effect
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ResourceBundle rb = ResourceBundle
5684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller                .getBundle("bundles/com/android/java/util/logging/res");
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setResourceBundle(rb);
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setMessage("pattern");
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String result = formatter.format(lr);
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<message>" + rb.getString("pattern")
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "</message>") > 0);
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<key>pattern</key>") > 0);
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setMessage("msg");
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        result = formatter.format(lr);
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<message>" + rb.getString("msg")
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "</message>") > 0);
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<key>msg</key>") > 0);
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setMessage("pattern {0, number}");
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        result = formatter.format(lr);
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<message>pattern {0, number}</message>") > 0);
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<key>") < 0);
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // if message has no relevant localized message, use the original
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setMessage("bad key");
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        result = formatter.format(lr);
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<message>bad key</message>") > 0);
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(result.indexOf("<key>") < 0);
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testFullFormat() {
838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setSourceClassName("source class");
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setSourceMethodName("source method");
858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setLoggerName("logger name");
868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setMillis(0);
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setThrown(new Throwable("message"));
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setParameters(new Object[] { "100", "200" });
898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setSequenceNumber(1);
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ResourceBundle rb = ResourceBundle
9184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller                .getBundle("bundles/com/android/java/util/logging/res");
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setResourceBundle(rb);
938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr.setResourceBundleName("rbname");
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String output = formatter.format(lr);
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // System.out.println(output);
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<record>") >= 0);
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<date>") >= 0);
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<millis>0</millis>") >= 0);
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<sequence>") >= 0);
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<level>SEVERE</level>") >= 0);
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<thread>") >= 0);
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<message>" + rb.getString("pattern")
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "</message>") >= 0);
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<logger>logger name</logger>") > 0);
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<class>source class</class>") > 0);
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<method>source method</method>") > 0);
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<catalog>rbname</catalog>") > 0);
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<param>100</param>") > 0);
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<param>200</param>") > 0);
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<exception>") > 0);
1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<key>pattern</key>") > 0);
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testFormat() {
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String output = formatter.format(lr);
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // System.out.println(output);
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<record>") >= 0);
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<date>") >= 0);
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<millis>") >= 0);
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<sequence>") >= 0);
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<level>SEVERE</level>") >= 0);
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<thread>") >= 0);
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<message>pattern</message>") >= 0);
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<logger>") < 0);
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<class>") < 0);
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<method>") < 0);
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<catalog>") < 0);
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<param>") < 0);
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<exception>") < 0);
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(output.indexOf("<key>") < 0);
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testGetHead() throws SecurityException,
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            UnsupportedEncodingException {
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String result = formatter.getHead(handler);
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // TODO: where do we get the default encoding from?
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertTrue(result.indexOf(defaultEncoding)>0);
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.setEncoding("ISO-8859-1");
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String head = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\"?>";
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String dtd = "<!DOCTYPE log SYSTEM \"logger.dtd\">";
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String rootELement = "<log>";
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        result = formatter.getHead(handler);
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int headPos = result.indexOf(head);
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int dtdPos = result.indexOf(dtd);
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int rootPos = result.indexOf(rootELement);
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(headPos >= 0);
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(dtdPos > headPos);
1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(rootPos > dtdPos);
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.setEncoding(null);
1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        result = formatter.getHead(handler);
1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertTrue(result.indexOf(defaultEncoding)>0);
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // regression test for Harmony-1280
1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // make sure no NPE is thrown
1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        formatter.getHead(null);
1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testGetTail() {
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(formatter.getTail(handler).indexOf("/log>") > 0);
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testInvalidParameter() {
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        formatter.getTail(null);
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            formatter.format(null);
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail();
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        formatter = new XMLFormatter();
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        lr = new LogRecord(Level.SEVERE, null);
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String output = formatter.format(lr);
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // System.out.println(formatter.getHead(handler)+output+formatter.getTail(handler));
1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        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 {
19784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        File logFile = File.createTempFile("TestFileHandlerClass", ".log");
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        logFile.deleteOnExit();
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrintStream out = System.out;
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrintStream err = System.err;
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setOut(null);
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setErr(null);
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new TestFileHandlerClass(logFile.getCanonicalPath());
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            BufferedReader br = new BufferedReader(new FileReader(logFile));
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String line = null;
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while ((line = br.readLine()) != null) {
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (line.contains("<init>&")) {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("should convert <init> to &lt;init&gt;");
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setOut(out);
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setErr(err);
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockHandler extends Handler {
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void close() {
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void flush() {
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void publish(LogRecord record) {
2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
233