// Tags: JDK1.1 // Copyright (C) 2005 Jeroen Frijters // 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, 59 Temple Place - Suite 330, // Boston, MA 02111-1307, USA. package gnu.testlet.wonka.lang.reflect.Field; import gnu.testlet.Testlet; import gnu.testlet.TestHarness; import java.lang.reflect.Field; public class promotion implements Testlet { public boolean booleanField = true; public byte byteField = (byte)42; public char charField = (char)42; public short shortField = (short)42; public int intField = 42; public float floatField = 42f; public long longField = 42L; public double doubleField = 42.0; public Integer intObjField; public void test(TestHarness harness) { Class c = promotion.class; try { testBooleanField(harness, c.getField("booleanField")); testByteField(harness, c.getField("byteField")); testCharField(harness, c.getField("charField")); testShortField(harness, c.getField("shortField")); testIntField(harness, c.getField("intField")); testFloatField(harness, c.getField("floatField")); testLongField(harness, c.getField("longField")); testDoubleField(harness, c.getField("doubleField")); try { c.getField("intObjField").getInt(this); } catch (IllegalArgumentException _) { harness.check(true); } try { c.getField("intObjField").setInt(this, 0); } catch (IllegalArgumentException _) { harness.check(true); } } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testBooleanField(TestHarness harness, Field field) { harness.checkPoint("boolean"); testGetIllegalArgument(harness, field, new boolean[] { false, true, true, true, true, true, true, true }); testSetIllegalArgument(harness, field, new boolean[] { false, true, true, true, true, true, true, true }); try { harness.check(field.getBoolean(this) == booleanField); harness.check(field.get(this).equals(new Boolean(booleanField))); field.setBoolean(this, booleanField); harness.check(true); field.set(this, new Boolean(booleanField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testByteField(TestHarness harness, Field field) { harness.checkPoint("byte"); testGetIllegalArgument(harness, field, new boolean[] { true, false, true, false, false, false, false, false }); testSetIllegalArgument(harness, field, new boolean[] { true, false, true, true, true, true, true, true }); try { harness.check(field.getByte(this) == byteField); harness.check(field.getShort(this) == byteField); harness.check(field.getInt(this) == byteField); harness.check(field.getFloat(this) == byteField); harness.check(field.getLong(this) == byteField); harness.check(field.getDouble(this) == byteField); harness.check(field.get(this).equals(new Byte(byteField))); field.setByte(this, byteField); harness.check(true); field.set(this, new Byte(byteField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testCharField(TestHarness harness, Field field) { harness.checkPoint("char"); testGetIllegalArgument(harness, field, new boolean[] { true, true, false, true, false, false, false, false }); testSetIllegalArgument(harness, field, new boolean[] { true, true, false, true, true, true, true, true }); try { harness.check(field.getChar(this) == charField); harness.check(field.getInt(this) == charField); harness.check(field.getFloat(this) == charField); harness.check(field.getLong(this) == charField); harness.check(field.getDouble(this) == charField); harness.check(field.get(this).equals(new Character(charField))); field.setChar(this, charField); harness.check(true); field.set(this, new Character(charField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testShortField(TestHarness harness, Field field) { harness.checkPoint("short"); testGetIllegalArgument(harness, field, new boolean[] { true, true, true, false, false, false, false, false }); testSetIllegalArgument(harness, field, new boolean[] { true, false, true, false, true, true, true, true }); try { harness.check(field.getShort(this) == shortField); harness.check(field.getInt(this) == shortField); harness.check(field.getFloat(this) == shortField); harness.check(field.getLong(this) == shortField); harness.check(field.getDouble(this) == shortField); harness.check(field.get(this).equals(new Short(shortField))); field.setByte(this, (byte)shortField); harness.check(true); field.setShort(this, shortField); harness.check(true); field.set(this, new Byte((byte)shortField)); harness.check(true); field.set(this, new Short(shortField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testIntField(TestHarness harness, Field field) { harness.checkPoint("int"); testGetIllegalArgument(harness, field, new boolean[] { true, true, true, true, false, false, false, false }); testSetIllegalArgument(harness, field, new boolean[] { true, false, false, false, false, true, true, true }); try { harness.check(field.getInt(this) == intField); harness.check(field.getFloat(this) == intField); harness.check(field.getLong(this) == intField); harness.check(field.getDouble(this) == intField); harness.check(field.get(this).equals(new Integer(intField))); field.setByte(this, (byte)intField); harness.check(true); field.setChar(this, (char)intField); harness.check(true); field.setShort(this, (short)intField); harness.check(true); field.setInt(this, intField); harness.check(true); field.set(this, new Byte((byte)intField)); harness.check(true); field.set(this, new Character((char)intField)); harness.check(true); field.set(this, new Short((short)intField)); harness.check(true); field.set(this, new Integer(intField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testFloatField(TestHarness harness, Field field) { harness.checkPoint("float"); testGetIllegalArgument(harness, field, new boolean[] { true, true, true, true, true, false, true, false }); testSetIllegalArgument(harness, field, new boolean[] { true, false, false, false, false, false, false, true }); try { harness.check(field.getFloat(this) == floatField); harness.check(field.getDouble(this) == floatField); harness.check(field.get(this).equals(new Float(floatField))); field.setByte(this, (byte)floatField); harness.check(true); field.setChar(this, (char)floatField); harness.check(true); field.setShort(this, (short)floatField); harness.check(true); field.setInt(this, (int)floatField); harness.check(true); field.setFloat(this, floatField); harness.check(true); field.setLong(this, (long)floatField); harness.check(true); field.set(this, new Byte((byte)floatField)); harness.check(true); field.set(this, new Character((char)floatField)); harness.check(true); field.set(this, new Short((short)floatField)); harness.check(true); field.set(this, new Integer((int)floatField)); harness.check(true); field.set(this, new Float(floatField)); harness.check(true); field.set(this, new Long((long)floatField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testLongField(TestHarness harness, Field field) { harness.checkPoint("long"); testGetIllegalArgument(harness, field, new boolean[] { true, true, true, true, true, false, false, false }); testSetIllegalArgument(harness, field, new boolean[] { true, false, false, false, false, true, false, true }); try { harness.check(field.getFloat(this) == longField); harness.check(field.getLong(this) == longField); harness.check(field.getDouble(this) == longField); harness.check(field.get(this).equals(new Long(longField))); field.setByte(this, (byte)longField); harness.check(true); field.setChar(this, (char)longField); harness.check(true); field.setShort(this, (short)longField); harness.check(true); field.setInt(this, (int)longField); harness.check(true); field.setLong(this, longField); harness.check(true); field.set(this, new Byte((byte)longField)); harness.check(true); field.set(this, new Character((char)longField)); harness.check(true); field.set(this, new Short((short)longField)); harness.check(true); field.set(this, new Integer((int)longField)); harness.check(true); field.set(this, new Long(longField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testDoubleField(TestHarness harness, Field field) { harness.checkPoint("double"); testGetIllegalArgument(harness, field, new boolean[] { true, true, true, true, true, true, true, false }); testSetIllegalArgument(harness, field, new boolean[] { true, false, false, false, false, false, false, false }); try { harness.check(field.getDouble(this) == doubleField); harness.check(field.get(this).equals(new Double(doubleField))); field.setByte(this, (byte)doubleField); harness.check(true); field.setChar(this, (char)doubleField); harness.check(true); field.setShort(this, (short)doubleField); harness.check(true); field.setInt(this, (int)doubleField); harness.check(true); field.setFloat(this, (float)doubleField); harness.check(true); field.setLong(this, (long)doubleField); harness.check(true); field.setDouble(this, doubleField); harness.check(true); field.set(this, new Byte((byte)doubleField)); harness.check(true); field.set(this, new Character((char)doubleField)); harness.check(true); field.set(this, new Short((short)doubleField)); harness.check(true); field.set(this, new Integer((int)doubleField)); harness.check(true); field.set(this, new Float((float)doubleField)); harness.check(true); field.set(this, new Long((long)doubleField)); harness.check(true); field.set(this, new Double(doubleField)); harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testGetIllegalArgument(TestHarness harness, Field field, boolean[] checks) { if (checks[0]) try { field.getBoolean(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[1]) try { field.getByte(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[2]) try { field.getChar(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[3]) try { field.getShort(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[4]) try { field.getInt(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[5]) try { field.getFloat(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[6]) try { field.getLong(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[7]) try { field.getDouble(this); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testSetIllegalArgument(TestHarness harness, Field field, boolean[] checks) { testSetObjectIllegalArgument(harness, field, checks); if (checks[0]) try { field.setBoolean(this, booleanField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[1]) try { field.setByte(this, byteField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[2]) try { field.setChar(this, charField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[3]) try { field.setShort(this, shortField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[4]) try { field.setInt(this, intField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[5]) try { field.setFloat(this, floatField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[6]) try { field.setLong(this, longField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[7]) try { field.setDouble(this, doubleField); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } private void testSetObjectIllegalArgument(TestHarness harness, Field field, boolean[] checks) { if (checks[0]) try { field.set(this, new Boolean(booleanField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[1]) try { field.set(this, new Byte(byteField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[2]) try { field.set(this, new Character(charField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[3]) try { field.set(this, new Short(shortField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[4]) try { field.set(this, new Integer(intField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[5]) try { field.set(this, new Float(floatField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[6]) try { field.set(this, new Long(longField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } if (checks[7]) try { field.set(this, new Double(doubleField)); harness.check(false); } catch (IllegalArgumentException _) { harness.check(true); } catch (Exception x) { harness.debug(x); harness.check(false); } } }