//
// Copyright (C) 2006 United States Government as represented by the
// Administrator of the National Aeronautics and Space Administration
// (NASA). All Rights Reserved.
//
// This software is distributed under the NASA Open Source Agreement
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
// directory tree for the complete NOSA document.
//
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
//
package gov.nasa.jpf.test.java.lang;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import org.junit.Test;
import gov.nasa.jpf.util.test.TestJPF;
/**
* test of java.lang.ClassLoader API
*/
public class ClassLoaderTest extends TestJPF {
@Test
public void testGetResource() {
if(verifyNoPropertyViolation()) {
testGetResourceImpl(new TestClassLoader());
}
}
@Test
public void testGetResources() throws IOException{
if(verifyNoPropertyViolation()) {
testGetResourcesImpl(new TestClassLoader());
}
}
@Test
public void testGetResourceAsStream() throws IOException{
if(verifyNoPropertyViolation()) {
testGetResourceAsStreamImpl(new TestClassLoader());
}
}
@Test
public void testLoadClass() {
if(verifyNoPropertyViolation()) {
ClassLoader classLoader = new TestClassLoader();
try {
classLoader.loadClass("non_existing_class");
fail();
}catch(ClassNotFoundException e) {}
}
}
@Test
public void testLoadClass2() {
if(verifyNoPropertyViolation()) {
ClassLoader classLoader = new TestClassLoader();
try {
classLoader.loadClass(ClassLoader.class.getName());
}catch(ClassNotFoundException e) {
fail(e.getMessage());
}
}
}
@Test
public void testGetSystemResource() {
if(verifyNoPropertyViolation()) {
testGetResourceImpl( TestClassLoader.getSystemClassLoader());
}
}
@Test
public void testGetSystemResources() throws IOException{
if(verifyNoPropertyViolation()) {
testGetResourcesImpl( TestClassLoader.getSystemClassLoader());
}
}
@Test
public void testGetSystemResourceAsStream() throws IOException{
if(verifyNoPropertyViolation()) {
testGetResourceAsStreamImpl( TestClassLoader.getSystemClassLoader());
}
}
@Test
public void testGetSystemClassLoader() {
if(verifyNoPropertyViolation()) {
ClassLoader classLoader = new TestClassLoader();
assertNotNull(ClassLoader.getSystemClassLoader());
assertNull(ClassLoader.getSystemClassLoader().getParent());
assertFalse(classLoader.equals(ClassLoader.getSystemClassLoader()));
}
}
@Test
public void testGetParent() {
if(verifyNoPropertyViolation()) {
ClassLoader classLoader = new TestClassLoader();
assertNotNull(classLoader.getParent());
assertEquals(classLoader.getParent(),ClassLoader.getSystemClassLoader());
}
}
@Test
public void testGetParent2() {
if(verifyNoPropertyViolation()) {
ClassLoader parentClassLoader = new TestClassLoader();
ClassLoader classLoader = new TestClassLoader(parentClassLoader);
assertEquals(parentClassLoader, classLoader.getParent());
}
}
@Test
public void testFoundResources() throws IOException {
if(verifyNoPropertyViolation()) {
TestClassLoader classLoader = new TestClassLoader();
Enumeration<URL> enm = classLoader.findResources("not_existing_resource");
assertNotNull(enm);
assertFalse(enm.hasMoreElements());
}
}
private void testGetResourceImpl(ClassLoader classLoader) {
assertNull(classLoader.getResource("not_existing_resource"));
assertNotNull(classLoader.getResource("DiningPhil.class"));
assertNull(classLoader.getResource("ClassLoader.class"));
assertNotNull(classLoader.getResource("java/lang/ClassLoader.class"));
}
private void testGetResourcesImpl(ClassLoader classLoader) throws IOException{
assertFalse(classLoader.getResources("not_existing_resources").hasMoreElements());
Enumeration<?> e = classLoader.getResources("DiningPhil.class");
assertTrue(e.hasMoreElements());
assertNotNull(e.nextElement());
assertFalse(e.hasMoreElements());
e = classLoader.getResources("ClassLoader.class");
assertFalse(e.hasMoreElements());
// It should find at least two resources: 1. model class, 2. JDK class
e = classLoader.getResources("java/lang/ClassLoader.class");
assertTrue(e.hasMoreElements());
assertNotNull(e.nextElement());
assertTrue(e.hasMoreElements());
assertNotNull(e.nextElement());
}
private void testGetResourceAsStreamImpl(ClassLoader classLoader) throws IOException{
assertNull(classLoader.getResourceAsStream("not_existing_resources"));
InputStream is = classLoader.getResourceAsStream("DiningPhil.class");
assertNotNull(is);
assertTrue(is.read() > 0);
}
class TestClassLoader extends ClassLoader {
public TestClassLoader() {
super();
}
public TestClassLoader(ClassLoader parent) {
super(parent);
}
protected Enumeration<URL> findResources(String name) throws IOException {
return super.findResources(name);
}
}
}