summaryrefslogtreecommitdiffstats
path: root/tests/086-null-super/src/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/086-null-super/src/Main.java')
-rw-r--r--tests/086-null-super/src/Main.java165
1 files changed, 0 insertions, 165 deletions
diff --git a/tests/086-null-super/src/Main.java b/tests/086-null-super/src/Main.java
deleted file mode 100644
index 82237c523..000000000
--- a/tests/086-null-super/src/Main.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * Class loader test.
- */
-public class Main {
- /**
- * Thrown when an unexpected Exception is caught internally.
- */
- static class TestFailed extends Exception {
- public TestFailed(Throwable cause) {
- super(cause);
- }
- }
-
- /**
- * A class loader which loads classes from the dex file
- * "test.jar". However, it will return null when asked to load the
- * class InaccessibleSuper.
- *
- * When testing code calls BrokenDexLoader's findBrokenClass(),
- * a BrokenDexLoader will be the defining loader for the class
- * Inaccessible. The VM will call the defining loader for
- * "InaccessibleSuper", which will return null, which the VM
- * should be able to deal with gracefully.
- *
- * Note that this depends heavily on the Dalvik test harness.
- */
- static class BrokenDexLoader extends ClassLoader {
-
- /** We return null when asked to load InaccessibleSuper. */
- private static class InaccessibleSuper {}
- private static class Inaccessible extends InaccessibleSuper {}
-
- private static final String SUPERCLASS_NAME =
- "Main$BrokenDexLoader$InaccessibleSuper";
- private static final String CLASS_NAME =
- "Main$BrokenDexLoader$Inaccessible";
-
- private static final String DEX_FILE = "test.jar";
-
- public BrokenDexLoader(ClassLoader parent) {
- super(parent);
- }
-
- /**
- * Finds the class with the specified binary name, from DEX_FILE.
- *
- * If we don't find a match, we throw an exception.
- */
- private Class<?> findDexClass(String name)
- throws TestFailed, InvocationTargetException
- {
-
- try {
- /*
- * Find the DexFile class, and construct a DexFile object
- * through reflection, then call loadCLass on it.
- */
- Class mDexClass = ClassLoader.getSystemClassLoader().
- loadClass("dalvik.system.DexFile");
- Constructor ctor = mDexClass.
- getConstructor(new Class[] {String.class});
- Object mDexFile = ctor.newInstance(DEX_FILE);
- Method meth = mDexClass.
- getMethod("loadClass",
- new Class[] { String.class, ClassLoader.class });
- /*
- * Invoking loadClass on CLASS_NAME is expected to
- * throw an InvocationTargetException. Anything else
- * is an error we can't recover from.
- */
- meth.invoke(mDexFile, name, this);
- } catch (NoSuchMethodException nsme) {
- throw new TestFailed(nsme);
- } catch (InstantiationException ie) {
- throw new TestFailed(ie);
- } catch (IllegalAccessException iae) {
- throw new TestFailed(iae);
- } catch (ClassNotFoundException cnfe) {
- throw new TestFailed(cnfe);
- }
-
- return null;
- }
-
- /**
- * Load a class.
- *
- * Return null if the class's name is SUPERCLASS_NAME;
- * otherwise invoke the super's loadClass method.
- */
- public Class<?> loadClass(String name, boolean resolve)
- throws ClassNotFoundException
- {
- if (SUPERCLASS_NAME.equals(name)) {
- return null;
- }
-
- return super.loadClass(name, resolve);
- }
-
- /**
- * Attempt to find the class with the superclass we refuse to
- * load. This is expected to throw an
- * InvocationTargetException, with a NullPointerException as
- * its cause.
- */
- public void findBrokenClass()
- throws TestFailed, InvocationTargetException
- {
- findDexClass(CLASS_NAME);
- }
- }
-
- /**
- * Main entry point.
- */
- public static void main(String[] args)
- throws TestFailed, ClassNotFoundException {
- /*
- * Run test.
- */
- testFailLoadAndGc();
- }
-
- /**
- * See if we can GC after a failed load.
- */
- static void testFailLoadAndGc() throws TestFailed {
- try {
- BrokenDexLoader loader;
-
- loader = new BrokenDexLoader(ClassLoader.getSystemClassLoader());
- loader.findBrokenClass();
- System.err.println("ERROR: Inaccessible was accessible");
- } catch (InvocationTargetException ite) {
- Throwable cause = ite.getCause();
- if (cause instanceof NullPointerException) {
- System.err.println("Got expected ITE/NPE");
- } else {
- System.err.println("Got unexpected ITE");
- ite.printStackTrace();
- }
- }
- }
-}