blob: 90c93c98c6a82325a05e08c4231268a45f51804b [file] [log] [blame]
/*
* 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) {
}
}
}