summaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2010-09-24 16:42:25 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-09-24 16:42:25 -0700
commita884f455e2ad843819c36d2607790450d47475dd (patch)
tree5d1f7166cb60094b083761b8fdb1fbc8c3bc631e /support
parent915753146bdd4551fe2aa2655a40adf58d7aafa6 (diff)
parent6e65088f21ac5bda5d25fade13ee360c5cba3457 (diff)
downloadlibcore-a884f455e2ad843819c36d2607790450d47475dd.zip
libcore-a884f455e2ad843819c36d2607790450d47475dd.tar.gz
libcore-a884f455e2ad843819c36d2607790450d47475dd.tar.bz2
Merge "Rely on the test runner to ensure a pristine VM." into gingerbread
Diffstat (limited to 'support')
-rw-r--r--support/src/test/java/tests/util/TestEnvironment.java184
1 files changed, 0 insertions, 184 deletions
diff --git a/support/src/test/java/tests/util/TestEnvironment.java b/support/src/test/java/tests/util/TestEnvironment.java
deleted file mode 100644
index a9e8a57..0000000
--- a/support/src/test/java/tests/util/TestEnvironment.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package tests.util;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.TimeZone;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
-
-/**
- * Prepares system properties and preferences to hygienic values for testing:
- * <ul>
- * <li>System properties are set to reasonable defaults. Referenced
- * directories such as the user and Java home directories will be
- * writable.
- * <li>System and user preferences are cleared. Once the preferences classes
- * have been initialized, the path where their data is stored is fixed.
- * For this reason, every test that reads or writes preferences should
- * first reset the system configuration with this API.
- * </ul>
- *
- * <p>Use this class to clean up before and/or after your test. Sample usage:
- * <pre>
- * public void MyTest extends TestCase {
- *
- * protected void setUp() throws Exception {
- * super.setUp();
- * TestEnvironment().reset();
- * }
- *
- * protected void tearDown() throws Exception {
- * TestEnvironment().reset();
- * super.tearDown();
- * }
- *
- * ...
- * }</pre>
- */
-public final class TestEnvironment {
- private TestEnvironment() {}
-
- public static synchronized void reset() {
- resetSystemProperties();
- resetPreferences();
- resetDefaultLocale();
- resetDefaultTimeZone();
- // TODO: SecurityManager?
- }
-
- private static void resetDefaultLocale() {
- // This is hard-coded in resetSystemProperties, so no need to be clever here.
- Locale.setDefault(Locale.US);
- }
-
- private static void resetDefaultTimeZone() {
- TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
- }
-
- private static String getExistingSystemProperty(String name) {
- String result = System.getProperty(name);
- if (result == null) {
- throw new AssertionError("Tests require the '" + name + "' system property");
- }
- return result;
- }
-
- private static void resetSystemProperties() {
- // There are two system properties we can't live without.
- // 1. We need somewhere writable to stash our stuff.
- String tmpDir = getExistingSystemProperty("java.io.tmpdir");
- // 2. We need to know who we are, specifically "am I root?" because that affects what
- // the OS lets us do, and that affects test expectations.
- String userName = getExistingSystemProperty("user.name");
-
- Properties p = new Properties();
-
- // runtime properties that we never want to clobber
- copyProperty(p, "android.vm.dexfile");
- copyProperty(p, "java.boot.class.path");
- copyProperty(p, "java.class.path");
- copyProperty(p, "java.io.tmpdir");
- copyProperty(p, "java.library.path");
- copyProperty(p, "os.arch");
- copyProperty(p, "os.name");
- copyProperty(p, "os.version");
-
- // paths with writable values for testing
- String userHome = tmpDir + "/user.home";
- String javaHome = tmpDir + "/java.home";
- String userDir = tmpDir + "/user.dir";
- makeDirectory(new File(userHome));
- makeDirectory(new File(javaHome));
- makeDirectory(new File(userDir));
- p.put("java.home", javaHome);
- p.put("user.dir", userDir);
- p.put("user.home", userHome);
-
- // hardcoded properties
- p.put("file.encoding", "UTF-8");
- p.put("file.separator", "/");
- p.put("java.class.version", "46.0");
- p.put("java.compiler", "");
- p.put("java.ext.dirs", "");
- p.put("java.net.preferIPv6Addresses", "true");
- p.put("java.runtime.name", "Android Runtime");
- p.put("java.runtime.version", "0.9");
- p.put("java.specification.name", "Dalvik Core Library");
- p.put("java.specification.vendor", "The Android Project");
- p.put("java.specification.version", "0.9");
- p.put("java.vendor", "The Android Project");
- p.put("java.vendor.url", "http://www.android.com/");
- p.put("java.version", "0");
- p.put("java.vm.name", "Dalvik");
- p.put("java.vm.specification.name", "Dalvik Virtual Machine Specification");
- p.put("java.vm.specification.vendor", "The Android Project");
- p.put("java.vm.specification.version", "0.9");
- p.put("java.vm.vendor", "The Android Project");
- p.put("java.vm.vendor.url", "http://www.android.com/");
- p.put("java.vm.version", "1.2.0");
- p.put("line.separator", "\n");
- p.put("path.separator", ":");
- p.put("user.language", "en");
- p.put("user.name", userName);
- p.put("user.region", "US");
-
- System.setProperties(p);
- }
-
- private static void copyProperty(Properties p, String key) {
- String value = System.getProperty(key);
- if (value != null) {
- p.put(key, value);
- } else {
- p.remove(key);
- }
- }
-
- private static void makeDirectory(File path) {
- boolean success;
- if (!path.exists()) {
- success = path.mkdirs();
- } else if (!path.isDirectory()) {
- success = path.delete() && path.mkdirs();
- } else {
- success = true;
- }
-
- if (!success) {
- throw new RuntimeException("Failed to make directory " + path);
- }
- }
-
- private static void resetPreferences() {
- try {
- for (Preferences root : Arrays.asList(
- Preferences.systemRoot(), Preferences.userRoot())) {
- for (String child : root.childrenNames()) {
- root.node(child).removeNode();
- }
- root.clear();
- root.flush();
- }
- } catch (BackingStoreException e) {
- throw new RuntimeException(e);
- }
- }
-}