1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package org.apache.harmony.logging.tests.java.util.logging; 19 20import java.text.MessageFormat; 21import java.util.Locale; 22import java.util.ResourceBundle; 23import java.util.logging.Formatter; 24import java.util.logging.Level; 25import java.util.logging.LogRecord; 26 27import junit.framework.TestCase; 28 29public class FormatterTest extends TestCase { 30 Formatter f; 31 32 LogRecord r; 33 34 static String MSG = "msg, pls. ignore it"; 35 36 /* 37 * @see TestCase#setUp() 38 */ 39 protected void setUp() throws Exception { 40 super.setUp(); 41 f = new MockFormatter(); 42 r = new LogRecord(Level.FINE, MSG); 43 } 44 45 public void testFormat() { 46 assertEquals("format", f.format(r)); 47 } 48 49 public void testGetHead() { 50 assertEquals("", f.getHead(null)); 51 } 52 53 public void testGetTail() { 54 assertEquals("", f.getTail(null)); 55 } 56 57 public void testFormatMessage() { 58 assertEquals(MSG, f.formatMessage(r)); 59 60 String pattern = "test formatter {0, number}"; 61 r.setMessage(pattern); 62 assertEquals(pattern, f.formatMessage(r)); 63 64 Object[] oa = new Object[0]; 65 r.setParameters(oa); 66 assertEquals(pattern, f.formatMessage(r)); 67 68 oa = new Object[] { new Integer(100), new Float(1.1) }; 69 r.setParameters(oa); 70 assertEquals(MessageFormat.format(pattern, oa), f.formatMessage(r)); 71 72 r.setMessage(MSG); 73 assertEquals(MSG, f.formatMessage(r)); 74 75 pattern = "wrong pattern {0, asdfasfd}"; 76 r.setMessage(pattern); 77 assertEquals(pattern, f.formatMessage(r)); 78 79 pattern = "pattern without 0 {1, number}"; 80 r.setMessage(pattern); 81 assertEquals(pattern, f.formatMessage(r)); 82 83 pattern = null; 84 r.setMessage(pattern); 85 assertNull(f.formatMessage(r)); 86 } 87 88 public void testLocalizedFormatMessage() { 89 // normal case 90 r.setMessage("msg"); 91 ResourceBundle rb = ResourceBundle 92 .getBundle("bundles/com/android/java/util/logging/res"); 93 r.setResourceBundle(rb); 94 assertEquals(rb.getString("msg"), f.formatMessage(r)); 95 96 // local message is a pattern 97 r.setMessage("pattern"); 98 Object[] oa = new Object[] { new Integer(3) }; 99 r.setParameters(oa); 100 assertEquals(MessageFormat.format(rb.getString("pattern"), oa), f 101 .formatMessage(r)); 102 103 // key is a pattern, but local message is not 104 r.setMessage("pattern{0,number}"); 105 oa = new Object[] { new Integer(3) }; 106 r.setParameters(oa); 107 assertEquals(rb.getString("pattern{0,number}"), f.formatMessage(r)); 108 109 // another bundle 110 rb = ResourceBundle.getBundle("bundles/com/android/java/util/logging/res", 111 Locale.US); 112 r.setMessage("msg"); 113 r.setResourceBundle(rb); 114 assertEquals(rb.getString("msg"), f.formatMessage(r)); 115 116 // cannot find local message in bundle 117 r.setMessage("msg without locale"); 118 assertEquals("msg without locale", f.formatMessage(r)); 119 120 // set bundle name but not bundle 121 r.setResourceBundle(null); 122 r.setResourceBundleName("bundles/com/android/java/util/logging/res"); 123 r.setMessage("msg"); 124 assertEquals("msg", f.formatMessage(r)); 125 } 126 127 public static class MockFormatter extends Formatter { 128 129 public String format(LogRecord arg0) { 130 return "format"; 131 } 132 133 } 134 135} 136