1035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson/* 2035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * Copyright (C) 2011 The Android Open Source Project 3035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * 4035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * you may not use this file except in compliance with the License. 6035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * You may obtain a copy of the License at 7035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * 8035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * 10035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * Unless required by applicable law or agreed to in writing, software 11035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * See the License for the specific language governing permissions and 14035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * limitations under the License. 15035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson */ 16035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson 17035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilsonpackage libcore.java.util.prefs; 18035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson 1966e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughesimport java.io.ByteArrayOutputStream; 20035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilsonimport java.io.File; 21035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilsonimport java.io.FileWriter; 22035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilsonimport java.util.prefs.Preferences; 23035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilsonimport junit.framework.TestCase; 24035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson 25035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilsonpublic final class PreferencesTest extends TestCase { 26035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson 27035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson /** 28035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * The preferences API is designed to be hostile towards files that exist 29035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson * where it wants to store its XML data. http://b/3431233 30035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson */ 31035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson public void testPreferencesClobbersExistingFiles() throws Exception { 32035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson File userPrefs = new File(System.getProperty("user.home") + "/.java/.userPrefs/prefs.xml"); 33035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson FileWriter writer = new FileWriter(userPrefs); 34035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson writer.write("lamb"); 35035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson writer.close(); 36035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson userPrefs.setReadable(false); 37035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson userPrefs.setWritable(false); 38035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson long oldLength = userPrefs.length(); 39035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson 40035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson Preferences userPreferences = Preferences.userRoot(); 41035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson userPreferences.sync(); 42035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson userPreferences.put("a", "lion"); 43035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson userPreferences.flush(); 44035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson assertTrue("Expected to exist " + userPrefs, userPrefs.exists()); 45035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson assertTrue("Expected file to be clobbered", oldLength != userPrefs.length()); 46035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson } 4766e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes 4866e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes public void testHtmlEncoding() throws Exception { 4966e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes Preferences parent = Preferences.userNodeForPackage(this.getClass()); 5066e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes Preferences p = parent.node("testHtmlEncoding"); 5166e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes p.put("key", "a<>&'\"\\b"); 5266e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes p.flush(); 5366e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes 5466e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes ByteArrayOutputStream baos = new ByteArrayOutputStream(); 5566e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes p.exportNode(baos); 5666e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes 5766e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes String s = new String(baos.toByteArray(), "UTF-8"); 5866e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes assertTrue(s, s.contains("value=\"a<>&'"\\b\"")); 5966e1a782c0ffafcb7c4226798d6ecc4cfc071916Elliott Hughes } 60035932b8f19aeb0eb5b25a0b6cbe7f0ab3567ddeJesse Wilson} 61