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 Projectimport dalvik.annotation.*;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PrintStream;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.UnsupportedEncodingException;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.CharBuffer;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.Charset;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.CharsetEncoder;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.CodingErrorAction;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Properties;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Filter;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Formatter;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Handler;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Level;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LogManager;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LogRecord;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LoggingPermission;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.SimpleFormatter;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.SocketHandler;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.StreamHandler;
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.logging.tests.java.util.logging.HandlerTest.NullOutputStream;
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.util.CallVerificationStack;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test the class StreamHandler.
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(StreamHandler.class)
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class StreamHandlerTest extends TestCase {
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final static String INVALID_LEVEL = "impossible_level";
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final PrintStream err = System.err;
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private OutputStream errSubstituteStream = null;
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static String className = StreamHandlerTest.class.getName();
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static CharsetEncoder encoder;
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static {
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoder = Charset.forName("iso-8859-1").newEncoder();
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoder.onMalformedInput(CodingErrorAction.REPLACE);
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see TestCase#setUp()
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        errSubstituteStream = new NullOutputStream();
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setErr(new PrintStream(errSubstituteStream));
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see TestCase#tearDown()
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void tearDown() throws Exception {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().reset();
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CallVerificationStack.getInstance().clear();
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setErr(err);
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.tearDown();
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with no parameter, and no relevant log manager
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * properties are set.
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with no parameter, and no relevant log manager properties are set.",
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_NoParameter_NoProperties() {
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.filter"));
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.formatter"));
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Level.INFO, h.getLevel());
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFormatter() instanceof SimpleFormatter);
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getFilter());
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with insufficient privilege.
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with insufficient privilege.",
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_NoParameter_InsufficientPrivilege() {
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.filter"));
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.formatter"));
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldMan = System.getSecurityManager();
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // set a normal value
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            StreamHandler h = new StreamHandler();
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertSame(Level.INFO, h.getLevel());
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(h.getFormatter() instanceof SimpleFormatter);
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNull(h.getFilter());
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNull(h.getEncoding());
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with no parameter, and valid relevant log manager
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * properties are set.
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with no parameter, and valid relevant log manager properties are set.",
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_NoParameter_ValidProperties() throws Exception {
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", "FINE");
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.filter", className
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFilter");
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.formatter", className
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFormatter");
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.encoding", "iso-8859-1");
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("FINE", LogManager.getLogManager().getProperty(
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", LogManager.getLogManager().getProperty(
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(h.getLevel(), Level.parse("FINE"));
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFormatter() instanceof MockFormatter);
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFilter() instanceof MockFilter);
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", h.getEncoding());
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with no parameter, and invalid relevant log manager
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * properties are set.
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with no parameter, and invalid relevant log manager properties are set.",
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_NoParameter_InvalidProperties()
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws Exception {
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", INVALID_LEVEL);
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.filter", className + "");
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.formatter", className + "");
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.encoding", "XXXX");
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(INVALID_LEVEL, LogManager.getLogManager().getProperty(
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("XXXX", LogManager.getLogManager().getProperty(
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Level.INFO, h.getLevel());
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFormatter() instanceof SimpleFormatter);
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getFilter());
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(new LogRecord(Level.SEVERE, "test"));
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with normal parameter values, and no relevant log
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * manager properties are set.
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with normal parameter values, and no relevant log manager properties are set.",
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_HasParameters_NoProperties() {
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.filter"));
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.formatter"));
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new MockFormatter2());
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Level.INFO, h.getLevel());
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFormatter() instanceof MockFormatter2);
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getFilter());
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with insufficient privilege.
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with insufficient privilege.",
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_HasParameter_InsufficientPrivilege() {
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.filter"));
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.formatter"));
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(LogManager.getLogManager().getProperty(
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldMan = System.getSecurityManager();
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // set a normal value
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    new MockFormatter2());
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertSame(Level.INFO, h.getLevel());
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(h.getFormatter() instanceof MockFormatter2);
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNull(h.getFilter());
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNull(h.getEncoding());
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with normal parameter values, and valid relevant log
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * manager properties are set.
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with normal parameter values, and valid relevant log manager properties are set.",
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_HasParameters_ValidProperties()
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws Exception {
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", "FINE");
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.filter", className
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFilter");
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.formatter", className
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFormatter");
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.encoding", "iso-8859-1");
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("FINE", LogManager.getLogManager().getProperty(
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", LogManager.getLogManager().getProperty(
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new MockFormatter2());
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(h.getLevel(), Level.parse("FINE"));
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFormatter() instanceof MockFormatter2);
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFilter() instanceof MockFilter);
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", h.getEncoding());
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with normal parameter, and invalid relevant log
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * manager properties are set.
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with normal parameter, and invalid relevant log manager properties are set.",
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_HasParameters_InvalidProperties()
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws Exception {
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", INVALID_LEVEL);
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.filter", className + "");
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.formatter", className + "");
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.encoding", "XXXX");
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(INVALID_LEVEL, LogManager.getLogManager().getProperty(
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("XXXX", LogManager.getLogManager().getProperty(
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new MockFormatter2());
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Level.INFO, h.getLevel());
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.getFormatter() instanceof MockFormatter2);
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getFilter());
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with null formatter, and invalid relevant log manager
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * properties are set.
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the constructor with null formatter, and invalid relevant log manager properties are set.",
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_HasParameters_ValidPropertiesNullStream()
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws Exception {
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", "FINE");
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.filter", className
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFilter");
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.formatter", className
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFormatter");
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.encoding", "iso-8859-1");
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("FINE", LogManager.getLogManager().getProperty(
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", LogManager.getLogManager().getProperty(
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new StreamHandler(new ByteArrayOutputStream(), null);
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw NullPointerException!");
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test the constructor with null output stream, and invalid relevant log
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * manager properties are set.
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 = "Verifies the constructor with null output stream, and invalid relevant log manager properties are set.",
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "StreamHandler",
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.util.logging.Formatter.class}
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testConstructor_HasParameters_ValidPropertiesNullFormatter()
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws Exception {
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", "FINE");
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.filter", className
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFilter");
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.formatter", className
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFormatter");
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.encoding", "iso-8859-1");
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("FINE", LogManager.getLogManager().getProperty(
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.level"));
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", LogManager.getLogManager().getProperty(
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "java.util.logging.StreamHandler.encoding"));
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new StreamHandler(null, new MockFormatter2());
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw NullPointerException!");
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test close() when having sufficient privilege, and a record has been
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * written to the output stream.
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies close() when having sufficient privilege, and a record has been written to the output stream.",
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testClose_SufficientPrivilege_NormalClose() {
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new MockOutputStream();
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(new LogRecord(Level.SEVERE,
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "testClose_SufficientPrivilege_NormalClose msg"));
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("close", CallVerificationStack.getInstance()
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getCurrentSourceMethod());
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(CallVerificationStack.getInstance().pop());
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("flush", CallVerificationStack.getInstance()
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getCurrentSourceMethod());
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CallVerificationStack.getInstance().clear();
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(aos.toString().endsWith("MockFormatter_Tail"));
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test close() when having sufficient privilege, and an output stream that
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * always throws exceptions.
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies close() when having sufficient privilege, and an output stream that always throws exceptions.",
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testClose_SufficientPrivilege_Exception() {
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new MockExceptionOutputStream();
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(new LogRecord(Level.SEVERE,
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "testClose_SufficientPrivilege_Exception msg"));
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test close() when having sufficient privilege, and no record has been
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * written to the output stream.
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies close() method when having sufficient privilege, and no record has been written to the output stream.",
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testClose_SufficientPrivilege_DirectClose() {
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new MockOutputStream();
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("close", CallVerificationStack.getInstance()
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getCurrentSourceMethod());
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(CallVerificationStack.getInstance().pop());
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("flush", CallVerificationStack.getInstance()
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getCurrentSourceMethod());
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CallVerificationStack.getInstance().clear();
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_HeadMockFormatter_Tail", aos.toString());
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test close() when having insufficient privilege.
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies SecurityException.",
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     public void testClose_InsufficientPrivilege() {
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new MockFormatter());
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldMan = System.getSecurityManager();
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.close();
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw SecurityException!");
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test close() when having no output stream.
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies close() method when having no output stream.",
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testClose_NoOutputStream() {
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test flush().
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies flush() method.",
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "flush",
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFlush_Normal() {
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new MockOutputStream();
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("flush", CallVerificationStack.getInstance().getCurrentSourceMethod());
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(CallVerificationStack.getInstance().pop());
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CallVerificationStack.getInstance().clear();
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test flush() when having no output stream.
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies flush() when having no output stream.",
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "flush",
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFlush_NoOutputStream() {
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test isLoggable(), use no filter, having no output stream
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies isLoggable(), use no filter, having no output stream.",
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isLoggable",
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testIsLoggable_NoOutputStream() {
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, null);
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.WARNING);
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.CONFIG);
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r.setLevel(Level.OFF);
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.OFF);
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test isLoggable(), use no filter, having output stream
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies isLoggable(), use no filter, having output stream.",
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isLoggable",
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testIsLoggable_NoFilter() {
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new SimpleFormatter());
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, null);
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.isLoggable(r));
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.WARNING);
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.CONFIG);
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.isLoggable(r));
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r.setLevel(Level.OFF);
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.OFF);
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test isLoggable(), use a filter, having output stream
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies isLoggable(), use a filter, having output stream.",
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isLoggable",
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testIsLoggable_WithFilter() {
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new SimpleFormatter());
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, null);
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setFilter(new MockFilter());
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.CONFIG);
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.WARNING);
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r)); //level to high, data will not reach the filter
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test isLoggable(), null log record, having output stream. Handler should
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * call ErrorManager to handle exceptional case
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies isLoggable(), null log record, having output stream. Handler should call ErrorManager to handle exceptional case.",
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isLoggable",
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testIsLoggable_Null() {
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new SimpleFormatter());
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(null));
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test isLoggable(), null log record, without output stream
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies isLoggable(), null log record, without output stream.",
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isLoggable",
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testIsLoggable_Null_NoOutputStream() {
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(null));
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), use no filter, having output stream, normal log record.
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), use no filter, having output stream, normal log record.",
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_NoOutputStream() {
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "testPublish_NoOutputStream");
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.WARNING);
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.CONFIG);
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r.setLevel(Level.OFF);
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.OFF);
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), use no filter, having output stream, normal log record.
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), use no filter, having output stream, normal log record.",
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_NoFilter() {
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "testPublish_NoFilter");
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.INFO);
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testPublish_NoFilter", aos
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toString());
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.WARNING);
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testPublish_NoFilter", aos
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toString());
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.CONFIG);
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testPublish_NoFilter"
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "testPublish_NoFilter", aos.toString());
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r.setLevel(Level.OFF);
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.OFF);
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testPublish_NoFilter"
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "testPublish_NoFilter", aos.toString());
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), use a filter, having output stream, normal log record.
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), use a filter, having output stream, normal log record.",
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_WithFilter() {
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setFilter(new MockFilter());
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "testPublish_WithFilter");
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.INFO);
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("", aos.toString());
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.WARNING);
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("", aos.toString());
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.CONFIG);
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("", aos.toString());
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r.setLevel(Level.OFF);
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.OFF);
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("", aos.toString());
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), null log record, handler should call ErrorManager to
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * handle exceptional case
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), null log record, handler should call ErrorManager to handle exceptional case.",
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_Null() {
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(new ByteArrayOutputStream(),
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new SimpleFormatter());
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(null);
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), null log record, without output stream
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), null log record, without output stream.",
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_Null_NoOutputStream() {
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(null);
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for Harmony-1279
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockFilter filter = new MockFilter();
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setLevel(Level.FINER);
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setFilter(filter);
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord record = new LogRecord(Level.FINE, "abc");
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(record);
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // verify that filter.isLoggable is not called, because there's no
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // associated output stream.
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), a log record with empty msg, having output stream
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), a log record with empty msg, having output stream.",
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_EmptyMsg() {
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "");
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head", aos.toString());
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), a log record with null msg, having output stream
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), a log record with null msg, having output stream.",
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_NullMsg() {
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, null);
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head", aos.toString());
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test publish(), after close.
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies publish(), after close.",
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish_AfterClose() throws Exception {
851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.put("java.util.logging.StreamHandler.level", "FINE");
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogManager.getLogManager().readConfiguration(
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EnvironmentHelper.PropertiesToInputStream(p));
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(h.getLevel(), Level.FINE);
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "testPublish_NoFormatter");
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(h.isLoggable(r));
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(h.isLoggable(r));
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_HeadMockFormatter_Tail", aos.toString());
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setEncoding() method with supported encoding.
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setEncoding() method with supported encoding.",
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setEncoding",
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetEncoding_Normal() throws Exception {
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setEncoding("iso-8859-1");
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", h.getEncoding());
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "\u6881\u884D\u8F69");
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] bytes = encoder.encode(
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CharBuffer.wrap("MockFormatter_Head" + "\u6881\u884D\u8F69"))
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .array();
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(bytes, aos.toByteArray()));
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setEncoding() method with supported encoding, after a log record
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * has been written.
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setEncoding() method with supported encoding, after a log record has been written.",
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setEncoding",
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetEncoding_AfterPublish() throws Exception {
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setEncoding("iso-8859-1");
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso-8859-1", h.getEncoding());
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "\u6881\u884D\u8F69");
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(aos.toByteArray(), encoder.encode(
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CharBuffer.wrap("MockFormatter_Head" + "\u6881\u884D\u8F69"))
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .array()));
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setEncoding("iso8859-1");
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("iso8859-1", h.getEncoding());
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r = new LogRecord(Level.INFO, "\u6881\u884D\u8F69");
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(Arrays.equals(aos.toByteArray(), encoder.encode(
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CharBuffer.wrap("MockFormatter_Head" + "\u6881\u884D\u8F69"
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + "testSetEncoding_Normal2")).array()));
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] b0 = aos.toByteArray();
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] b1 = encoder.encode(
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CharBuffer.wrap("MockFormatter_Head" + "\u6881\u884D\u8F69"))
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .array();
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] b2 = encoder.encode(CharBuffer.wrap("\u6881\u884D\u8F69"))
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .array();
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] b3 = new byte[b1.length + b2.length];
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(b1, 0, b3, 0, b1.length);
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(b2, 0, b3, b1.length, b2.length);
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(b0, b3));
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setEncoding() methods with null.
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setEncoding() methods with null.",
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setEncoding",
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetEncoding_Null() throws Exception {
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setEncoding(null);
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setEncoding() methods with unsupported encoding.
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setEncoding() methods with unsupported encoding.",
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setEncoding",
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetEncoding_Unsupported() {
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.setEncoding("impossible");
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw UnsupportedEncodingException!");
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (UnsupportedEncodingException e) {
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setEncoding() with insufficient privilege.
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setEncoding() method with insufficient privilege.",
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setEncoding",
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetEncoding_InsufficientPrivilege() throws Exception {
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler();
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldMan = System.getSecurityManager();
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // set a normal value
983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.setEncoding("iso-8859-1");
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw SecurityException!");
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // set an invalid value
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.setEncoding("impossible");
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw SecurityException!");
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(h.getEncoding());
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setEncoding() methods will flush a stream before setting.
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies that setEncoding() method will flush a stream before setting.",
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setEncoding",
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetEncoding_FlushBeforeSetting() throws Exception {
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StreamHandler h = new StreamHandler(aos, new MockFormatter());
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "abcd");
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(aos.toString().indexOf("abcd") > 0);
1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setEncoding("iso-8859-1");
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(aos.toString().indexOf("abcd") > 0);
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setOutputStream() with null.
1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setOutputStream() method with null.",
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setOutputStream",
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class}
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetOutputStream_null() {
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockStreamHandler h = new MockStreamHandler(
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new ByteArrayOutputStream(), new SimpleFormatter());
1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.setOutputStream(null);
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw NullPointerException!");
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setOutputStream() under normal condition.
1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setOutputStream() method under normal condition.",
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setOutputStream",
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class}
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetOutputStream_Normal() {
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockStreamHandler h = new MockStreamHandler(aos, new MockFormatter());
1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "testSetOutputStream_Normal");
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal", aos
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toString());
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos2 = new ByteArrayOutputStream();
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setOutputStream(aos2);
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal"
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "MockFormatter_Tail", aos.toString());
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r = new LogRecord(Level.INFO, "testSetOutputStream_Normal2");
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal2", aos2
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toString());
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal"
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "MockFormatter_Tail", aos.toString());
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setOutputStream() after close.
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setOutputStream() method after close.",
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setOutputStream",
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class}
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetOutputStream_AfterClose() {
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos = new ByteArrayOutputStream();
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockStreamHandler h = new MockStreamHandler(aos, new MockFormatter());
1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord r = new LogRecord(Level.INFO, "testSetOutputStream_Normal");
1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal", aos
1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toString());
1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream aos2 = new ByteArrayOutputStream();
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.setOutputStream(aos2);
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal"
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "MockFormatter_Tail", aos.toString());
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r = new LogRecord(Level.INFO, "testSetOutputStream_Normal2");
1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(r, CallVerificationStack.getInstance().pop());
1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(CallVerificationStack.getInstance().empty());
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.flush();
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal2", aos2
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .toString());
1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal"
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "MockFormatter_Tail", aos.toString());
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test setOutputStream() when having insufficient privilege.
1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies setOutputStream() method when having insufficient privilege.",
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setOutputStream",
1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class}
1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetOutputStream_InsufficientPrivilege() {
1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockStreamHandler h = new MockStreamHandler();
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldMan = System.getSecurityManager();
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.setOutputStream(new ByteArrayOutputStream());
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw SecurityException!");
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h = new MockStreamHandler();
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new MockSecurityManager());
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h.setOutputStream(null);
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw NullPointerException!");
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldMan);
1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * A mock stream handler, expose setOutputStream.
1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockStreamHandler extends StreamHandler {
1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockStreamHandler() {
1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super();
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockStreamHandler(OutputStream out, Formatter formatter) {
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(out, formatter);
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setOutputStream(OutputStream out) {
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.setOutputStream(out);
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean isLoggable(LogRecord r) {
1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CallVerificationStack.getInstance().push(r);
1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.isLoggable(r);
1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * A mock filter, always return false.
1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFilter implements Filter {
1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean isLoggable(LogRecord record) {
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CallVerificationStack.getInstance().push(record);
1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * A mock formatter.
1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFormatter extends java.util.logging.Formatter {
1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String format(LogRecord r) {
1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // System.out.println("formatter called...");
1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.formatMessage(r);
1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.util.logging.Formatter#getHead(java.util.logging.Handler)
1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getHead(Handler h) {
1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return "MockFormatter_Head";
1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.util.logging.Formatter#getTail(java.util.logging.Handler)
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getTail(Handler h) {
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return "MockFormatter_Tail";
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Another mock formatter.
1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFormatter2 extends java.util.logging.Formatter {
1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String format(LogRecord r) {
1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // System.out.println("formatter2 called...");
1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return r.getMessage();
1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * A mock output stream.
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockOutputStream extends ByteArrayOutputStream {
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#close()
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void close() throws IOException {
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CallVerificationStack.getInstance().push(null);
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.close();
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#flush()
1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void flush() throws IOException {
1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CallVerificationStack.getInstance().push(null);
1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.flush();
1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#write(int)
1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void write(int oneByte) {
1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.write(oneByte);
1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * A mock output stream that always throw exception.
1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockExceptionOutputStream extends ByteArrayOutputStream {
1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#close()
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void close() throws IOException {
1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IOException();
1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#flush()
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void flush() throws IOException {
1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IOException();
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#write(byte[], int, int)
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public synchronized void write(byte[] buffer, int offset, int count) {
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * (non-Javadoc)
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         *
1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * @see java.io.OutputStream#write(int)
1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public synchronized void write(int oneByte) {
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Used to grant all permissions except logging control.
1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockSecurityManager extends SecurityManager {
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockSecurityManager() {
1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission perm) {
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // grant all permissions except logging control
1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (perm instanceof LoggingPermission) {
1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException();
1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission perm, Object context) {
1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // grant all permissions except logging control
1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (perm instanceof LoggingPermission) {
1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException();
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
1325