package com.google.gwt.reflect.test;
import org.junit.Before;
import org.junit.Test;
import xapi.log.X_Log;
import static com.google.gwt.reflect.shared.GwtReflect.magicClass;
import com.google.gwt.reflect.client.strategy.ReflectionStrategy;
import com.google.gwt.reflect.test.cases.ReflectionCaseKeepsEverything;
import com.google.gwt.reflect.test.cases.ReflectionCaseKeepsNothing;
import com.google.gwt.reflect.test.cases.ReflectionCaseNoMagic;
import com.google.gwt.reflect.test.cases.ReflectionCaseNoMagic.Subclass;
import com.google.gwt.reflect.test.cases.ReflectionCaseSimple;
import java.lang.reflect.Field;
/**
* @author James X. Nelson (james@wetheinter.net, @james)
*/
@ReflectionStrategy(magicSupertypes=false, keepCodeSource=true)
public class FieldTests extends AbstractReflectionTest {
static final Class<ReflectionCaseSimple> c = magicClass(ReflectionCaseSimple.class);
static final Class<Primitives> PRIMITIVE_CLASS = magicClass(Primitives.class);
static final Class<Objects> OBJECTS_CLASS = magicClass(Objects.class);
static final Class<ReflectionCaseKeepsNothing> KEEPS_NONE = magicClass(ReflectionCaseKeepsNothing.class);
static final Class<ReflectionCaseKeepsEverything> KEEPS_EVERYTHING = magicClass(ReflectionCaseKeepsEverything.class);
Primitives primitives;
Objects objects;
@Before
public void initObjects() throws InstantiationException, IllegalAccessException {
primitives = PRIMITIVE_CLASS.newInstance();
objects = OBJECTS_CLASS.newInstance();
}
public static class Primitives {
public Primitives() {}
public boolean z;
public byte b;
public char c;
public short s;
public int i;
public long j;
public float f;
public double d;
}
public static class Objects {
Objects() {}
public Object L;
public Primitives P;
public final Object FINAL = null;
public Boolean Z;
public Byte B;
public Character C;
public Short S;
public Integer I;
public Long J;
public Float F;
public Double D;
}
public FieldTests() {}
@Test(expected=NullPointerException.class)
public void testObjectNullAccess() throws Exception {
final Field f = OBJECTS_CLASS.getField("L");
f.get(null);
}
//
// @Test(expected=IllegalArgumentException.class)
// public void testObjectIllegalSet() throws Exception {
// assertNotNull(objects);
// final Field f = OBJECTS_CLASS.getField("P");
// f.set(objects, new Object());
// }
@Test
public void testObjectLegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("L");
f.set(objects, primitives);
}
/////////////////////////////////////////////////
/////////////////Booleans////////////////////////
/////////////////////////////////////////////////
@Test
public void testBooleanPrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("z");
assertFalse(f.getBoolean(primitives));
assertFalse((Boolean)f.get(primitives));
f.set(primitives, true);
assertTrue(f.getBoolean(primitives));
assertTrue((Boolean)f.get(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testBooleanPrimitiveIllegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getDeclaredField("z");
assertEquals(1, f.getInt(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testBooleanPrimitiveIllegalSet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("z");
assertFalse(f.getBoolean(primitives));
assertFalse((Boolean)f.get(primitives));
f.set(primitives, 1);
}
@Test(expected=IllegalArgumentException.class)
public void testBooleanPrimitiveNullSet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("z");
assertFalse(f.getBoolean(primitives));
assertFalse((Boolean)f.get(primitives));
f.set(primitives, (Boolean)null);
}
@Test
public void testBooleanObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("Z");
assertNull(f.get(objects));
objects.Z = true;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testBooleanObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("Z");
assertNull(f.get(objects));
assertFalse(f.getBoolean(objects));
}
/////////////////////////////////////////////////
///////////////////Bytes/////////////////////////
/////////////////////////////////////////////////
@Test
public void testBytePrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("b");
assertEquals(0, f.getByte(primitives));
assertEquals(0, ((Byte)f.get(primitives)).byteValue());
f.set(primitives, (byte)1);
assertEquals(1, f.getByte(primitives));
assertEquals(1, ((Byte)f.get(primitives)).byteValue());
}
@Test
public void testBytePrimitiveWideningLegal() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("b");
assertEquals(0, f.getByte(primitives));
assertEquals(0, f.getShort(primitives));
assertEquals(0, f.getInt(primitives));
assertEquals(0, f.getLong(primitives));
assertEquals(0f, f.getFloat(primitives));
assertEquals(0., f.getDouble(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testBytePrimitiveWidening_IllegalBoolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("b");
f.set(primitives, true);
assertEquals(1, f.getByte(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testBytePrimitiveWidening_IllegalChar() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("b");
f.set(primitives, 'a');
assertEquals('a', f.getByte(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testBytePrimitiveNullSet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("b");
assertEquals(0, f.getByte(primitives));
assertEquals(0, ((Byte)f.get(primitives)).byteValue());
f.set(primitives, (Byte)null);
}
@Test(expected=IllegalArgumentException.class)
public void testBytePrimitiveIllegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getDeclaredField("b");
assertTrue(f.getBoolean(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testBytePrimitiveIllegalSet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("b");
assertEquals(0, f.getByte(primitives));
assertEquals(0, ((Byte)f.get(primitives)).byteValue());
f.set(primitives, false);
}
@Test(expected=IllegalArgumentException.class)
public void testByteObjectIllegalGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("B");
assertEquals((byte)0, f.getByte(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testByteObjectIllegalSet_Int() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("B");
f.set(objects, 1);
}
@Test
public void testByteObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("B");
assertNull(f.get(objects));
objects.B = 1;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testByteObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("B");
assertNull(f.get(objects));
assertEquals(0, f.getByte(objects));
}
/////////////////////////////////////////////////
///////////////////Chars/////////////////////////
/////////////////////////////////////////////////
@Test
public void testCharPrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("c");
assertEquals(0, f.getChar(primitives));
assertEquals(0, ((Character)f.get(primitives)).charValue());
f.set(primitives, (char)1);
assertEquals(1, f.getChar(primitives));
assertEquals(1, ((Character)f.get(primitives)).charValue());
}
@Test(expected=IllegalArgumentException.class)
public void testCharPrimitiveWidening_IllegalBoolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("c");
f.set(primitives, true);
}
@Test(expected=IllegalArgumentException.class)
public void testCharPrimitiveWidening_IllegalNumber() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("c");
f.set(primitives, 1);
}
@Test(expected=IllegalArgumentException.class)
public void testCharPrimitiveNullSet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("c");
assertEquals(0, f.getChar(primitives));
assertEquals(0, ((Character)f.get(primitives)).charValue());
f.set(primitives, (Character)null);
}
@Test(expected=IllegalArgumentException.class)
public void testCharPrimitiveIllegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getDeclaredField("c");
assertTrue(f.getBoolean(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testCharPrimitiveIllegalSet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("c");
assertEquals(0, f.getChar(primitives));
assertEquals(0, ((Character)f.get(primitives)).charValue());
X_Log.error(getClass(), "Type of field: "+f.getClass());
f.set(primitives, false);
}
@Test(expected=IllegalArgumentException.class)
public void testCharacterObjectIllegalGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("C");
assertEquals((char)0, f.getChar(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testCharacterObjectIllegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("C");
f.set(objects, 1);
}
@Test
public void testCharacterObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("C");
assertNull(f.get(objects));
objects.C = 'a';
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testCharacterObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("C");
assertNull(f.get(objects));
assertEquals(0, f.getChar(objects));
}
/////////////////////////////////////////////////
/////////////////Shorts//////////////////////////
/////////////////////////////////////////////////
@Test
public void testShortPrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("s");
assertEquals(0, f.getShort(primitives));
assertEquals(0, ((Short)f.get(primitives)).shortValue());
f.set(primitives, (short)1);
assertEquals(1, f.getShort(primitives));
assertEquals(1, ((Short)f.get(primitives)).shortValue());
f.set(primitives, new Byte((byte)1));
}
@Test
public void testShortPrimitiveLegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("s");
assertEquals(0, f.getShort(primitives));
assertEquals(0, f.getInt(primitives));
assertEquals(0, f.getLong(primitives));
assertEquals(0f, f.getFloat(primitives));
assertEquals(0., f.getDouble(primitives));
}
@Test(expected=IllegalArgumentException.class)
public void testShortPrimitiveIllegalSet_Boolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("s");
f.set(primitives, true);
}
@Test(expected=IllegalArgumentException.class)
public void testShortPrimitiveIllegalSet_Char() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("s");
f.set(primitives, 'a');
}
@Test(expected=IllegalArgumentException.class)
public void testShortPrimitiveIllegalSet_Null() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("s");
f.set(primitives, (Short)null);
}
@Test
public void testShortObjectLegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("S");
f.set(objects, (short)1);
assertEquals((short)1, f.get(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testShortObjectIllegalSet_Byte() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("S");
f.set(objects, (byte)1);
}
@Test(expected=IllegalArgumentException.class)
public void testShortObjectIllegalSet_Int() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("S");
f.set(objects, 1);
}
@Test(expected=IllegalArgumentException.class)
public void testShortObjectIllegalGet_Byte() throws Exception {
assertNotNull(primitives);
final Field f = OBJECTS_CLASS.getField("S");
f.getByte(primitives);
}
@Test
public void testShortObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("S");
assertNull(f.get(objects));
objects.S = 1;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected=IllegalArgumentException.class)
public void testShortObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("S");
assertNull(f.get(objects));
assertEquals(0, f.getShort(objects));
}
/////////////////////////////////////////////////
////////////////////Ints/////////////////////////
/////////////////////////////////////////////////
@Test
public void testIntPrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("i");
assertEquals(0, f.getInt(primitives));
assertEquals(0, ((Integer) f.get(primitives)).intValue());
f.set(primitives, 1);
assertEquals(1, f.getInt(primitives));
assertEquals(1, ((Integer) f.get(primitives)).intValue());
f.set(primitives, 'a');
f.set(primitives, (byte) 1);
}
@Test
public void testIntPrimitiveLegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("i");
assertEquals(0, f.getInt(primitives));
assertEquals(0, f.getLong(primitives));
assertEquals(0f, f.getFloat(primitives));
assertEquals(0., f.getDouble(primitives));
}
@Test(expected = IllegalArgumentException.class)
public void testIntPrimitiveIllegalGet_Byte() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("i");
f.getByte(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testIntPrimitiveIllegalGet_Short() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("i");
f.getShort(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testIntPrimitiveIllegalSet_Boolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("i");
f.set(primitives, true);
}
@Test(expected = IllegalArgumentException.class)
public void testIntPrimitiveIllegalSet_Null() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("i");
f.set(primitives, (Short) null);
}
@Test(expected = IllegalArgumentException.class)
public void testIntegerObjectIllegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("I");
f.set(objects, (short)1);
}
@Test
public void testIntegerObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("I");
assertNull(f.get(objects));
objects.I = 1;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected = IllegalArgumentException.class)
public void testIntegerObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("I");
assertNull(f.get(objects));
assertEquals(0, f.getInt(objects));
}
/////////////////////////////////////////////////
///////////////////Longs/////////////////////////
/////////////////////////////////////////////////
@Test
public void testLongPrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
assertEquals(0, f.getLong(primitives));
assertEquals(0, ((Long) f.get(primitives)).longValue());
f.set(primitives, (long) 1);
assertEquals(1, f.getLong(primitives));
assertEquals(1, ((Long) f.get(primitives)).longValue());
f.set(primitives, 'a');
f.set(primitives, (byte) 1);
}
@Test
public void testLongPrimitiveLegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
assertEquals(0, f.getLong(primitives));
assertEquals(0f, f.getFloat(primitives));
assertEquals(0., f.getDouble(primitives));
}
@Test(expected = IllegalArgumentException.class)
public void testLongPrimitiveIllegalGet_Byte() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
f.getByte(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testLongPrimitiveIllegalGet_Short() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
f.getShort(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testLongPrimitiveIllegalGet_Int() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
f.getInt(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testLongPrimitiveIllegalSet_Boolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
f.set(primitives, true);
}
@Test(expected = IllegalArgumentException.class)
public void testLongPrimitiveIllegalSet_Null() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("j");
f.set(primitives, (Short) null);
}
@Test(expected = IllegalArgumentException.class)
public void testLongObjectIllegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("J");
f.set(objects, 1);
}
@Test
public void testLongObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("J");
assertNull(f.get(objects));
objects.J = 1L;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected = IllegalArgumentException.class)
public void testLongObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("L");
assertNull(f.get(objects));
assertEquals(0, f.getLong(objects));
}
/////////////////////////////////////////////////
////////////////////Floats///////////////////////
/////////////////////////////////////////////////
@Test
public void testFloatPrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
assertEquals(0f, f.getFloat(primitives));
assertEquals(0f, ((Float) f.get(primitives)).floatValue());
f.set(primitives, (float) 1);
assertEquals(1f, f.getFloat(primitives));
assertEquals(1f, ((Float) f.get(primitives)).floatValue());
f.set(primitives, 'a');
f.set(primitives, (byte) 1);
f.set(primitives, 1);
f.set(primitives, (float) 1);
}
@Test
public void testFloatPrimitiveLegalGet() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
assertEquals(0f, f.getFloat(primitives));
assertEquals(0., f.getDouble(primitives));
}
@Test(expected = IllegalArgumentException.class)
public void testFloatPrimitiveIllegalGet_Byte() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
f.getByte(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testFloatPrimitiveIllegalGet_Short() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
f.getShort(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testFloatPrimitiveIllegalGet_Int() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
f.getInt(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testFloatPrimitiveIllegalGet_Long() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
f.getLong(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testFloatPrimitiveIllegalSet_Boolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
f.set(primitives, true);
}
@Test(expected = IllegalArgumentException.class)
public void testFloatPrimitiveIllegalSet_Null() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("f");
f.set(primitives, null);
}
@Test(expected = IllegalArgumentException.class)
public void testFloatObjectIllegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("F");
f.set(objects, (long) 1);
}
@Test
public void testFloatObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("F");
assertNull(f.get(objects));
objects.F = 1f;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected = IllegalArgumentException.class)
public void testFloatObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("F");
assertNull(f.get(objects));
assertEquals(0f, f.getFloat(objects));
}
/////////////////////////////////////////////////
///////////////////Doubles///////////////////////
/////////////////////////////////////////////////
@Test
public void testDoublePrimitiveLegalUse() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
assertEquals(0., f.getDouble(primitives));
assertEquals(0., ((Double) f.get(primitives)).doubleValue());
f.set(primitives, (double) 1);
assertEquals(1., f.getDouble(primitives));
assertEquals(1., ((Double) f.get(primitives)).doubleValue());
f.set(primitives, 'a');
f.set(primitives, (byte) 1);
f.set(primitives, 1);
f.set(primitives, (long) 1);
f.set(primitives, (float) 1);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalGet_Byte() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.getByte(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalGet_Short() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.getShort(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalGet_Int() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.getInt(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalGet_Long() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.getLong(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalGet_Float() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.getFloat(primitives);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalSet_Boolean() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.set(primitives, true);
}
@Test(expected = IllegalArgumentException.class)
public void testDoublePrimitiveIllegalSet_Null() throws Exception {
assertNotNull(primitives);
final Field f = PRIMITIVE_CLASS.getField("d");
f.set(primitives, null);
}
@Test(expected = IllegalArgumentException.class)
public void testDoubleObjectIllegalSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("D");
f.set(objects, (float) 1);
}
@Test
public void testDoubleObjectNullSet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("D");
assertNull(f.get(objects));
objects.D = 1.;
assertNotNull(f.get(objects));
f.set(objects, null);
assertNull(f.get(objects));
}
@Test(expected = IllegalArgumentException.class)
public void testDoubleObjectNullGet() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("D");
assertNull(f.get(objects));
assertEquals(0., f.getDouble(objects));
}
@Test(expected=IllegalAccessException.class)
public void testSetFinal() throws Exception {
assertNotNull(objects);
final Field f = OBJECTS_CLASS.getField("FINAL");
f.set(objects, objects);
}
@Test
public void testDirectInjection_Declared() throws Exception{
final ReflectionCaseNoMagic superClass = new ReflectionCaseNoMagic();
final Field field = NO_MAGIC.getDeclaredField(PRIVATE_MEMBER);
field.setAccessible(true);
assertFalse(field.getBoolean(superClass));
field.setBoolean(superClass, true);
assertTrue(field.getBoolean(superClass));
}
@Test
public void testDirectInjection_Public() throws Exception{
final Field field = NO_MAGIC.getField(PUBLIC_MEMBER);
field.setAccessible(true);
assertFieldFalseToTrue(field, new ReflectionCaseNoMagic());
}
@Test(expected=NoSuchFieldException.class)
public void testDirectInjection_PublicFail() throws Exception{
final Field field = NO_MAGIC.getField(PRIVATE_MEMBER);
field.setAccessible(true);
assertFieldFalseToTrue(field, new ReflectionCaseNoMagic());
}
@Test(expected=NoSuchFieldException.class)
public void testDirectInjection_DeclaredFail() throws Exception{
final Field field = NO_MAGIC_SUBCLASS.getDeclaredField(PRIVATE_MEMBER);
field.setAccessible(true);
assertFieldFalseToTrue(field, new ReflectionCaseNoMagic.Subclass());
}
@Test
public void testDirectInjection_Visibility() throws Exception{
final ReflectionCaseNoMagic superCase = new ReflectionCaseNoMagic();
final ReflectionCaseNoMagic.Subclass subCase = new ReflectionCaseNoMagic.Subclass();
final Field superField = NO_MAGIC.getField(OVERRIDE_FIELD);
final Field publicField = NO_MAGIC_SUBCLASS.getField(OVERRIDE_FIELD);
final Field declaredField = NO_MAGIC_SUBCLASS.getDeclaredField(OVERRIDE_FIELD);
declaredField.setAccessible(true);
assertFalse(declaredField.getBoolean(subCase));
assertFalse(publicField.getBoolean(superCase));
assertFalse(publicField.getBoolean(subCase));
assertFalse(superField.getBoolean(subCase));
assertFalse(superField.getBoolean(superCase));
publicField.setBoolean(superCase, true);
superField.setBoolean(subCase, true);
assertTrue(superCase.overrideField);
assertTrue(superCase.overrideField());
assertTrue(subCase.overrideField());
assertFalse(Subclass.getOverrideField(subCase));
assertTrue(publicField.getBoolean(superCase));
assertTrue(publicField.getBoolean(subCase));
assertTrue(superField.getBoolean(superCase));
assertTrue(superField.getBoolean(subCase));
assertFalse(declaredField.getBoolean(subCase));
}
private void assertFieldFalseToTrue(final Field f, final Object o) throws Exception {
assertFalse(f.getBoolean(o));
f.setBoolean(o, true);
assertTrue(f.getBoolean(o));
}
}