1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.logging.tests.java.util.logging;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Projectimport java.beans.PropertyChangeEvent;
23a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Projectimport java.beans.PropertyChangeListener;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PrintStream;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Enumeration;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Properties;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.ConsoleHandler;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Handler;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Level;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LogManager;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LogRecord;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Logger;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LoggingPermission;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
382be0c815dda289b09f3bb26f751c124f30eaf612Jesse Wilsonimport dalvik.annotation.KnownFailure;
39fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport junit.framework.TestCase;
40fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
41fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport org.apache.harmony.logging.tests.java.util.logging.HandlerTest.NullOutputStream;
42fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper;
43fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
44fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport dalvik.annotation.SideEffect;
45fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport dalvik.annotation.TestLevel;
46fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport dalvik.annotation.TestTargetClass;
47fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport dalvik.annotation.TestTargetNew;
48fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumannimport dalvik.annotation.TestTargets;
49dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilsonimport tests.util.TestEnvironment;
50fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * add/get logger(dot)
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(LogManager.class)
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class LogManagerTest extends TestCase {
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final String FOO = "LogManagerTestFoo";
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    LogManager mockManager;
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    LogManager manager = LogManager.getLogManager();
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        MockPropertyChangeListener listener;
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Properties props;
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static String className = LogManagerTest.class.getName();
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static Handler handler = null;
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final String CONFIG_CLASS = "java.util.logging.config.class";
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final String CONFIG_FILE = "java.util.logging.config.file";
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final String MANAGER_CLASS = "java.util.logging.config.manager";
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final SecurityManager securityManager = System.getSecurityManager();
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final String clearPath = System.getProperty("clearpath");
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see TestCase#setUp()
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
86a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    @Override
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager = new MockLogManager();
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //        listener = new MockPropertyChangeListener();
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new MockHandler();
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props = new Properties();
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("handlers", className + "$MockHandler " + className + "$MockHandler");
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.pattern", "%h/java%u.log");
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.limit", "50000");
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.count", "5");
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.formatter", "java.util.logging.XMLFormatter");
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put(".level", "FINE");
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.ConsoleHandler.level", "OFF");
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.ConsoleHandler.formatter","java.util.logging.SimpleFormatter");
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("LogManagerTestFoo.handlers", "java.util.logging.ConsoleHandler");
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("LogManagerTestFoo.level", "WARNING");
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see TestCase#tearDown()
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
110a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    @Override
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void tearDown() throws Exception {
112dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        TestEnvironment.reset();
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.tearDown();
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = null;
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "LogManager",
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testLogManager() {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project       class TestLogManager extends LogManager {
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project           public TestLogManager() {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               super();
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project           }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project       }
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project       TestLogManager tlm = new TestLogManager();
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project       assertNotNull(tlm.toString());
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies NullPointerException.",
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies NullPointerException.",
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAddGetLogger() {
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger log = new MockLogger(FOO, null);
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = mockManager.getLogger(FOO);
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo);
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(log));
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        foo = mockManager.getLogger(FOO);
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, log);
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getParent());
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.addLogger(null);
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("add null should throw NullPointerException");
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.getLogger(null);
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("get null should throw NullPointerException");
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(mockManager.getLogger("bad name"));
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration<String> enumar = mockManager.getLoggerNames();
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int i = 0;
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (enumar.hasMoreElements()) {
173a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            String name = enumar.nextElement();
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            i++;
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(FOO, name);
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(i, 1);
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAddGetLogger_duplicateName() {
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // add logger with duplicate name has no effect
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger(FOO, null);
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo2 = new MockLogger(FOO, null);
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, mockManager.getLogger(FOO));
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(mockManager.addLogger(foo2));
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, mockManager.getLogger(FOO));
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration<String> enumar = mockManager.getLoggerNames();
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int i = 0;
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (enumar.hasMoreElements()) {
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            enumar.nextElement();
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            i++;
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(1, i);
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAddGetLogger_Hierachy() {
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger("testAddGetLogger_Hierachy.foo", null);
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger child = new MockLogger("testAddGetLogger_Hierachy.foo.child", null);
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fakeChild = new MockLogger("testAddGetLogger_Hierachy.foo2.child", null);
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger grandson = new MockLogger("testAddGetLogger_Hierachy.foo.child.grandson", null);
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger otherChild = new MockLogger("testAddGetLogger_Hierachy.foo.child", null);
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getParent());
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(child.getParent());
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(grandson.getParent());
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(otherChild.getParent());
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // whenever a logger is added to a LogManager, hierarchy will be updated
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // accordingly
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(child));
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(child.getParent());
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fakeChild));
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(fakeChild.getParent());
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(grandson));
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(child, grandson.getParent());
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, child.getParent());
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getParent());
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(fakeChild.getParent());
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // but for non-mock LogManager, foo's parent should be root
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(manager.addLogger(foo));
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(manager.getLogger(""), manager.getLogger("testAddGetLogger_Hierachy.foo")
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getParent());
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // if we add one logger to two LogManager, parent will changed
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(manager.addLogger(otherChild));
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(manager.addLogger(grandson));
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, otherChild.getParent());
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(otherChild, grandson.getParent());
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAddLoggerReverseOrder() {
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = new MockLogger("testAddLoggerReverseOrder", null);
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger("testAddLoggerReverseOrder.foo", null);
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooChild = new MockLogger("testAddLoggerReverseOrder.foo.child", null);
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooGrandChild = new MockLogger("testAddLoggerReverseOrder.foo.child.grand", null);
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooGrandChild2 = new MockLogger("testAddLoggerReverseOrder.foo.child.grand2", null);
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger realRoot = manager.getLogger("");
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(fooGrandChild);
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(realRoot, fooGrandChild.getParent());
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(root);
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, fooGrandChild.getParent());
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(realRoot, root.getParent());
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(foo);
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, foo.getParent());
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooGrandChild.getParent());
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(fooGrandChild2);
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooGrandChild2.getParent());
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooGrandChild.getParent());
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(fooChild);
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooChild, fooGrandChild2.getParent());
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooChild, fooGrandChild.getParent());
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooChild.getParent());
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, foo.getParent());
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(realRoot, root.getParent());
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "addLogger",
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.Logger.class}
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAddSimiliarLogger() {
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = new MockLogger("testAddSimiliarLogger", null);
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger("testAddSimiliarLogger.foo", null);
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger similiarFoo = new MockLogger("testAddSimiliarLogger.fop", null);
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooo = new MockLogger("testAddSimiliarLogger.fooo", null);
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooChild = new MockLogger("testAddSimiliarLogger.foo.child", null);
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger similiarFooChild = new MockLogger("testAddSimiliarLogger.fop.child", null);
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foooChild = new MockLogger("testAddSimiliarLogger.fooo.child", null);
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(root);
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(fooChild);
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(similiarFooChild);
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(foooChild);
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, fooChild.getParent());
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, similiarFooChild.getParent());
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, foooChild.getParent());
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(foo);
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooChild.getParent());
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, similiarFooChild.getParent());
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, foooChild.getParent());
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(similiarFoo);
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooChild.getParent());
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(similiarFoo, similiarFooChild.getParent());
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, foooChild.getParent());
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(fooo);
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooo, foooChild.getParent());
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAddGetLogger_nameWithSpace() {
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger(FOO, null);
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooBeforeSpace = new MockLogger(FOO + " ", null);
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooAfterSpace = new MockLogger(" " + FOO, null);
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooWithBothSpace = new MockLogger(" " + FOO + " ", null);
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooBeforeSpace));
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooAfterSpace));
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooWithBothSpace));
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, mockManager.getLogger(FOO));
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooBeforeSpace, mockManager.getLogger(FOO + " "));
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooAfterSpace, mockManager.getLogger(" " + FOO));
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooWithBothSpace, mockManager.getLogger(" " + FOO + " "));
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Doesn't verify NullPointerException",
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
391a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    public void testAddGetLogger_addRoot() {
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger(FOO, null);
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooChild = new MockLogger(FOO + ".child", null);
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger other = new MockLogger("other", null);
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = new MockLogger("", null);
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getParent());
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(root.getParent());
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(other.getParent());
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // add root to mock logmanager and it works as "root" logger
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(other));
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooChild));
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getParent());
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(other.getParent());
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, fooChild.getParent());
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(root));
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, foo.getParent());
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, other.getParent());
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(root.getParent());
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // try to add root logger to non-mock LogManager, no effect
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(manager.addLogger(root));
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotSame(root, manager.getLogger(""));
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.logging.LogManager#addLogger(Logger)
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addLogger",
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.Logger.class}
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogManager",
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_addLoggerLLogger_Security() throws Exception {
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for Harmony-1286
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager originalSecurityManager = System.getSecurityManager();
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new SecurityManager() {
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            @Override
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission perm) {
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        });
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager manager = LogManager.getLogManager();
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.addLogger(new MockLogger("mock", null));
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.addLogger(new MockLogger("mock.child", null));
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(originalSecurityManager);
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testDefaultLoggerProperties() throws Exception {
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // mock LogManager has no default logger
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(mockManager.getLogger(""));
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(mockManager.getLogger("global"));
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // non-mock LogManager has two default logger
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger global = manager.getLogger("global");
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = manager.getLogger("");
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(global, Logger.global);
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, global.getParent());
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
471fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        Logger oldGlobal = global;
472fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        Logger oldRoot = root;
473fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // root properties
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
476fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
477fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        global = manager.getLogger("global");
478fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        root = manager.getLogger("");
479fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
480fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        assertSame(oldGlobal, global);
481fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        assertSame(oldRoot, root);
482fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(root.getFilter());
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(2, root.getHandlers().length);
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.FINE, root.getLevel());
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("", root.getName());
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root.getParent(), null);
488fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        assertTrue(root.getUseParentHandlers());
489fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann
490fffac59be4a315be652b9f02f70858171c20c99fJorg Pleumann        // The following two fail if other tests are run before this one.
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(root.getResourceBundle());
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(root.getResourceBundleName());
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public Logger getLogger(String name)
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test covers following usecases:
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case 1: test default and valid value
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case 2: test throw NullPointerException
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case 3: test bad name
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * case 4: check correct tested value
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLoggerNames",
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetLogger() throws Exception {
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // case 1: test default and valid value
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger log = new MockLogger(FOO, null);
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = mockManager.getLogger(FOO);
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull("Logger should be null", foo);
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("logger was't registered successfully", mockManager.addLogger(log));
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        foo = mockManager.getLogger(FOO);
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame("two loggers not refer to the same object", foo, log);
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull("logger foo should not haven parent", foo.getParent());
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // case 2: test throw NullPointerException
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.getLogger(null);
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("get null should throw NullPointerException");
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // case 3: test bad name
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull("LogManager should not have logger with unforeseen name", mockManager
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLogger("bad name"));
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // case 4: check correct tested value
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration<String> enumar = mockManager.getLoggerNames();
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int i = 0;
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (enumar.hasMoreElements()) {
544a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            String name = enumar.nextElement();
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            i++;
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("name logger should be equal to foreseen name", FOO, name);
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("LogManager should contain one element", 1, i);
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public Logger getLogger(String name)
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogger",
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL,
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLoggerNames",
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetLogger_duplicateName() throws Exception {
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test duplicate name
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // add logger with duplicate name has no effect
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.reset();
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo2 = new MockLogger(FOO, null);
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo3 = new MockLogger(FOO, null);
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.addLogger(foo2);
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo2, mockManager.getLogger(FOO));
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.addLogger(foo3);
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo2, mockManager.getLogger(FOO));
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration<String> enumar2 = mockManager.getLoggerNames();
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int i = 0;
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (enumar2.hasMoreElements()) {
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            enumar2.nextElement();
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            i++;
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(1, i);
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public Logger getLogger(String name)
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getLogger",
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetLogger_hierachy() throws Exception {
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test hierachy
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger("testGetLogger_hierachy.foo", null);
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // but for non-mock LogManager, foo's parent should be root
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(manager.addLogger(foo));
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(manager.getLogger(""), manager.getLogger("testGetLogger_hierachy.foo")
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getParent());
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public Logger getLogger(String name)
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getLogger",
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetLogger_nameSpace() throws Exception {
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test name with space
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger(FOO, null);
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooBeforeSpace = new MockLogger(FOO + " ", null);
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooAfterSpace = new MockLogger(" " + FOO, null);
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fooWithBothSpace = new MockLogger(" " + FOO + " ", null);
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooBeforeSpace));
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooAfterSpace));
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fooWithBothSpace));
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(foo, mockManager.getLogger(FOO));
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooBeforeSpace, mockManager.getLogger(FOO + " "));
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooAfterSpace, mockManager.getLogger(" " + FOO));
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(fooWithBothSpace, mockManager.getLogger(" " + FOO + " "));
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public void checkAccess() throws SecurityException
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "checkAccess",
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogManager",
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testCheckAccess() {
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.checkAccess();
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("securityException should not be thrown");
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManagerLogPermission());
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.addLogger(new MockLogger("abc", null));
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.getLogger("");
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.getLoggerNames();
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.getProperty(".level");
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager();
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.checkAccess();
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw securityException");
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(securityManager);
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "readConfiguration",
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.io.InputStream.class}
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "readConfiguration",
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "checkAccess",
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "reset",
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLogManager",
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
700a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        ),
701a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        @TestTargetNew(
702a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
703a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            notes = "Verifies SecurityException.",
704a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            method = "addPropertyChangeListener",
705a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            args = {java.beans.PropertyChangeListener.class}
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testLoggingPermission() throws IOException {
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManagerLogPermission());
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.addLogger(new MockLogger("abc", null));
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.getLogger("");
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.getLoggerNames();
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.getProperty(".level");
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager();
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.checkAccess();
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw securityException");
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.readConfiguration();
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SecurityException");
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SecurityException");
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.readConfiguration(null);
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SecurityException");
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
735a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        try {
736a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            mockManager
737a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project                    .addPropertyChangeListener(new MockPropertyChangeListener());
738a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            fail("should throw SecurityException");
739a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        } catch (SecurityException e) {
740a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
741a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        try {
742a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            mockManager.addPropertyChangeListener(null);
743a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            fail("should throw NPE");
744a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        } catch (NullPointerException e) {
745a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
746a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        try {
747a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            mockManager.removePropertyChangeListener(null);
748a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            fail("should throw SecurityException");
749a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        } catch (SecurityException e) {
750a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.reset();
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SecurityException");
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(securityManager);
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "readConfiguration",
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.io.InputStream.class}
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getProperty",
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testMockGetProperty() throws Exception {
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // mock manager doesn't read configuration until you call
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // readConfiguration()
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = new MockLogger("", null);
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(root));
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        root = mockManager.getLogger("");
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkPropertyNull(mockManager);
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, root.getHandlers().length);
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(root.getLevel());
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.FINE, root.getLevel());
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkProperty(mockManager);
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.reset();
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkPropertyNull(mockManager);
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.INFO, root.getLevel());
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, mockManager.getLogger("").getHandlers().length);
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getProperty",
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetProperty() throws SecurityException, IOException {
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = manager.getLogger("");
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkProperty(manager);
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(2, root.getHandlers().length);
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.FINE, root.getLevel());
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.reset();
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkPropertyNull(manager);
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, root.getHandlers().length);
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.INFO, root.getLevel());
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.reset();
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies NullPointerException.",
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testReadConfiguration_null() throws SecurityException, IOException {
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(null);
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw null pointer exception");
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static void checkPropertyNull(LogManager m) {
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // assertNull(m.getProperty(".level"));
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("java.util.logging.FileHandler.limit"));
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("java.util.logging.ConsoleHandler.formatter"));
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // assertNull(m.getProperty("handlers"));
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("java.util.logging.FileHandler.count"));
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("com.xyz.foo.level"));
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("java.util.logging.FileHandler.formatter"));
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("java.util.logging.ConsoleHandler.level"));
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(m.getProperty("java.util.logging.FileHandler.pattern"));
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8412be0c815dda289b09f3bb26f751c124f30eaf612Jesse Wilson    @KnownFailure("We're ignoring a missing logging.properties. See bug 2487364")
8428d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson    public void testReadConfiguration() throws SecurityException,
8438d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson            IOException {
8448d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson
8458d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        MockConfigLogManager lm = new MockConfigLogManager();
8468d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        assertFalse(lm.isCalled);
8478d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson
8488d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        lm.readConfiguration();
8498d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        assertTrue(lm.isCalled);
8508d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson    }
8518d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static void checkProperty(LogManager m) {
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // assertEquals(m.getProperty(".level"), "INFO");
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("java.util.logging.FileHandler.limit"), "50000");
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("java.util.logging.ConsoleHandler.formatter"),
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.SimpleFormatter");
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // assertEquals(m.getProperty("handlers"),
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // "java.util.logging.ConsoleHandler");
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("java.util.logging.FileHandler.count"), "5");
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("LogManagerTestFoo.level"), "WARNING");
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("java.util.logging.FileHandler.formatter"),
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.XMLFormatter");
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("java.util.logging.ConsoleHandler.level"), "OFF");
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(m.getProperty("java.util.logging.FileHandler.pattern"), "%h/java%u.log");
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    public void testReadConfiguration() throws SecurityException, IOException {
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //          FIXME: move the support_exec
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            Logger foo = new MockLogger("foo", null);
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertNull(foo.getLevel());
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertTrue(mockManager.addLogger(foo));
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            Logger fo = new MockLogger("foo2", null);
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            fo.setLevel(Level.ALL);
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertTrue(mockManager.addLogger(fo));
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            Handler h = new ConsoleHandler();
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            Level l = h.getLevel();
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertNotSame(Level.OFF, h.getLevel());
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            // read configuration
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            mockManager.readConfiguration();
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            // level DO has effect
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertEquals(Level.WARNING, foo.getLevel());
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            // for non specified logger, level is reset to null
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertNull(fo.getLevel());
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            // read properties don't affect handler
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertNotSame(Level.OFF, h.getLevel());
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //            assertSame(l, h.getLevel());
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //    }
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Class under test for void readConfiguration(InputStream)
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testReadConfigurationInputStream() throws IOException {
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger(FOO, null);
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getLevel());
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger fo = new MockLogger(FOO + "2", null);
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fo.setLevel(Level.ALL);
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(fo));
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Handler h = new ConsoleHandler();
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Level l = h.getLevel();
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Level.INFO, h.getLevel());
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // read configuration from stream
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream stream = EnvironmentHelper.PropertiesToInputStream(props);
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.readConfiguration(stream);
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        stream.close();
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // level DOES have an effect on LogManagerTestFoo
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.WARNING, foo.getLevel());
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // for non specified logger, level is reset to null
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(fo.getLevel());
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // read properties don't affect handler
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Level.INFO, h.getLevel());
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(l, h.getLevel());
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies NullPointerException.",
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testReadConfigurationInputStream_null() throws SecurityException, IOException {
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.readConfiguration(null);
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw null pointer exception");
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IOException.",
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testReadConfigurationInputStream_IOException_1parm() throws SecurityException {
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mockManager.readConfiguration(new MockInputStream());
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IOException");
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //ignore
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testReadConfigurationInputStream_root() throws IOException {
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger logger = new MockLogger("testReadConfigurationInputStream_root.foo", null);
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = manager.getLogger("");
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger logger2 = Logger.getLogger("testReadConfigurationInputStream_root.foo2");
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.addLogger(logger);
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(logger.getLevel());
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, logger.getHandlers().length);
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, logger.getParent());
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(logger2.getLevel());
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, logger2.getHandlers().length);
983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(root, logger2.getParent());
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // if (!hasConfigClass) {
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.FINE, root.getLevel());
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(2, root.getHandlers().length);
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // }
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // after read stream
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream stream = EnvironmentHelper.PropertiesToInputStream(props);
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(stream);
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        stream.close();
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.FINE, root.getLevel());
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(2, root.getHandlers().length);
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(logger.getLevel());
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, logger.getHandlers().length);
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.reset();
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1000b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson    public void testReadConfigurationUpdatesRootLoggersHandlers()
1001b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson            throws IOException {
1002b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        Properties properties = new Properties();
1003b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        LogManager.getLogManager().readConfiguration(
1004b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson                EnvironmentHelper.PropertiesToInputStream(properties));
1005b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1006b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        Logger root = Logger.getLogger("");
1007b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        assertEquals(0, root.getHandlers().length);
1008b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1009b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        properties.put("handlers", "java.util.logging.ConsoleHandler");
1010b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        LogManager.getLogManager().readConfiguration(
1011b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson                EnvironmentHelper.PropertiesToInputStream(properties));
1012b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1013b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        assertEquals(1, root.getHandlers().length);
1014b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson    }
1015b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1016b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson    public void testReadConfigurationDoesNotUpdateOtherLoggers()
1017b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson            throws IOException {
1018b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        Properties properties = new Properties();
1019b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        LogManager.getLogManager().readConfiguration(
1020b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson                EnvironmentHelper.PropertiesToInputStream(properties));
1021b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1022b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        Logger logger = Logger.getLogger("testReadConfigurationDoesNotUpdateOtherLoggers");
1023b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        assertEquals(0, logger.getHandlers().length);
1024b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1025b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        properties.put("testReadConfigurationDoesNotUpdateOtherLoggers.handlers",
1026b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson                "java.util.logging.ConsoleHandler");
1027b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        LogManager.getLogManager().readConfiguration(
1028b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson                EnvironmentHelper.PropertiesToInputStream(properties));
1029b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1030b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson        assertEquals(0, logger.getHandlers().length);
1031b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson    }
1032b2721408f3f6a83ffb16f8c3321235bb4415c20eJesse Wilson
1033a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    @TestTargets({
1034a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        @TestTargetNew(
1035a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
1036a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            notes = "",
1037a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            method = "addPropertyChangeListener",
1038a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            args = {java.beans.PropertyChangeListener.class}
1039a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        ),
1040a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        @TestTargetNew(
1041a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
1042a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            notes = "",
1043a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            method = "removePropertyChangeListener",
1044a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            args = {java.beans.PropertyChangeListener.class}
1045a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        )
1046a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    })
1047a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    public void testAddRemovePropertyChangeListener() throws Exception {
1048a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        MockPropertyChangeListener listener1 = new MockPropertyChangeListener();
1049a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        MockPropertyChangeListener listener2 = new MockPropertyChangeListener();
1050a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // add same listener1 two times
1051a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.addPropertyChangeListener(listener1);
1052a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.addPropertyChangeListener(listener1);
1053a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.addPropertyChangeListener(listener2);
1054a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1055a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNull(listener1.getEvent());
1056a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNull(listener2.getEvent());
1057a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1058a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // if (!hasConfigClass) {
1059a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNotNull(listener1.getEvent());
1060a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNotNull(listener2.getEvent());
1061a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // }
1062a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1063a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        listener1.reset();
1064a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        listener2.reset();
1065a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1066a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // remove listener1, no effect
1067a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.removePropertyChangeListener(listener1);
1068a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.readConfiguration(EnvironmentHelper
1069a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project                .PropertiesToInputStream(props));
1070a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNotNull(listener1.getEvent());
1071a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNotNull(listener2.getEvent());
1072a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        listener1.reset();
1073a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        listener2.reset();
1074a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1075a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // remove listener1 again and it works
1076a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.removePropertyChangeListener(listener1);
1077a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.readConfiguration(EnvironmentHelper
1078a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project                .PropertiesToInputStream(props));
1079a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNull(listener1.getEvent());
1080a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNotNull(listener2.getEvent());
1081a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        listener2.reset();
1082a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1083a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // reset don't produce event
1084a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.reset();
1085a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNull(listener2.getEvent());
1086a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1087a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.removePropertyChangeListener(listener2);
1088a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1089a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNull(listener1.getEvent());
1090a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        assertNull(listener2.getEvent());
1091a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    }
1092a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1093a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    @TestTargets({
1094a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        @TestTargetNew(
1095a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
1096a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            notes = "",
1097a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            method = "addPropertyChangeListener",
1098a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            args = {java.beans.PropertyChangeListener.class}
1099a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        ),
1100a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        @TestTargetNew(
1101a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
1102a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            notes = "",
1103a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            method = "removePropertyChangeListener",
1104a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            args = {java.beans.PropertyChangeListener.class}
1105a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        )
1106a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    })
1107a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    public void testAddRemovePropertyChangeListener_null() {
1108a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        // seems nothing happened
1109a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        try{
1110a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            mockManager.addPropertyChangeListener(null);
1111a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            fail("Should throw NPE");
1112a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }catch(NullPointerException e){
1113a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
1114a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        mockManager.removePropertyChangeListener(null);
1115a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    }
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify SecurityException.",
1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "reset",
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testReset() throws SecurityException, IOException {
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // mock LogManager
1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(mockManager.getProperty("handlers"));
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger foo = new MockLogger(FOO, null);
1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getLevel());
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, foo.getHandlers().length);
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        foo.setLevel(Level.ALL);
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        foo.addHandler(new ConsoleHandler());
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(mockManager.addLogger(foo));
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.WARNING, foo.getLevel());
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(2, foo.getHandlers().length);
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // reset
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mockManager.reset();
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // properties is cleared
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(mockManager.getProperty("handlers"));
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // level is null
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(foo.getLevel());
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // handlers are all closed
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, foo.getHandlers().length);
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // for root logger
1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.reset();
1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(manager.getProperty("handlers"));
1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Logger root = manager.getLogger("");
1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // level reset to info
1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.INFO, root.getLevel());
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // also close root's handler
1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, root.getHandlers().length);
1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify SecurityException.",
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGlobalPropertyConfig() throws Exception {
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PrintStream err = System.err;
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setErr(new PrintStream(new NullOutputStream()));
1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // before add config property, root has two handler
1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(2, manager.getLogger("").getHandlers().length);
1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // one valid config class
1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig");
1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(3, manager.getLogger("").getHandlers().length);
1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // two config class take effect orderly
1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig " + className
1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "$MockValidConfig2");
1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(2, manager.getLogger("").getHandlers().length);
1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig2 " + className
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "$MockValidConfig");
1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(3, manager.getLogger("").getHandlers().length);
1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // invalid config class which throw exception, just print exception
1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // and
1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // message
1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockInvalidConfigException");
1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // invalid config class without default constructor, just print
1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // exception and message
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockInvalidConfigNoDefaultConstructor");
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // bad config class name, just print exception and message
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", "badname");
1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // invalid separator, nothing happened
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig2;" + className
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "$MockValidConfig");
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(2, manager.getLogger("").getHandlers().length);
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig2;" + className
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "$MockValidConfig " + className + "$MockValidConfig");
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(3, manager.getLogger("").getHandlers().length);
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // duplicate config class, take effect twice
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig " + className
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "$MockValidConfig");
1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(4, manager.getLogger("").getHandlers().length);
1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // invalid config classes mixed with valid config classes, valid
1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // config
1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // classes take effect
1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", "badname " + className + "$MockValidConfig " + className
1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + "$MockInvalidConfigNoDefaultConstructor " + className + "$MockValidConfig");
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(4, manager.getLogger("").getHandlers().length);
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // global property take effect before logger specified property
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.setProperty("config", className + "$MockValidConfig");
1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.FINE, manager.getLogger("").getLevel());
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setErr(err);
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readConfiguration",
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testValidConfigClass() throws Exception {
1244dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        //            System.setProperty("java.util.logging.config.class", "org.apache.harmony.logging.tests.java.util.logging.LogManagerTest$ConfigClass");
1245dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        System.setProperty("java.util.logging.config.class", this.getClass().getName()
1246dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson                + "$ConfigClass");
1247dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        assertNull(manager.getLogger("testConfigClass.foo"));
1248dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson
1249dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        manager.readConfiguration();
1250dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        assertNull(manager.getLogger("testConfigClass.foo"));
1251dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        Logger l = Logger.getLogger("testConfigClass.foo.child");
1252dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        assertSame(Level.FINEST, manager.getLogger("").getLevel());
1253dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        assertEquals(0, manager.getLogger("").getHandlers().length);
1254dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        assertEquals("testConfigClass.foo", l.getParent().getName());
1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * ----------------------------------------------------
1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * mock classes
1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * ----------------------------------------------------
1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ConfigClass {
1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ConfigClass() throws Exception {
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager man = LogManager.getLogManager();
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Properties props = new Properties();
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("handlers", className + "$MockHandler " + className + "$MockHandler");
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("java.util.logging.FileHandler.pattern", "%h/java%u.log");
1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("java.util.logging.FileHandler.limit", "50000");
1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("java.util.logging.FileHandler.count", "5");
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("java.util.logging.FileHandler.formatter", "java.util.logging.XMLFormatter");
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put(".level", "FINE");
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("java.util.logging.ConsoleHandler.level", "OFF");
1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("java.util.logging.ConsoleHandler.formatter","java.util.logging.SimpleFormatter");
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("LogManagerTestFoo.handlers", "java.util.logging.ConsoleHandler");
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("LogManagerTestFoo.level", "WARNING");
1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("testConfigClass.foo.level", "OFF");
1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put("testConfigClass.foo.handlers", "java.util.logging.ConsoleHandler");
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.put(".level", "FINEST");
1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            props.remove("handlers");
1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            InputStream in = EnvironmentHelper.PropertiesToInputStream(props);
1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            man.readConfiguration(in);
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockInvalidInitClass {
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockInvalidInitClass() {
1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException();
1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class TestInvalidConfigFile {
1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static void main(String[] args) {
1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager manager = LogManager.getLogManager();
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Logger root = manager.getLogger("");
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(0, root.getHandlers().length);
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.INFO, root.getLevel());
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkProperty(manager);
1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNull(root.getHandlers()[0].getLevel());
1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(1, root.getHandlers().length);
1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.INFO, root.getLevel());
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkProperty(manager);
1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(0, root.getHandlers().length);
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.INFO, root.getLevel());
1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class TestValidConfigFile {
1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static void main(String[] args) {
1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager manager = LogManager.getLogManager();
1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Logger root = manager.getLogger("");
1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(2, root.getHandlers().length);
1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(root.getHandlers()[0].getLevel(), Level.OFF);
1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.ALL, root.getLevel());
1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(root.getHandlers()[0].getLevel(), Level.OFF);
1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(2, root.getHandlers().length);
1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.ALL, root.getLevel());
1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(0, root.getHandlers().length);
1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.INFO, root.getLevel());
1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class TestMockLogManager {
1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static void main(String[] args) {
1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager manager = LogManager.getLogManager();
1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(manager instanceof MockLogManager);
1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class TestValidConfigClass {
1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static void main(String[] args) {
1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager manager = LogManager.getLogManager();
1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Logger root = manager.getLogger("");
1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(1, root.getHandlers().length);
1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.OFF, root.getLevel());
1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(1, root.getHandlers().length);
1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.OFF, root.getLevel());
1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(1, root.getHandlers().length);
1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.OFF, root.getLevel());
1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkPropertyNull(manager);
1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(0, root.getHandlers().length);
1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(Level.INFO, root.getLevel());
1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration();
1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            manager.reset();
1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockLogger extends Logger {
1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockLogger(String name, String rbName) {
1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(name, rbName);
1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockLogManager extends LogManager {
1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14118d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson	public static class MockConfigLogManager extends LogManager {
14128d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        public boolean isCalled = false;
14138d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson
14148d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        public void readConfiguration(InputStream ins) throws IOException {
14158d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson            isCalled = true;
14168d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson            super.readConfiguration(ins);
14178d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson        }
14188d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson    }
14198d17411a0bf88b323dea8b87508779f100b5e334Jesse Wilson
1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockHandler extends Handler {
1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        static int number = 0;
1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockHandler() {
1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            addNumber();
1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // System.out.println(this + ":start:" + number);
1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private synchronized void addNumber() {
1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            number++;
1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void close() {
1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            minusNumber();
1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // System.out.println(this + ":close:" + number);
1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private synchronized void minusNumber() {
1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            number--;
1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void flush() {
1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // System.out.println(this + ":flush");
1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void publish(LogRecord record) {
1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockValidInitClass {
1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockValidInitClass() {
1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Properties p = new Properties();
1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            p.put("handlers", className + "$MockHandler");
1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            p.put(".level", "OFF");
1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            InputStream in = null;
1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                in = EnvironmentHelper.PropertiesToInputStream(p);
1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                LogManager manager = LogManager.getLogManager();
1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                manager.readConfiguration(in);
1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } finally {
1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    in.close();
1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (Exception e) {
1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockValidConfig {
1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockValidConfig() {
1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new MockHandler();
1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogManager manager = LogManager.getLogManager();
1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Logger root = null;
1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (null != manager) {
1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                root = manager.getLogger("");
1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println("null manager");
1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (null != root) {
1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                root.addHandler(handler);
1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                root.setLevel(Level.OFF);
1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockValidConfig2 {
1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        static Logger root = null;
1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockValidConfig2() {
1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            root = LogManager.getLogManager().getLogger("");
1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            root.removeHandler(handler);
1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockInvalidConfigException {
1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockInvalidConfigException() {
1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("invalid config class - throw exception");
1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockInvalidConfigNoDefaultConstructor {
1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockInvalidConfigNoDefaultConstructor(int i) {
1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException("invalid config class - no default constructor");
1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1510a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    public static class MockPropertyChangeListener implements
1511a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            PropertyChangeListener {
1512a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1513a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        PropertyChangeEvent event = null;
1514a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1515a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        public void propertyChange(PropertyChangeEvent event) {
1516a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            this.event = event;
1517a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
1518a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1519a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        public PropertyChangeEvent getEvent() {
1520a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            return event;
1521a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
1522a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1523a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        public void reset() {
1524a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            event = null;
1525a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project        }
1526a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
1527a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    }
1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockSecurityManagerLogPermission extends SecurityManager {
1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission permission, Object context) {
1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof LoggingPermission) {
1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException();
1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission permission) {
1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof LoggingPermission) {
1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                StackTraceElement[] stack = (new Throwable()).getStackTrace();
1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                for (int i = 0; i < stack.length; i++) {
1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if (stack[i].getClassName().equals("java.util.logging.Logger")) {
1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        return;
1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException("Found LogManager checkAccess()");
1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockSecurityManagerOtherPermission extends SecurityManager {
1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission permission, Object context) {
1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof LoggingPermission) {
1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission.getName().equals("setSecurityManager")) {
1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // throw new SecurityException();
1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.checkPermission(permission, context);
1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission permission) {
1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission instanceof LoggingPermission) {
1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (permission.getName().equals("setSecurityManager")) {
1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.checkPermission(permission);
1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test config class loading
1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * java -Djava.util.logging.config.class=badConfigClassName ClassLoadingTest
1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ClassLoadingTest {
1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static void main(String[] args) {
1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.currentThread().setContextClassLoader(new MockErrorClassLoader());
1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                LogManager.getLogManager();
1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("Should throw mock error");
1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (MockError e) {
1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        static class MockErrorClassLoader extends ClassLoader {
1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public Class<?> loadClass(String name) {
1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new MockError();
1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        static class MockError extends Error {
1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockInputStream extends InputStream {
1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public int read() throws IOException {
1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IOException();
1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
1610