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