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.text.MessageFormat; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Locale; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ResourceBundle; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Formatter; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Level; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogRecord; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class FormatterTest extends TestCase { 308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Formatter f; 318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath LogRecord r; 338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath static String MSG = "msg, pls. ignore it"; 358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath /* 378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @see TestCase#setUp() 388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath protected void setUp() throws Exception { 408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath super.setUp(); 418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath f = new MockFormatter(); 428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r = new LogRecord(Level.FINE, MSG); 438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testFormat() { 468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals("format", f.format(r)); 478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testGetHead() { 508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals("", f.getHead(null)); 518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testGetTail() { 548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals("", f.getTail(null)); 558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testFormatMessage() { 588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(MSG, f.formatMessage(r)); 598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String pattern = "test formatter {0, number}"; 618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage(pattern); 628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(pattern, f.formatMessage(r)); 638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Object[] oa = new Object[0]; 658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setParameters(oa); 668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(pattern, f.formatMessage(r)); 678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath oa = new Object[] { new Integer(100), new Float(1.1) }; 698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setParameters(oa); 708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(MessageFormat.format(pattern, oa), f.formatMessage(r)); 718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage(MSG); 738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(MSG, f.formatMessage(r)); 748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath pattern = "wrong pattern {0, asdfasfd}"; 768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage(pattern); 778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(pattern, f.formatMessage(r)); 788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath pattern = "pattern without 0 {1, number}"; 808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage(pattern); 818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(pattern, f.formatMessage(r)); 828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath pattern = null; 848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage(pattern); 858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertNull(f.formatMessage(r)); 868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void testLocalizedFormatMessage() { 898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // normal case 908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage("msg"); 918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath ResourceBundle rb = ResourceBundle 9284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller .getBundle("bundles/com/android/java/util/logging/res"); 938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setResourceBundle(rb); 948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(rb.getString("msg"), f.formatMessage(r)); 958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // local message is a pattern 978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage("pattern"); 988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Object[] oa = new Object[] { new Integer(3) }; 998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setParameters(oa); 1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(MessageFormat.format(rb.getString("pattern"), oa), f 1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath .formatMessage(r)); 1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // key is a pattern, but local message is not 1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage("pattern{0,number}"); 1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath oa = new Object[] { new Integer(3) }; 1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setParameters(oa); 1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(rb.getString("pattern{0,number}"), f.formatMessage(r)); 1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // another bundle 11084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller rb = ResourceBundle.getBundle("bundles/com/android/java/util/logging/res", 1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath Locale.US); 1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage("msg"); 1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setResourceBundle(rb); 1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals(rb.getString("msg"), f.formatMessage(r)); 1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // cannot find local message in bundle 1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage("msg without locale"); 1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals("msg without locale", f.formatMessage(r)); 1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath // set bundle name but not bundle 1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setResourceBundle(null); 12284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller r.setResourceBundleName("bundles/com/android/java/util/logging/res"); 1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath r.setMessage("msg"); 1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath assertEquals("msg", f.formatMessage(r)); 1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public static class MockFormatter extends Formatter { 1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public String format(LogRecord arg0) { 1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath return "format"; 1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 136