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.AndroidOnly;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.BufferedReader;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileOutputStream;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FilePermission;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileReader;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PrintStream;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Reader;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.StringWriter;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Properties;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.FileHandler;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Filter;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Formatter;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Handler;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.Level;
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LogManager;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LogRecord;
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.LoggingPermission;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.logging.XMLFormatter;
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.logging.tests.java.util.logging.HandlerTest.NullOutputStream;
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper;
53dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilsonimport tests.util.TestEnvironment;
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(FileHandler.class)
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class FileHandlerTest extends TestCase {
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static LogManager manager = LogManager.getLogManager();
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    final static Properties props = new Properties();
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    final static String className = FileHandlerTest.class.getName();
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    final static String SEP = File.separator;
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson    String HOMEPATH;
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson    String TEMPPATH;
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final PrintStream err = System.err;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private OutputStream errSubstituteStream = null;
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FileHandler handler;
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    LogRecord r;
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see TestCase#setUp()
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
85dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        TestEnvironment.reset();
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.reset();
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //initProp
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.clear();
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.level", "FINE");
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.filter", className
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFilter");
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.formatter", className
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFormatter");
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.encoding", "iso-8859-1");
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // limit to only two message
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.limit", "1000");
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // rotation count is 2
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.count", "2");
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // using append mode
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.append", "true");
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.pattern",
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        "%t/log/java%u.test");
104dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson
105dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        HOMEPATH = System.getProperty("user.home");
106dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        TEMPPATH = System.getProperty("java.io.tmpdir");
107dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File file = new File(TEMPPATH + SEP + "log");
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file.mkdir();
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .PropertiesToInputStream(props));
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler();
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        r = new LogRecord(Level.CONFIG, "msg");
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        errSubstituteStream = new NullOutputStream();
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setErr(new PrintStream(errSubstituteStream));
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see TestCase#tearDown()
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void tearDown() throws Exception {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null != handler) {
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        reset(TEMPPATH + SEP + "log", "");
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setErr(err);
129dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson        TestEnvironment.reset();
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.tearDown();
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for constructor void FileHandler()
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify exceptions.",
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFileHandler() throws Exception {
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("character encoding is non equal to actual value",
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "iso-8859-1", handler.getEncoding());
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Filter is null", handler.getFilter());
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Formatter is null", handler.getFormatter());
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("is non equal to actual value", Level.FINE, handler
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLevel());
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("ErrorManager is null", handler.getErrorManager());
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // output 3 times, and all records left
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // append mode is true
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 3; i++) {
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler();
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r);
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "java0.test.0",
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new LogRecord[] { r, null, r, null, r, null, r },
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new MockFormatter());
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for constructor void FileHandler(String)
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify security exception.",
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFileHandler_1params() throws Exception {
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/log/string");
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("character encoding is non equal to actual value",
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "iso-8859-1", handler.getEncoding());
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Filter is null", handler.getFilter());
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Formatter is null", handler.getFormatter());
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("is non equal to actual value", Level.FINE, handler
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLevel());
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("ErrorManager is null", handler.getErrorManager());
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // output 3 times, and all records left
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // append mode is true
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 3; i++) {
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler("%t/log/string");
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r);
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "/string", new LogRecord[] {
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                r, null, r, null, r, null, r }, new MockFormatter());
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test if unique ids not specified, it will append at the end
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // no generation number is used
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h = new FileHandler("%t/log/string");
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h2 = new FileHandler("%t/log/string");
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h3 = new FileHandler("%t/log/string");
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h4 = new FileHandler("%t/log/string");
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h2.publish(r);
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h3.publish(r);
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h4.publish(r);
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h2.close();
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h3.close();
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h4.close();
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "string", h.getFormatter());
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "string.1", h.getFormatter());
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "string.2", h.getFormatter());
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "string.3", h.getFormatter());
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // default is append mode
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h6 = new FileHandler("%t/log/string%u.log");
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h6.publish(r);
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h6.close();
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h7 = new FileHandler("%t/log/string%u.log");
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h7.publish(r);
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h7.close();
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFileContent(TEMPPATH + SEP + "log", "string0.log", h
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getFormatter());
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should assertion failed");
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Error e) {
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File file = new File(TEMPPATH + SEP + "log");
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("length list of file is incorrect", file.list().length <= 2);
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test unique ids
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h8 = new FileHandler("%t/log/%ustring%u.log");
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h8.publish(r);
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h9 = new FileHandler("%t/log/%ustring%u.log");
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h9.publish(r);
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h9.close();
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h8.close();
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "0string0.log", h
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getFormatter());
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "1string1.log", h
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getFormatter());
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "log");
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("length list of file is incorrect", file.list().length <= 2);
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("");
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for constructor void FileHandler(String pattern, boolean append)
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify security exception.",
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, boolean.class}
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFileHandler_2params() throws Exception {
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean append = false;
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        do {
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            append = !append;
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler("%t/log/string", append);
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("character encoding is non equal to actual value",
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "iso-8859-1", handler.getEncoding());
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("Filter is null", handler.getFilter());
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("Formatter is null", handler.getFormatter());
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("is non equal to actual value", Level.FINE, handler
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getLevel());
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("ErrorManager is null", handler.getErrorManager());
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r);
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // output 3 times, and all records left
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // append mode is true
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int i = 0; i < 3; i++) {
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("%t/log/string", append);
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.publish(r);
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.close();
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (append) {
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertFileContent(TEMPPATH + SEP + "log", "/string",
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        new LogRecord[] { r, null, r, null, r, null, r },
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        new MockFormatter());
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertFileContent(TEMPPATH + SEP + "log", "/string",
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        new LogRecord[] { r }, new MockFormatter());
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } while (append);
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("", true);
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for constructor void FileHandler(String pattern, int limit, int
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * count)
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verifysecurity exception.",
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, int.class}
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFileHandler_3params() throws Exception {
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int limit = 120;
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int count = 1;
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/log/string", limit, count);
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("character encoding is non equal to actual value",
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "iso-8859-1", handler.getEncoding());
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Filter is null", handler.getFilter());
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Formatter is null", handler.getFormatter());
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("is non equal to actual value", Level.FINE, handler
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLevel());
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("ErrorManager is null", handler.getErrorManager());
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // output 3 times, and all records left
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // append mode is true
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 3; i++) {
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler("%t/log/string", limit, count);
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r);
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "/string", new LogRecord[] {
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                r, null, r, null, r, null, r }, new MockFormatter());
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("", limit, count);
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/log/string", -1, count);
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/log/string", limit, 0);
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for constructor public FileHandler(String pattern, int limit, int
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * count, boolean append)
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify security exception.",
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, int.class, boolean.class}
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFileHandler_4params() throws Exception {
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int limit = 120;
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int count = 1;
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean append = false;
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        do {
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            append = !append;
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler("%t/log/string", limit, count, append);
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("character encoding is non equal to actual value",
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "iso-8859-1", handler.getEncoding());
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("Filter is null", handler.getFilter());
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("Formatter is null", handler.getFormatter());
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("is non equal to actual value", Level.FINE, handler
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getLevel());
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("ErrorManager is null", handler.getErrorManager());
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r);
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // output 3 times, and all records left
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // append mode is true
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int i = 0; i < 3; i++) {
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("%t/log/string", limit, count, append);
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.publish(r);
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.close();
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (append) {
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertFileContent(TEMPPATH + SEP + "log", "/string",
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        new LogRecord[] { r, null, r, null, r, null, r },
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        new MockFormatter());
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertFileContent(TEMPPATH + SEP + "log", "/string",
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        new LogRecord[] { r }, new MockFormatter());
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } while (append);
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("", limit, count, true);
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/log/string", -1, count, false);
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/log/string", limit, 0, true);
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException expected");
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getEncoding",
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getFilter",
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getFormatter",
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getLevel",
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getErrorManager",
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testDefaultValue() throws Exception {
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.clear();
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .PropertiesToInputStream(props));
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler();
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(handler.getEncoding());
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(handler.getFilter());
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(handler.getFormatter() instanceof XMLFormatter);
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(handler.getLevel(), Level.ALL);
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(handler.getErrorManager());
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // output 3 times, and only one record left
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // default append mode is false
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 3; i++) {
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler();
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r);
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(HOMEPATH, "java0.log", new XMLFormatter());
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void assertFileContent(String homepath, String filename,
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Formatter formatter) throws Exception {
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(homepath, filename, new LogRecord[] { r }, formatter);
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void assertFileContent(String homepath, String filename,
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            LogRecord[] lr, Formatter formatter) throws Exception {
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String msg = "";
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // if formatter is null, the file content should be empty
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // else the message should be formatted given records
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null != formatter) {
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            StringBuffer sb = new StringBuffer();
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            sb.append(formatter.getHead(handler));
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int i = 0; i < lr.length; i++) {
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (null == lr[i] && i < lr.length - 1) {
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // if one record is null and is not the last record, means
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // here is
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // output completion point, should output tail, then output
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // head
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // (ready for next output)
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    sb.append(formatter.getTail(handler));
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    sb.append(formatter.getHead(handler));
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } else {
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    sb.append(formatter.format(lr[i]));
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            sb.append(formatter.getTail(handler));
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            msg = sb.toString();
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        char[] chars = new char[msg.length()];
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Reader reader = null;
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            reader = new BufferedReader(new FileReader(homepath + SEP
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + filename));
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            reader.read(chars);
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(msg, new String(chars));
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // assert has reached the end of the file
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(-1, reader.read());
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (reader != null) {
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    reader.close();
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // don't care
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            reset(homepath, filename);
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Does a cleanup of given file
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param homepath
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param filename
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void reset(String homepath, String filename) {
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File file = null;
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            file = new File(homepath + SEP + filename);
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (file.isFile()) {
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                file.delete();
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else if (file.isDirectory()) {
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                File[] files = file.listFiles();
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                for (int i = 0; i < files.length; i++) {
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    files[i].delete();
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                file.delete();
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            e.printStackTrace();
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            file = new File(homepath + SEP + filename + ".lck");
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            file.delete();
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            e.printStackTrace();
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
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 = "",
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, int.class, boolean.class}
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testLimitAndCount() throws Exception {
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // very small limit value, count=2
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // output, rename current output file to the second generation file
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // close it and open a new file as rotation output
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/testLimitCount%g", 1, 2, false);
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount1", handler.getFormatter());
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // very small limit value, count=1
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // output once, rotate(equals to nothing output)
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/testLimitCount%g", 1, 1, false);
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount0", new LogRecord[0],
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.getFormatter());
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // normal case, limit is 60(>2*msg length <3*msg length), append is
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // false
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/testLimitCount%u", 60, 3, false);
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord[] rs = new LogRecord[10];
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // batch output twice to test the append mode
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 5; i++) {
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            rs[i] = new LogRecord(Level.SEVERE, "msg" + i);
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(rs[i]);
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/testLimitCount%u", 60, 3, false);
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 5; i < 10; i++) {
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            rs[i] = new LogRecord(Level.SEVERE, "msg" + i);
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(rs[i]);
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount0.1", new LogRecord[] {
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                rs[5], rs[6], rs[7] }, handler.getFormatter());
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount0.0", new LogRecord[] {
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                rs[8], rs[9] }, handler.getFormatter());
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // normal case, limit is 60(>2*msg length <3*msg length), append is true
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/testLimitCount%u", 60, 3, false);
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // batch output twice to test the append mode
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 5; i++) {
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            rs[i] = new LogRecord(Level.SEVERE, "msg" + i);
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(rs[i]);
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler("%t/testLimitCount%u", 60, 3, true);
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 5; i < 10; i++) {
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            rs[i] = new LogRecord(Level.SEVERE, "msg" + i);
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(rs[i]);
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount0.2", new LogRecord[] {
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                rs[3], rs[4], null, rs[5] }, handler.getFormatter());
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount0.1", new LogRecord[] {
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                rs[6], rs[7], rs[8] }, handler.getFormatter());
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH, "testLimitCount0.0",
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new LogRecord[] { rs[9] }, handler.getFormatter());
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h1 = null;
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h2 = null;
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            File logDir = new File("log");
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            reset("log", "");
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            logDir.mkdir();
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h1 = new FileHandler("log/a", 0, 1);
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull(h1);
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h2 = new FileHandler("log/a", 0, 1, false);
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull(h2);
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                h1.close();
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                h2.close();
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            reset("log", "");
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "close",
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
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 = "",
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, boolean.class}
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, int.class, int.class}
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, int.class, int.class, boolean.class}
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSecurity() throws IOException {
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager currentManager = System.getSecurityManager();
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(new MockLogSecurityManager());
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.close();
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(new LogRecord(Level.SEVERE, "msg"));
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler();
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern1");
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern2", true);
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern3", 1000, 1);
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern4", 1000, 1, true);
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(currentManager);
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "close",
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, boolean.class}
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, int.class, int.class}
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies SecurityException.",
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, int.class, int.class, boolean.class}
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testFileSecurity() throws IOException {
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager currentManager = System.getSecurityManager();
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(new MockFileSecurityManager());
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(new LogRecord(Level.SEVERE, "msg"));
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler.close();
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler();
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern1");
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern2", true);
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern3", 1000, 1);
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                handler = new FileHandler("pattern4", 1000, 1, true);
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw security exception");
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(currentManager);
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies FileHandler when configuration file is invalid.",
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testInvalidProperty() throws Exception {
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.level", "null");
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.filter", className
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFilte");
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.formatter", className
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "$MockFormatte");
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.encoding", "ut");
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // limit to only two message
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.limit", "-1");
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // rotation count is 2
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.count", "-1");
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // using append mode
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.append", "bad");
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .PropertiesToInputStream(props));
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler = new FileHandler();
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Level.ALL, handler.getLevel());
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(handler.getFilter());
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(handler.getFormatter() instanceof XMLFormatter);
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(handler.getEncoding());
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.put("java.util.logging.FileHandler.pattern", "");
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        manager.readConfiguration(EnvironmentHelper
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .PropertiesToInputStream(props));
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler();
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("shouldn't open file with empty name");
842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies illegal parameters and exceptions: IOException, NullPointerException, IllegalArgumentException.",
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class}
851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies illegal parameters and exceptions: IOException, NullPointerException, IllegalArgumentException.",
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, boolean.class}
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies illegal parameters and exceptions: IOException, NullPointerException, IllegalArgumentException.",
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "FileHandler",
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.lang.String.class, int.class, int.class}
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies illegal parameters and exceptions: IOException, NullPointerException, IllegalArgumentException.",
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "publish",
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.logging.LogRecord.class}
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("This test fails on RI. Doesn't parse special pattern \"%t/%h.")
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testInvalidParams() throws IOException {
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // %t and %p parsing can add file separator automatically
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h1 = new FileHandler("%taaa");
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1.close();
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File file = new File(TEMPPATH + SEP + "aaa");
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(file.exists());
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        reset(TEMPPATH, "aaa");
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1 = new FileHandler("%t%g");
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1.close();
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "0");
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(file.exists());
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        reset(TEMPPATH, "0");
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1 = new FileHandler("%t%u%g");
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1.close();
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "00");
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(file.exists());
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        reset(TEMPPATH, "00");
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // this is normal case
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1 = new FileHandler("%t/%u%g%%g");
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1.close();
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "00%g");
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(file.exists());
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        reset(TEMPPATH, "00%g");
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // multi separator has no effect
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1 = new FileHandler("//%t//multi%g");
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h1.close();
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "multi0");
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(file.exists());
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        reset(TEMPPATH, "multi0");
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // bad directory, IOException
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h1 = new FileHandler("%t/baddir/multi%g");
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IO exception");
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "baddir" + SEP + "multi0");
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(file.exists());
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // bad directory, IOException, append
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h1 = new FileHandler("%t/baddir/multi%g", true);
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IO exception");
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "baddir" + SEP + "multi0");
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(file.exists());
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h1 = new FileHandler("%t/baddir/multi%g", false);
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IO exception");
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "baddir" + SEP + "multi0");
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(file.exists());
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h1 = new FileHandler("%t/baddir/multi%g", 12, 4);
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IO exception");
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "baddir" + SEP + "multi0");
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(file.exists());
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            h1 = new FileHandler("%t/baddir/multi%g", 12, 4, true);
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IO exception");
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file = new File(TEMPPATH + SEP + "baddir" + SEP + "multi0");
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(file.exists());
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler(null);
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw null exception");
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(null);
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should not throw NPE");
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler(null, false);
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw null exception");
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("");
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IllegalArgumentException");
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/java%u", 0, 0);
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IllegalArgumentException");
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/java%u", -1, 1);
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IllegalArgumentException");
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler("%t/java%u", -1, -1);
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IllegalArgumentException");
983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public void publish(LogRecord record)
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "publish",
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.logging.LogRecord.class}
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testPublish() throws Exception {
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LogRecord[] r = new LogRecord[] { new LogRecord(Level.CONFIG, "msg__"),
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new LogRecord(Level.WARNING, "message"),
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new LogRecord(Level.INFO, "message for"),
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new LogRecord(Level.FINE, "message for test") };
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < r.length; i++) {
1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler = new FileHandler("%t/log/stringPublish");
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.publish(r[i]);
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handler.close();
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFileContent(TEMPPATH + SEP + "log", "stringPublish",
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    new LogRecord[] { r[i] }, handler.getFormatter());
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * test for method public void close()
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testClose() throws Exception {
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        FileHandler h = new FileHandler("%t/log/stringPublish");
1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.publish(r);
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        h.close();
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(TEMPPATH + SEP + "log", "stringPublish", h
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getFormatter());
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL,
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify SecurityException.",
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setOutputStream",
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class}
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // set output stream still works, just like super StreamHandler
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetOutputStream() throws Exception {
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockFileHandler handler = new MockFileHandler("%h/setoutput.log");
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.setFormatter(new MockFormatter());
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publicSetOutputStream(out);
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.publish(r);
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        handler.close();
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String msg = new String(out.toByteArray());
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Formatter f = handler.getFormatter();
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(msg, f.getHead(handler) + f.format(r) + f.getTail(handler));
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFileContent(HOMEPATH, "setoutput.log", handler.getFormatter());
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
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 IllegalArgumentException.",
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, int.class}
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testEmptyPattern_3params() throws SecurityException,
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            IOException {
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler(new String(), 1, 1);
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an IllegalArgumentException");
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IllegalArgumentException.",
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, boolean.class}
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testEmptyPattern_2params() throws SecurityException,
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            IOException {
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler(new String(), true);
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an IllegalArgumentException");
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IllegalArgumentException.",
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "FileHandler",
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, int.class, boolean.class}
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testEmptyPattern_4params() throws SecurityException,
1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            IOException {
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new FileHandler(new String(), 1, 1, true);
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an IllegalArgumentException");
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * mock classes
1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFilter implements Filter {
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean isLoggable(LogRecord record) {
1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return !record.getMessage().equals("false");
1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFormatter extends Formatter {
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String format(LogRecord r) {
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (null == r) {
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return "";
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return r.getMessage() + " by MockFormatter\n";
1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getTail(Handler h) {
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return "tail\n";
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getHead(Handler h) {
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return "head\n";
1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockLogSecurityManager extends SecurityManager {
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission perm) {
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (perm instanceof LoggingPermission) {
1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException();
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFileSecurityManager extends SecurityManager {
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission perm) {
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (perm instanceof FilePermission) {
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException();
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class MockFileHandler extends FileHandler {
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockFileHandler() throws IOException {
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super();
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockFileHandler(String pattern) throws IOException {
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(pattern);
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void publicSetOutputStream(OutputStream stream) {
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.setOutputStream(stream);
1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
1151