/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.logging.tests.java.util.logging; //import dalvik.annotation.AndroidOnly; //import dalvik.annotation.TestTargets; //import dalvik.annotation.TestLevel; //import dalvik.annotation.TestTargetNew; //import dalvik.annotation.TestTargetClass; import junit.framework.TestCase; import java.io.UnsupportedEncodingException; import java.util.ResourceBundle; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.XMLFormatter; //@TestTargetClass(XMLFormatter.class) public class XMLFormatterTest extends TestCase { XMLFormatter formatter = null; MockHandler handler = null; LogRecord lr = null; protected void setUp() throws Exception { super.setUp(); formatter = new XMLFormatter(); handler = new MockHandler(); lr = new LogRecord(Level.SEVERE, "pattern"); } /* * test for constructor public XMLFormatter() * @TestTargets({ @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "XMLFormatter", args = {} ), @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "getHead", args = {java.util.logging.Handler.class} ), @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "getTail", args = {java.util.logging.Handler.class} ) }) */ public void testXMLFormatter() throws SecurityException, UnsupportedEncodingException { handler.setEncoding("UTF-8"); String result = formatter.getHead(handler); int headPos = result .indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"); int dtdPos = result.indexOf("<!DOCTYPE log SYSTEM \"logger.dtd\">"); int rootPos = result.indexOf("<log>"); assertTrue("head string position should be more or equal zero", headPos >= 0); assertTrue("dtd string position should be more head string position", dtdPos > headPos); assertTrue("root string position should be more dtd string position", rootPos > dtdPos); assertTrue("Tail string position should be more zero", formatter .getTail(handler).indexOf("/log>") > 0); } /* @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "format", args = {java.util.logging.LogRecord.class} ) */ public void testLocalFormat() { // if set resource bundle, output will use localized message, // but put the original message into the key element // further more, if message pattern has no effect ResourceBundle rb = ResourceBundle .getBundle("bundles/java/util/logging/res"); lr.setResourceBundle(rb); lr.setMessage("pattern"); String result = formatter.format(lr); assertTrue(result.indexOf("<message>" + rb.getString("pattern") + "</message>") > 0); assertTrue(result.indexOf("<key>pattern</key>") > 0); lr.setMessage("msg"); result = formatter.format(lr); assertTrue(result.indexOf("<message>" + rb.getString("msg") + "</message>") > 0); assertTrue(result.indexOf("<key>msg</key>") > 0); lr.setMessage("pattern {0, number}"); result = formatter.format(lr); assertTrue(result.indexOf("<message>pattern {0, number}</message>") > 0); assertTrue(result.indexOf("<key>") < 0); // if message has no relevant localized message, use the original lr.setMessage("bad key"); result = formatter.format(lr); assertTrue(result.indexOf("<message>bad key</message>") > 0); assertTrue(result.indexOf("<key>") < 0); } /* @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "format", args = {java.util.logging.LogRecord.class} ) */ public void testFullFormat() { lr.setSourceClassName("source class"); lr.setSourceMethodName("source method"); lr.setLoggerName("logger name"); lr.setMillis(0); lr.setThrown(new Throwable("message")); lr.setParameters(new Object[] { "100", "200" }); lr.setSequenceNumber(1); ResourceBundle rb = ResourceBundle .getBundle("bundles/java/util/logging/res"); lr.setResourceBundle(rb); lr.setResourceBundleName("rbname"); String output = formatter.format(lr); // System.out.println(output); assertTrue(output.indexOf("<record>") >= 0); assertTrue(output.indexOf("<date>") >= 0); assertTrue(output.indexOf("<millis>0</millis>") >= 0); assertTrue(output.indexOf("<sequence>") >= 0); assertTrue(output.indexOf("<level>SEVERE</level>") >= 0); assertTrue(output.indexOf("<thread>") >= 0); assertTrue(output.indexOf("<message>" + rb.getString("pattern") + "</message>") >= 0); assertTrue(output.indexOf("<logger>logger name</logger>") > 0); assertTrue(output.indexOf("<class>source class</class>") > 0); assertTrue(output.indexOf("<method>source method</method>") > 0); assertTrue(output.indexOf("<catalog>rbname</catalog>") > 0); assertTrue(output.indexOf("<param>100</param>") > 0); assertTrue(output.indexOf("<param>200</param>") > 0); assertTrue(output.indexOf("<exception>") > 0); assertTrue(output.indexOf("<key>pattern</key>") > 0); } /* @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "format", args = {java.util.logging.LogRecord.class} ) */ public void testFormat() { String output = formatter.format(lr); // System.out.println(output); assertTrue(output.indexOf("<record>") >= 0); assertTrue(output.indexOf("<date>") >= 0); assertTrue(output.indexOf("<millis>") >= 0); assertTrue(output.indexOf("<sequence>") >= 0); assertTrue(output.indexOf("<level>SEVERE</level>") >= 0); assertTrue(output.indexOf("<thread>") >= 0); assertTrue(output.indexOf("<message>pattern</message>") >= 0); assertTrue(output.indexOf("<logger>") < 0); assertTrue(output.indexOf("<class>") < 0); assertTrue(output.indexOf("<method>") < 0); assertTrue(output.indexOf("<catalog>") < 0); assertTrue(output.indexOf("<param>") < 0); assertTrue(output.indexOf("<exception>") < 0); assertTrue(output.indexOf("<key>") < 0); } /* @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "getHead", args = {java.util.logging.Handler.class} ) */ public void testGetHead() throws SecurityException, UnsupportedEncodingException { String result = formatter.getHead(handler); assertNull(handler.getEncoding()); // TODO: where do we get the default encoding from? // assertTrue(result.indexOf(defaultEncoding)>0); handler.setEncoding("ISO-8859-1"); String head = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\"?>"; String dtd = "<!DOCTYPE log SYSTEM \"logger.dtd\">"; String rootELement = "<log>"; result = formatter.getHead(handler); int headPos = result.indexOf(head); int dtdPos = result.indexOf(dtd); int rootPos = result.indexOf(rootELement); assertTrue(headPos >= 0); assertTrue(dtdPos > headPos); assertTrue(rootPos > dtdPos); handler.setEncoding(null); result = formatter.getHead(handler); assertNull(handler.getEncoding()); // make sure no NPE is thrown formatter.getHead(null); } /* * test for method public String getTail(Handler h) @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "getTail", args = {java.util.logging.Handler.class} ) */ public void testGetTail() { assertEquals( "Tail string with null handler should be equal expected value", "</log>", formatter.getTail(null).trim()); assertEquals("Tail string should be equal expected value", "</log>", formatter.getTail(handler).trim()); handler.publish(lr); assertEquals( "Tail string after publish() should be equal expected value", "</log>", formatter.getTail(handler).trim()); } /* @TestTargets({ @TestTargetNew( level = TestLevel.PARTIAL_COMPLETE, notes = "", method = "format", args = {java.util.logging.LogRecord.class} ), @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "getTail", args = {java.util.logging.Handler.class} ), @TestTargetNew( level = TestLevel.COMPLETE, notes = "", method = "XMLFormatter", args = {} ) }) @AndroidOnly("This test fails on RI. Output doesn't contain " + "<message/>.") */ public void testInvalidParameter() { formatter.getTail(null); try { formatter.format(null); fail(); } catch (NullPointerException e) { } formatter = new XMLFormatter(); lr = new LogRecord(Level.SEVERE, null); String output = formatter.format(lr); assertTrue(output.indexOf("<message/>") != -1); } public static class MockHandler extends Handler { public void close() { } public void flush() { } public void publish(LogRecord record) { } } }