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 tests.api.java.util;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.KnownFailure;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PrintStream;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PrintWriter;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Enumeration;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.InvalidPropertiesFormatException;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Properties;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.resource.Support_Resources;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(Properties.class)
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PropertiesTest extends junit.framework.TestCase {
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Properties tProps;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    byte[] propsFile;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#Properties()
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Properties",
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_Constructor() {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties p = new Properties();
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // do something to avoid getting a variable unused warning
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        p.clear();
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#Properties(java.util.Properties)
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Properties",
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.util.Properties.class}
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_util_Properties() {
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (System.getProperty("java.vendor") != null) {
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Properties p = new Properties(System.getProperties());
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull("failed to construct correct properties", p
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getProperty("java.vendor"));
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#getProperty(java.lang.String)
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies positive case.",
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getProperty",
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getPropertyLjava_lang_String() {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Did not retrieve property", "this is a test property",
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                tProps.getProperty("test.prop"));
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#getProperty(java.lang.String,
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        java.lang.String)
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getProperty",
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, java.lang.String.class}
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getPropertyLjava_lang_StringLjava_lang_String() {
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Did not retrieve property", "this is a test property",
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                tProps.getProperty("test.prop", "Blarg"));
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Did not return default value", "Gabba", tProps
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("notInThere.prop", "Gabba"));
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(tProps.getProperty("", null));
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#getProperty(java.lang.String)
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Regression test.",
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getProperty",
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getPropertyLjava_lang_String2() {
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for HARMONY-3518
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyProperties props = new MyProperties();
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(props.getProperty("key"));
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#getProperty(java.lang.String,
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        java.lang.String)
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Regression test.",
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getProperty",
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, java.lang.String.class}
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getPropertyLjava_lang_StringLjava_lang_String2() {
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for HARMONY-3518
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyProperties props = new MyProperties();
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(props.getProperty("key", "defaultValue"), "defaultValue");
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // regression testing for HARMONY-3518
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class MyProperties extends Properties {
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public synchronized Object get(Object key) {
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return getProperty((String) key); // assume String
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#list(java.io.PrintStream)
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "list",
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.PrintStream.class}
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_listLjava_io_PrintStream() {
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PrintStream ps = new PrintStream(baos);
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String propList;
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Abba", "Cadabra");
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Open", "Sesame");
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.list(ps);
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.flush();
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        propList = baos.toString();
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Property list innacurate", (propList
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .indexOf("Abba=Cadabra") >= 0)
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (propList.indexOf("Open=Sesame") >= 0));
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#list(java.io.PrintWriter)
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "list",
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.PrintWriter.class}
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_listLjava_io_PrintWriter() {
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PrintWriter pw = new PrintWriter(baos);
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String propList;
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Abba", "Cadabra");
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Open", "Sesame");
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.list(pw);
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        pw.flush();
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        propList = baos.toString();
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Property list innacurate", (propList
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .indexOf("Abba=Cadabra") >= 0)
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (propList.indexOf("Open=Sesame") >= 0));
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#load(java.io.InputStream)
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "load",
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_loadLjava_io_InputStream() throws IOException {
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties prop = new Properties();
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream is = new ByteArrayInputStream(writeProperties());
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(is);
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is.close();
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to load correct properties", "harmony.tests", prop
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("test.pkg"));
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull("Load failed to parse incorrectly", prop
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("commented.entry"));
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(new ByteArrayInputStream("=".getBytes()));
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to add empty key", prop.get("").equals(""));
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(new ByteArrayInputStream(" = ".getBytes()));
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to add empty key2", prop.get("").equals(""));
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(new ByteArrayInputStream(" a= b".getBytes()));
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to ignore whitespace", "b", prop.get("a"));
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(new ByteArrayInputStream(" a b".getBytes()));
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to interpret whitespace as =", "b", prop.get("a"));
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(new ByteArrayInputStream("#\u008d\u00d2\na=\u008d\u00d3"
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getBytes("ISO8859_1")));
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to parse chars >= 0x80", "\u008d\u00d3", prop
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .get("a"));
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.load(new ByteArrayInputStream(
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "#properties file\r\nfred=1\r\n#last comment"
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getBytes("ISO8859_1")));
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to load when last line contains a comment", "1",
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                prop.get("fred"));
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(new byte[]{'\\', 'u', 'x', 'x', 'x', 'x'});
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            prop.load(bais);
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     * @throws IOException
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#load(java.io.InputStream)
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify IOException, IllegalArgumentException.",
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "load",
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_loadLjava_io_InputStream_subtest0() throws IOException {
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream is = Support_Resources
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getStream("hyts_PropertiesTest.properties");
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties props = new Properties();
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        props.load(is);
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is.close();
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("1", "\n \t \f", props.getProperty(" \r"));
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("2", "a", props.getProperty("a"));
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("3", "bb as,dn   ", props.getProperty("b"));
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("4", ":: cu", props.getProperty("c\r \t\nu"));
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("5", "bu", props.getProperty("bu"));
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("6", "d\r\ne=e", props.getProperty("d"));
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("7", "fff", props.getProperty("f"));
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("8", "g", props.getProperty("g"));
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("9", "", props.getProperty("h h"));
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("10", "i=i", props.getProperty(" "));
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("11", "   j", props.getProperty("j"));
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("12", "   c", props.getProperty("space"));
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("13", "\\", props.getProperty("dblbackslash"));
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#save(java.io.OutputStream, java.lang.String)
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "save",
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.lang.String.class}
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_saveLjava_io_OutputStreamLjava_lang_String()
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException {
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Property A", "aye");
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Property B", "bee");
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Property C", "see");
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.save(out, "A Header");
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps2 = new Properties();
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps2.load(in);
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration e = myProps.propertyNames();
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (e.hasMoreElements()) {
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String nextKey = (String) e.nextElement();
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Stored property list not equal to original", myProps2
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getProperty(nextKey).equals(myProps.getProperty(nextKey)));
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#setProperty(java.lang.String,
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        java.lang.String)
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setProperty",
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, java.lang.String.class}
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setPropertyLjava_lang_StringLjava_lang_String() {
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Yoink", "Yabba");
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to set property", "Yabba", myProps
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("Yoink"));
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("Yoink", "Gab");
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to reset property", "Gab", myProps
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("Yoink"));
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#store(java.io.OutputStream, java.lang.String)
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "store",
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.lang.String.class}
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_storeLjava_io_OutputStreamLjava_lang_String()
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException {
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property A", " aye\\\f\t\n\r\b");
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property B", "b ee#!=:");
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property C", "see");
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps2 = new Properties();
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.store(out, "A Header");
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.store(out, null);
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps2.load(in);
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration e = myProps.propertyNames();
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (e.hasMoreElements()) {
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String nextKey = (String) e.nextElement();
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Stored property list not equal to original", myProps2
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getProperty(nextKey).equals(myProps.getProperty(nextKey)));
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            myProps.store(null, "String");
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NullPointerException expected");
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ee){
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#loadFromXML(java.io.InputStream)
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "loadFromXML",
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
390a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    @KnownFailure("Expected Exception is not thrown.")
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_loadFromXMLLjava_io_InputStream() throws IOException {
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property A", " aye\\\f\t\n\r\b");
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property B", "b ee#!=:");
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property C", "see");
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps2 = new Properties();
397a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.storeToXML(out, "A Header");
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            myProps2.loadFromXML(in);
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("InvalidPropertiesFormatException expected");
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (InvalidPropertiesFormatException e) {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties prop = new Properties();
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream is = new ByteArrayInputStream(writePropertiesXML("UTF-8"));
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.loadFromXML(is);
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is.close();
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to load correct properties", "value3", prop
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("key3"));
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to load correct properties", "value1", prop
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("key1"));
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop = new Properties();
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is = new ByteArrayInputStream(writePropertiesXML("ISO-8859-1"));
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prop.loadFromXML(is);
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        is.close();
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to load correct properties", "value2", prop
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("key2"));
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Failed to load correct properties", "value1", prop
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("key1"));
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            prop.loadFromXML(null);
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NullPointerException expected");
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.util.Properties#storeToXML(java.io.OutputStream,
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        java.lang.String, java.lang.String)
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "storeToXML",
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.lang.String.class, java.lang.String.class}
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_storeToXMLLjava_io_OutputStreamLjava_lang_StringLjava_lang_String()
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException {
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("key1", "value1");
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("key2", "value2");
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("key3", "value3");
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("<a>key4</a>", "\"value4");
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("key5   ", "<h>value5</h>");
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("<a>key6</a>", "   <h>value6</h>   ");
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("<comment>key7</comment>", "value7");
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("  key8   ", "<comment>value8</comment>");
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("&lt;key9&gt;", "\u0027value9");
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("key10\"", "&lt;value10&gt;");
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("&amp;key11&amp;", "value11");
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("key12", "&amp;value12&amp;");
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.setProperty("<a>&amp;key13&lt;</a>",
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "&amp;&value13<b>&amp;</b>");
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // store in UTF-8 encoding
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.storeToXML(out, "comment");
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps2 = new Properties();
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps2.loadFromXML(in);
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration e = myProps.propertyNames();
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (e.hasMoreElements()) {
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String nextKey = (String) e.nextElement();
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Stored property list not equal to original", myProps2
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getProperty(nextKey).equals(myProps.getProperty(nextKey)));
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // store in ISO-8859-1 encoding
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out = new ByteArrayOutputStream();
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.storeToXML(out, "comment", "ISO-8859-1");
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in = new ByteArrayInputStream(out.toByteArray());
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps2 = new Properties();
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps2.loadFromXML(in);
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        e = myProps.propertyNames();
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (e.hasMoreElements()) {
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String nextKey = (String) e.nextElement();
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Stored property list not equal to original", myProps2
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getProperty(nextKey).equals(myProps.getProperty(nextKey)));
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out = new ByteArrayOutputStream();
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.storeToXML(out, "comment", "ISO-8859-1");
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.storeToXML(out, null, "ISO-8859-1");
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            myProps.storeToXML(out, "comment", null);
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NulPointerException expected");
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ee) {
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            myProps.storeToXML(null, "comment", "ISO-8859-1");
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NulPointerException expected");
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ee) {
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "storeToXML",
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.OutputStream.class, java.lang.String.class}
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_storeToXMLLjava_io_OutputStreamLjava_lang_String()
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    throws IOException {
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property A", "value 1");
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property B", "value 2");
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property C", "value 3");
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps2 = new Properties();
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.storeToXML(out, "A Header");
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps2.loadFromXML(in);
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration e = myProps.propertyNames();
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (e.hasMoreElements()) {
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String nextKey = (String) e.nextElement();
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Stored property list not equal to original", myProps2
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getProperty(nextKey).equals(myProps.getProperty(nextKey)));
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            myProps.storeToXML(null, "String");
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NullPointerException expected");
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ee){
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "propertyNames",
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_propertyNames() {
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Properties myProps = new Properties();
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property A", "value 1");
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property B", "value 2");
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myProps.put("Property C", "value 3");
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Enumeration e = myProps.propertyNames();
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int count = 0;
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (e.hasMoreElements()) {
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            count++;
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(myProps.containsKey(e.nextElement()));
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(myProps.size() == count);
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is called before a test is executed.
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tProps = new Properties();
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tProps.put("test.prop", "this is a test property");
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tProps.put("bogus.prop", "bogus");
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method is called after a test is executed.
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void tearDown() throws Exception {
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tProps = null;
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.tearDown();
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected byte[] writeProperties() throws IOException {
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream bout = new ByteArrayOutputStream();
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PrintStream ps = new PrintStream(bout);
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("#commented.entry=Bogus");
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("test.pkg=harmony.tests");
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("test.proj=Automated Tests");
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.close();
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return bout.toByteArray();
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected byte[] writePropertiesXML(String encoding) throws IOException {
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream bout = new ByteArrayOutputStream();
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PrintStream ps = new PrintStream(bout, true, encoding);
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>");
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .println("<!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\">");
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<properties>");
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<comment>comment</comment>");
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<entry key=\"key4\">value4</entry>");
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<entry key=\"key3\">value3</entry>");
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<entry key=\"key2\">value2</entry>");
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("<entry key=\"key1\"><!-- xml comment -->value1</entry>");
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.println("</properties>");
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ps.close();
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return bout.toByteArray();
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
630