/* DefaultDefinedPackages.java -- Test which ensures that packages are defined by the boot classloader
Copyright (C) 2006 Olivier Jolly <olivier.jolly@pcedev.com>
This file is part of Mauve.
Mauve is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Mauve is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with Mauve; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
// Tags: JDK1.0
package gnu.testlet.wonka.lang.ClassLoader;
import gnu.testlet.TestHarness;
import gnu.testlet.Testlet;
import java.io.Serializable;
/**
* Test which ensures that the boot class loader is defining packages like the
* URLClassLoader does.
* @author Olivier Jolly <olivier.jolly@pcedev.com>
* @see URLClassLoader#findClass(java.lang.String)
*/
public class BootDefinedPackages implements Testlet
{
private static class TestLoader extends ClassLoader implements Serializable
{
/**
* Dummy serialVersionUID used to appease warnings
*/
private static final long serialVersionUID = 1L;
/**
* List of classes in each of the standard packages
*/
static String standardPackagesClasses[] = {
/* Not in base Mika build
"java.applet.Applet",
"java.awt.color.CMMException",
"java.awt.datatransfer.Clipboard",
"java.awt.dnd.peer.DragSourceContextPeer",
"java.awt.dnd.Autoscroll",
"java.awt.event.ActionEvent",
"java.awt.font.FontRenderContext",
"java.awt.geom.AffineTransform",
"java.awt.im.spi.InputMethod",
"java.awt.im.InputContext",
"java.awt.image.renderable.ContextualRenderedImageFactory",
"java.awt.image.AffineTransformOp",
"java.awt.peer.ButtonPeer",
"java.awt.print.Book",
"java.awt.ActiveEvent",
"java.beans.beancontext.BeanContext",
"java.beans.AppletInitializer",
*/
"java.io.BufferedInputStream",
// "java.lang.annotation.AnnotationFormatError",
"java.lang.ref.PhantomReference",
"java.lang.reflect.AccessibleObject",
"java.lang.AbstractMethodError",
"java.math.BigDecimal",
"java.net.Authenticator",
/*
"java.nio.channels.spi.AbstractInterruptibleChannel",
"java.nio.channels.AlreadyConnectedException",
"java.nio.charset.spi.CharsetProvider",
"java.nio.charset.CharacterCodingException",
"java.nio.Buffer",
*/
"java.rmi.activation.Activatable",
"java.rmi.dgc.DGC",
"java.rmi.registry.LocateRegistry",
"java.rmi.server.ExportException",
"java.rmi.AccessException",
"java.security.acl.Acl",
"java.security.cert.Certificate",
"java.security.interfaces.DSAKey",
"java.security.spec.AlgorithmParameterSpec",
"java.security.AccessControlContext",
"java.sql.Array",
"java.text.Annotation",
"java.util.jar.Attributes",
// "java.util.logging.ConsoleHandler",
// "java.util.prefs.AbstractPreferences",
// "java.util.regex.Matcher",
"java.util.zip.Adler32",
"java.util.AbstractCollection" };
public TestLoader(ClassLoader parent)
{
super(parent);
}
/**
* Real test method for package definition which can access the protected
* getPackage method
* @param harness
* the test harness
* @see ClassLoader#getPackage(java.lang.String)
*/
public void test(TestHarness harness)
{
harness.checkPoint("Checking basic packages");
// This package must be defined since it is the one which contains Object
harness.check(getPackage("java.lang") != null);
// This package must be defined since we're implementing Serializable
harness.check(getPackage("java.io") != null);
// Instead of checking some packages, we loop over each standard package,
// and if not already defined, it should be once we load a class in it.
// Note that this loop may not produce the same result on different vms,
// but it should be consistent across several runs on the same vm.
for (int i = 0; i < standardPackagesClasses.length; i++)
{
String packageName;
int lastDot = standardPackagesClasses[i].lastIndexOf('.');
// Get the package name from the standard class name
packageName = standardPackagesClasses[i].substring(0, lastDot);
if (getPackage(packageName) == null)
{
// packageName is not yet defined, we should be able to make it
// defined by trying to access a class in it
try
{
Class.forName(standardPackagesClasses[i]);
harness.check(getPackage(packageName) != null,
"Checking definition of " + packageName);
}
catch (ClassNotFoundException e)
{
harness.debug("Unsuitable class to test on this vm");
harness.debug(e);
}
}
}
}
}
/*
* (non-Javadoc)
* @see gnu.testlet.Testlet#test(gnu.testlet.TestHarness)
*/
public void test(TestHarness harness)
{
// Define a class loader for testing, with the system class loader as
// parent, and starts the real test
TestLoader loader = new TestLoader(getClass().getClassLoader());
loader.test(harness);
}
}