blob: fcc4f60b0d10ad5a1c59062c6754c5bf6e5514f8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
/**
* @author Serguei S.Zapreyev
*/
package java.lang;
/**
* Area for supposed testing is arrays returning mrthods for:
* - classes, interfaces
* - methods
* - constructors
**/
import java.lang.reflect.*;
import junit.framework.TestCase;
/*
* Created on May 02, 2006
*
* This ClassGenericsTest2 class is used to test the Core API Class, Method, Constructor classes
*
*/
/**
* ###############################################################################
* ###############################################################################
* TODO: 1.
* ###############################################################################
* ###############################################################################
*/
@SuppressWarnings(value={"unchecked"}) public class ClassGenericsTest2<X> extends TestCase {
class Mc201 {};
interface MI201<T0 extends java.io.Serializable> {};
interface MI202<T1 extends MI201> {};
interface MI203<T2> extends MI201 {};
interface MI204<T2> {
interface MI205<T21, T22> {
};
};
public class Mc202<T3 extends ClassGenericsTest2> {
public class Mc204<T5 extends ClassGenericsTest2> {
};
};
class Mc203<T4 extends Thread &java.io.Serializable &Cloneable> extends java.lang.ClassGenericsTest2<? super Class>.Mc202<ClassGenericsTest2> implements MI202<MI203<java.io.Serializable>>, MI203<MI203<Cloneable>>, MI204.MI205<Type, Type> {};
/**
* check immutability for results of getTypeParameters(), getGenericInterfaces() methods of generalized member class
* and the attendant reflect implementation methods for WildcardType(getLowerBounds(), getUpperBounds()),
* TypeVariable(getBounds()), ParameterizedType(getActualTypeArguments())
*/
public void test_2() {
Type ap[];
TypeVariable tv;
Type ab[];
Type ai[];
Type aa[];
Type aa2[];
Type oc;
WildcardType wc;
Type aa3[];
//////////////////////////////////////////////////////////////////////////////////////////////
ai = Mc203.class.getInterfaces();
//---
ai[0] = null;
ai = Mc203.class.getInterfaces();
if(ai.length!=3) fail("test_2, case 001 FAILED: "+ai.length);
if(!((Class)ai[0]).getName().equals("java.lang.ClassGenericsTest2$MI202")) fail("test_2, case 002 FAILED: "+((Class)((ParameterizedType)ai[0]).getRawType()).getName());
ap = Mc203.class.getTypeParameters();
tv = (TypeVariable)ap[0];
ab = tv.getBounds();
//---
ab[0] = null;
ab = tv.getBounds();
if(!((Class)ab[0]).getName().equals("java.lang.Thread")) fail("test_2, case 003 FAILED: "+((Class)ab[0]).getName());
//---
ap[0] = null;
ap = Mc203.class.getTypeParameters();
tv = (TypeVariable)ap[0];
if(!tv.getName().equals("T4")) fail("test_2, case 004 FAILED: "+tv.getName());
//---
ap = null;
ap = Mc203.class.getTypeParameters();
tv = (TypeVariable)ap[0];
if(!tv.getName().equals("T4")) fail("test_2, case 005 FAILED: "+tv.getName());
//////////////////////////////////////////////////////////////////////////////////////////////
//---
ai = Mc203.class.getGenericInterfaces();
aa = ((ParameterizedType)ai[2]).getActualTypeArguments();
aa[0] = null;
aa[1] = null;
aa = ((ParameterizedType)ai[2]).getActualTypeArguments();
if(aa.length!=2) fail("test_2, case 006 FAILED: "+aa.length);
if(!((Class)aa[0]).getName().equals("java.lang.reflect.Type")) fail("test_2, case 007 FAILED: "+((Class)((ParameterizedType)aa[0]).getRawType()).getName());
if(!((Class)aa[1]).getName().equals("java.lang.reflect.Type")) fail("test_2, case 008 FAILED: "+((Class)((ParameterizedType)aa[1]).getRawType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
ai[2] = null;
ai = Mc203.class.getGenericInterfaces();
if(!((Class)((ParameterizedType)ai[2]).getRawType()).getName().equals("java.lang.ClassGenericsTest2$MI204$MI205")) fail("test_2, case 009 FAILED: "+((Class)((ParameterizedType)ai[2]).getRawType()).getName());
if(!((Class)((ParameterizedType)ai[2]).getOwnerType()).getName().equals("java.lang.ClassGenericsTest2$MI204")) fail("test_2, case 010 FAILED: "+((Class)((ParameterizedType)ai[2]).getOwnerType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
aa = ((ParameterizedType)ai[1]).getActualTypeArguments();
aa2 = ((ParameterizedType)aa[0]).getActualTypeArguments(); //java.lang.Cloneable
aa2[0] = null;
aa2 = ((ParameterizedType)aa[0]).getActualTypeArguments(); //java.lang.Cloneable
if(aa2.length!=1) fail("test_2, case 009 FAILED: "+aa.length);
if(!((Class)aa2[0]).getName().equals("java.lang.Cloneable")) fail("test_2, case 011 FAILED: "+((Class)((ParameterizedType)aa2[0]).getRawType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
aa = ((ParameterizedType)ai[1]).getActualTypeArguments();
if(aa.length!=1) fail("test_2, case 012 FAILED: "+aa.length);
aa[0] = null;
aa = ((ParameterizedType)ai[1]).getActualTypeArguments();
if(!((Class)((ParameterizedType)aa[0]).getRawType()).getName().equals("java.lang.ClassGenericsTest2$MI203")) fail("test_2, case 013 FAILED: "+((Class)((ParameterizedType)aa[0]).getRawType()).getName());
if(!((Class)((ParameterizedType)aa[0]).getOwnerType()).getName().equals("java.lang.ClassGenericsTest2")) fail("test_2, case 014 FAILED: "+((Class)((ParameterizedType)aa[0]).getOwnerType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
ai[1] = null;
ai = Mc203.class.getGenericInterfaces();
if(!((Class)((ParameterizedType)ai[1]).getRawType()).getName().equals("java.lang.ClassGenericsTest2$MI203")) fail("test_2, case 015 FAILED: "+((Class)((ParameterizedType)ai[1]).getRawType()).getName());
if(!((Class)((ParameterizedType)ai[1]).getOwnerType()).getName().equals("java.lang.ClassGenericsTest2")) fail("test_2, case 016 FAILED: "+((Class)((ParameterizedType)ai[1]).getOwnerType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
aa = ((ParameterizedType)ai[0]).getActualTypeArguments();
aa2 = ((ParameterizedType)aa[0]).getActualTypeArguments(); //java.io.Serializable
aa2[0] = null;
aa2 = ((ParameterizedType)aa[0]).getActualTypeArguments(); //java.io.Serializable
if(aa2.length!=1) fail("test_2, case 017 FAILED: "+aa.length);
if(!((Class)aa2[0]).getName().equals("java.io.Serializable")) fail("test_2, case 018 FAILED: "+((Class)((ParameterizedType)aa2[0]).getRawType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
aa = ((ParameterizedType)ai[0]).getActualTypeArguments();
aa[0] = null;
aa = ((ParameterizedType)ai[0]).getActualTypeArguments();
if(aa.length!=1) fail("test_2, case 019 FAILED: "+aa.length);
if(!((Class)((ParameterizedType)aa[0]).getRawType()).getName().equals("java.lang.ClassGenericsTest2$MI203")) fail("test_2, case 020 FAILED: "+((Class)((ParameterizedType)aa[0]).getRawType()).getName());
if(!((Class)((ParameterizedType)aa[0]).getOwnerType()).getName().equals("java.lang.ClassGenericsTest2")) fail("test_2, case 021 FAILED: "+((Class)((ParameterizedType)aa[0]).getOwnerType()).getName());
//---
ai = Mc203.class.getGenericInterfaces();
ai[0] = null;
ai = Mc203.class.getGenericInterfaces();
if(ai.length!=3) fail("test_2, case 022 FAILED: "+ai.length);
if(!((Class)((ParameterizedType)ai[0]).getRawType()).getName().equals("java.lang.ClassGenericsTest2$MI202")) fail("test_2, case 023 FAILED: "+((Class)((ParameterizedType)ai[0]).getRawType()).getName());
if(!((Class)((ParameterizedType)ai[0]).getOwnerType()).getName().equals("java.lang.ClassGenericsTest2")) fail("test_2, case 024 FAILED: "+((Class)((ParameterizedType)ai[0]).getOwnerType()).getName());
ai = Mc203.class.getInterfaces();
ai[0] = null;
ai = Mc203.class.getInterfaces();
if(ai.length!=3) fail("test_2, case 025 FAILED: "+ai.length);
if(!((Class)ai[0]).getName().equals("java.lang.ClassGenericsTest2$MI202")) fail("test_2, case 026 FAILED: "+((Class)((ParameterizedType)ai[0]).getRawType()).getName());
//////////////////////////////////////////////////////////////////////////////////////////////
aa = ((ParameterizedType)Mc203.class.getGenericSuperclass()).getActualTypeArguments();
aa[0] = null;
aa = ((ParameterizedType)Mc203.class.getGenericSuperclass()).getActualTypeArguments();
if(aa.length!=1) fail("test_2, case 027 FAILED: "+aa.length);
if(!((Class)aa[0]).getName().equals("java.lang.ClassGenericsTest2")) fail("test_2, case 028 FAILED: "+((Class)aa[0]).getName());
//---
oc = ((ParameterizedType)Mc203.class.getGenericSuperclass()).getOwnerType();
aa = ((ParameterizedType)oc).getActualTypeArguments();
aa[0] = null;
aa = ((ParameterizedType)oc).getActualTypeArguments();
if(aa.length!=1) fail("test_2, case 029 FAILED: "+aa.length);
wc = (WildcardType)aa[0];
//---
aa3 = wc.getLowerBounds();
aa3[0] = null;
aa3 = wc.getLowerBounds();
if(aa3.length!=1) fail("test_2, case 030 FAILED: "+aa3.length);
if(!((Class)aa3[0]).equals(Class.class)) fail("test_2, case 031 FAILED: "+((Class)aa3[0]));
//---
aa3 = wc.getUpperBounds();
aa3[0] = null;
aa3 = wc.getUpperBounds();
if(aa3.length!=1) fail("test_2, case 032 FAILED: "+aa3.length);
if(!((Class)aa3[0]).equals(Object.class)) fail("test_2, case 033 FAILED: "+((Class)aa3[0]));
}
/**
* check immutability for results of getGenericExceptionTypes(), getGenericParameterTypes(), getTypeParameters() of generalized method
* and the attendant reflect implementation methods for WildcardType(getLowerBounds(), getUpperBounds()),
* TypeVariable(getBounds()), ParameterizedType(getActualTypeArguments())
*/
class Mc205 extends Thread implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = 0L;
};
static class Mc209 extends Throwable implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = 0L;
};
public <UuUuU extends Throwable, TM1, TM2 extends Thread &java.io.Serializable &Cloneable> void foo1For_5(UuUuU a1) throws UuUuU, java.io.IOException {}
public void test_5() {
TypeVariable tv;
Type ap[];
Type ab[];
Type aet[];
Type atp[];
Method m = null;
try{
java.lang.reflect.Method am[] = ClassGenericsTest2.class.getDeclaredMethods();
for (int i = 0; i < am.length; i++) {
if (am[i].getName().equals("foo1For_5")) {
m = am[i];
}
}
} catch (Exception e) {
fail("test_5, case 001 FAILED: "+e.toString());
}
///////
atp = m.getTypeParameters();
if(atp.length!=3) fail("test_5, case 002 FAILED: "+atp.length);
//---
atp[2] = null;
atp = m.getTypeParameters();
if(atp.length!=3) fail("test_5, case 003 FAILED: "+atp.length);
tv = (TypeVariable)atp[2];
if(!tv.getName().equals("TM2")) fail("test_5, case 004 FAILED: "+tv.getName());
if(!((Method)tv.getGenericDeclaration()).getName().equals("foo1For_5")) fail("test_5, case 005 FAILED: "+((Method)tv.getGenericDeclaration()).getName());
ab = tv.getBounds();
//---
ab[1] = null;
ab = tv.getBounds();
if(ab.length!=3) fail("test_5, case 006 FAILED: "+ab.length);
if(!((Class)ab[0]).getName().equals("java.lang.Thread")) fail("test_5, case 007 FAILED: "+((Class)ab[0]).getName());
if(!((Class)ab[1]).getName().equals("java.io.Serializable")) fail("test_2, case 008 FAILED: "+((Class)ab[1]).getName());
if(!((Class)ab[2]).getName().equals("java.lang.Cloneable")) fail("test_2, case 009 FAILED: "+((Class)ab[2]).getName());
///////
ap = m.getGenericParameterTypes();
if(ap.length!=1) fail("test_5, case 010 FAILED: "+ap.length);
//---
ap[0] = null;
ap = m.getGenericParameterTypes();
tv = (TypeVariable)ap[0];
if(!tv.getName().equals("UuUuU")) fail("test_5, case 011 FAILED: "+tv.getName());
///////
aet = m.getGenericExceptionTypes();
if(aet.length!=2) fail("test_5, case 012 FAILED: "+ap.length);
//---
aet[0] = null;
aet = m.getGenericExceptionTypes();
if(aet.length!=2) fail("test_5, case 013 FAILED: "+ap.length);
tv = (TypeVariable)aet[0];
if(!tv.getName().equals("UuUuU")) fail("test_5, case 014 FAILED: "+tv.getName());
if(!((Class)aet[1]).getName().equals("java.io.IOException")) fail("test_5, case 015 FAILED: "+((Class)aet[1]).getName());
}
/**
* check immutability for results of getGenericExceptionTypes(), getGenericParameterTypes(), getTypeParameters() of generalized constructor
* and the attendant reflect implementation methods for WildcardType(getLowerBounds(), getUpperBounds()),
* TypeVariable(getBounds()), ParameterizedType(getActualTypeArguments())
*/
class MC006{
public <UuUuU extends Throwable, TM1, TM2 extends Thread &java.io.Serializable &Cloneable> MC006(UuUuU a1) throws UuUuU, java.io.IOException {}
}
public void test_6() {
TypeVariable tv;
Type ap[];
Type ab[];
Type aet[];
Type atp[];
Constructor m = null;
try{
m = ClassGenericsTest2.MC006.class.getConstructor(new Class[]{ClassGenericsTest2.class, Throwable.class});
} catch (Exception e) {
fail("test_6, case 001 FAILED: "+e.toString());
}
///////
atp = m.getTypeParameters();
if(atp.length!=3) fail("test_6, case 002 FAILED: "+atp.length);
//---
atp[2] = null;
atp = m.getTypeParameters();
tv = (TypeVariable)atp[2];
if(!tv.getName().equals("TM2")) fail("test_6, case 003 FAILED: "+tv.getName());
if(!((Constructor)tv.getGenericDeclaration()).getName().equals("java.lang.ClassGenericsTest2$MC006")) fail("test_6, case 004 FAILED: "+((Constructor)tv.getGenericDeclaration()).getName());
ab = tv.getBounds();
//---
ab[1] = null;
ab = tv.getBounds();
if(ab.length!=3) fail("test_6, case 005 FAILED: "+ab.length);
if(!((Class)ab[0]).getName().equals("java.lang.Thread")) fail("test_6, case 006 FAILED: "+((Class)ab[0]).getName());
if(!((Class)ab[1]).getName().equals("java.io.Serializable")) fail("test_2, case 007 FAILED: "+((Class)ab[1]).getName());
if(!((Class)ab[2]).getName().equals("java.lang.Cloneable")) fail("test_2, case 008 FAILED: "+((Class)ab[2]).getName());
///////
ap = m.getGenericParameterTypes();
if(ap.length!=1) fail("test_6, case 009 FAILED: "+ap.length);
//---
ap[0] = null;
ap = m.getGenericParameterTypes();
tv = (TypeVariable)ap[0];
if(!tv.getName().equals("UuUuU")) fail("test_6, case 010 FAILED: "+tv.getName());
///////
aet = m.getGenericExceptionTypes();
if(aet.length!=2) fail("test_6, case 011 FAILED: "+ap.length);
//---
aet[0] = null;
aet = m.getGenericExceptionTypes();
if(aet.length!=2) fail("test_6, case 012 FAILED: "+ap.length);
tv = (TypeVariable)aet[0];
if(!tv.getName().equals("UuUuU")) fail("test_6, case 013 FAILED: "+tv.getName());
if(!((Class)aet[1]).getName().equals("java.io.IOException")) fail("test_6, case 014 FAILED: "+((Class)aet[1]).getName());
}
}