1021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson/*
2021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more
3021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * contributor license agreements.  See the NOTICE file distributed with
4021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * this work for additional information regarding copyright ownership.
5021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
6021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * (the "License"); you may not use this file except in compliance with
7021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * the License.  You may obtain a copy of the License at
8021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *
9021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
10021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *
11021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * Unless required by applicable law or agreed to in writing, software
12021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
13021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * See the License for the specific language governing permissions and
15021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * limitations under the License.
16021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson */
17021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
18021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonpackage libcore.java.util.logging;
19021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
20021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.Locale;
21021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.MissingResourceException;
22021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.ResourceBundle;
23021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Filter;
24021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Handler;
25021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Level;
26021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.LogManager;
27021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.LogRecord;
28021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Logger;
29021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport junit.framework.TestCase;
30021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
31021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonpublic class OldLoggerTest extends TestCase {
32021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private final static String VALID_RESOURCE_BUNDLE = "bundles/java/util/logging/res";
33021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private final static String INVALID_RESOURCE_BUNDLE = "impossible_not_existing";
34021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private final static String VALID_KEY = "LOGGERTEST";
35021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private final static String VALID_VALUE = "Test_ZH_CN";
36021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
37021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    @Override protected void setUp() throws Exception {
38021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        super.setUp();
39021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        LogManager.getLogManager().reset();
40021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Locale.setDefault(new Locale("zh", "CN"));
41021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
42021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
43021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    @Override protected void tearDown() throws Exception {
44021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        LogManager.getLogManager().reset();
45021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        super.tearDown();
46021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
47021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
48021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLoggerWithRes_InvalidResourceBundle() {
49021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(LogManager.getLogManager().getLogger(
50021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                "testMissingResourceException"));
51021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
52021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotNull(LogManager.getLogManager().getLogger(""));
53021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // The root logger always exists TODO
54021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        try {
55021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            Logger.getLogger("", INVALID_RESOURCE_BUNDLE);
56021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            fail();
57021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        } catch (MissingResourceException expected) {
58021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
59021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
60021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
61021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGlobalLogger() {
62021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(Logger.global.getFilter());
63021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(0, Logger.global.getHandlers().length);
64021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(Logger.global.getLevel());
65021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("global", Logger.global.getName());
66021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(Logger.global.getParent().getParent());
67021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(Logger.global.getResourceBundle());
68021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(Logger.global.getResourceBundleName());
69021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(Logger.global.getUseParentHandlers());
70021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(Logger.global, Logger.getLogger("global"));
71da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes        assertSame(Logger.global, LogManager.getLogManager().getLogger("global"));
72da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes        assertSame(Logger.global, Logger.getGlobal());
73021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
74021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
75021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testConstructor_Normal() {
76021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        MockLogger mlog = new MockLogger("myname", VALID_RESOURCE_BUNDLE);
77021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getFilter());
78021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(0, mlog.getHandlers().length);
79021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getLevel());
80021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("myname", mlog.getName());
81021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getParent());
82021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        ResourceBundle rb = mlog.getResourceBundle();
83021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(VALID_VALUE, rb.getString(VALID_KEY));
84021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(mlog.getResourceBundleName(), VALID_RESOURCE_BUNDLE);
85021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(mlog.getUseParentHandlers());
86021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
87021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
88021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testConstructor_Null() {
89021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        MockLogger mlog = new MockLogger(null, null);
90021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getFilter());
91021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(0, mlog.getHandlers().length);
92021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getLevel());
93021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getName());
94021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getParent());
95021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getResourceBundle());
96021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(mlog.getResourceBundleName());
97021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(mlog.getUseParentHandlers());
98021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
99021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
100021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testConstructor_InvalidName() {
101021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        MockLogger mlog = new MockLogger("...#$%%^&&()-_+=!@~./,[]{};:'\\\"?|",
102021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                null);
103021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("...#$%%^&&()-_+=!@~./,[]{};:'\\\"?|", mlog.getName());
104021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
105021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
106021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
107021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * Test constructor with empty name.
108021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
109021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testConstructor_EmptyName() {
110021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        MockLogger mlog = new MockLogger("", null);
111021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("", mlog.getName());
112021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
113021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
114021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testConstructor_InvalidResourceBundle() {
115021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        try {
116021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            new MockLogger("testConstructor_InvalidResourceBundle",
117021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                    INVALID_RESOURCE_BUNDLE);
118021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            fail("Should throw MissingResourceException!");
119021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        } catch (MissingResourceException expected) {
120021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
121021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
122021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
123021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLogger_Null() {
124021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        try {
125021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            Logger.getLogger(null, null);
126021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            fail("Should throw NullPointerException!");
127021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        } catch (NullPointerException expected) {
128021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
129021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
130021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
131021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLogger_WithParent() {
132021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(LogManager.getLogManager().getLogger(
133021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                "testGetLogger_WithParent_ParentLogger"));
134021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
135021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // get root of hierarchy
136021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger root = Logger.getLogger("");
137021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // create the parent logger
138021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger pLog = Logger.getLogger("testGetLogger_WithParent_ParentLogger",
139021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                VALID_RESOURCE_BUNDLE);
140021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        pLog.setLevel(Level.CONFIG);
141021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        pLog.addHandler(new MockHandler());
142021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        pLog.setFilter(new MockFilter());
143021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        pLog.setUseParentHandlers(false);
144021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // check root parent
145021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("testGetLogger_WithParent_ParentLogger", pLog.getName());
146021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(pLog.getParent(), root);
147021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
148021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // child part
149021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(LogManager.getLogManager().getLogger(
150021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                "testGetLogger_WithParent_ParentLogger.child"));
151021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // create the child logger
152021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger child = Logger
153021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getLogger("testGetLogger_WithParent_ParentLogger.child");
154021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(child.getFilter());
155021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(0, child.getHandlers().length);
156021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(child.getLevel());
157021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("testGetLogger_WithParent_ParentLogger.child", child
158021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getName());
159021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(child.getParent(), pLog);
160021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(child.getResourceBundle());
161021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(child.getResourceBundleName());
162021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(child.getUseParentHandlers());
163021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
164021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // create not valid child
165021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger notChild = Logger
166021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getLogger("testGetLogger_WithParent_ParentLogger1.child");
167021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(notChild.getFilter());
168021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(0, notChild.getHandlers().length);
169021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(notChild.getLevel());
170021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("testGetLogger_WithParent_ParentLogger1.child", notChild
171021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getName());
172021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotSame(notChild.getParent(), pLog);
173021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(notChild.getResourceBundle());
174021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(notChild.getResourceBundleName());
175021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(notChild.getUseParentHandlers());
176021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // verify two level root.parent
177021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("testGetLogger_WithParent_ParentLogger.child", child
178021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getName());
179021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(child.getParent().getParent(), root);
180021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
181021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
182021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // create three level child
183021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger childOfChild = Logger
184021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getLogger("testGetLogger_WithParent_ParentLogger.child.child");
185021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(childOfChild.getFilter());
186021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(0, childOfChild.getHandlers().length);
187021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(child.getParent().getParent(), root);
188021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(childOfChild.getLevel());
189021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("testGetLogger_WithParent_ParentLogger.child.child",
190021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                childOfChild.getName());
191021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
192021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(childOfChild.getParent(), child);
193021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(childOfChild.getParent().getParent(), pLog);
194021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(childOfChild.getParent().getParent().getParent(), root);
195021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(childOfChild.getResourceBundle());
196021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull(childOfChild.getResourceBundleName());
197021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(childOfChild.getUseParentHandlers());
198021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
199021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // abnormal case : lookup to root parent in a hierarchy without a logger
200021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // parent created between
201021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("testGetLogger_WithParent_ParentLogger1.child", notChild
202021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getName());
203021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(child.getParent().getParent(), root);
204021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotSame(child.getParent(), root);
205021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
206021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // abnormal cases
207021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotSame(root.getParent(), root);
208021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger twoDot = Logger.getLogger("..");
209021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(twoDot.getParent(), root);
210021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
211021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
212021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
213021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockLogger extends Logger {
214021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public MockLogger(String name, String resourceBundleName) {
215021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            super(name, resourceBundleName);
216021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
217021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
218021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
219021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockHandler extends Handler {
220021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void close() {}
221021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void flush() {}
222021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void publish(LogRecord record) {}
223021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
224021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
225021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockFilter implements Filter {
226021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public boolean isLoggable(LogRecord record) {
227021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            return false;
228021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
229021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
230021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson}
231