Package ns.foundation

Source Code of ns.foundation.TestNSKeyValueCoding$TakeValueForKey$knownMethod

package ns.foundation;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;

import ns.foundation.NSKeyValueCoding.DefaultImplementation;
import ns.foundation.NSKeyValueCoding.ErrorHandling;
import ns.foundation.NSKeyValueCoding.UnknownKeyException;
import ns.foundation.NSKeyValueCoding.Utility;
import ns.foundation.NSKeyValueCoding._KeyBinding;
import ns.foundation.NSKeyValueCoding._KeyBindingCreation;
import ns.foundation.NSKeyValueCoding._KeyBindingCreation._KeyBindingFactory;
import ns.foundation.NSKeyValueCoding._KeyBindingCreation._KeyBindingFactory.Callback;
import ns.foundation.noaccess.NoAccessClass;
import ns.foundation.overriddenaccess.OverriddenAccessClass;
import ns.foundation.protectedaccess.RestrictedClass;
import ns.foundation.protectedaccess.SubclassOfNoAccessClass;


@SuppressWarnings("unused")
public class TestNSKeyValueCoding extends BaseTestCase {

  private static final BigDecimal FORTY_TWO_BIG_DECIMAL = BigDecimal.valueOf(42L);
  private static final BigInteger FORTY_TWO_BIG_INTEGER = BigInteger.valueOf(42L);
  private static final String FORTY_TWO_STRING = "42";
  private static final Character FORTY_TWO_CHAR = (char)42;
  private static final Integer FORTY_TWO = Integer.valueOf(42);
  private static final Short FORTY_TWO_SHORT = FORTY_TWO.shortValue();
  private static final Long FORTY_TWO_LONG = Long.valueOf(FORTY_TWO.longValue());
  private static final Float FORTY_TWO_FLOAT = Float.valueOf(FORTY_TWO.floatValue());
  private static final Double FORTY_TWO_DOUBLE = Double.valueOf(FORTY_TWO.doubleValue());
  private static final Byte FORTY_TWO_BYTE = Byte.valueOf(FORTY_TWO.byteValue());

  public static class NSKeyValueCodingImpl implements NSKeyValueCoding {
    public Integer knownField;
   
    private Object _value;
   
    public Object knownMethod() {
      return FORTY_TWO;
    }
   
    @Override
    public Object valueForKey(String s) {
      return _value;
    }

    @Override
    public void takeValueForKey(Object obj, String s) {
      _value = obj;
    }
   
    public Object value() {
      return _value;
    }
   
    public void setValue(Object value) {
      _value = value;
    }
  }
 
  public static class ErrorHandlingImpl implements ErrorHandling {
    private Object _value;
    public int knownKey;
   
    @Override
    public Object handleQueryWithUnboundKey(String s) {
      return FORTY_TWO;
    }

    @Override
    public void handleTakeValueForUnboundKey(Object obj, String s) {
      _value = FORTY_TWO;
    }

    @Override
    public void unableToSetNullForKey(String s) {
      _value = FORTY_TWO;
    }
   
    public Object value() {
      return _value;
    }
   
    public void setValue(Object value) {
      _value = value;
    }
  };
 
  public static class NSKeyValueCodingDefaultImpl implements NSKeyValueCoding {
    private Object _value;
   
    public Object value() {
      return _value;
    }
   
    public void setValue(Object value) {
      _value = value;
    }
   
    @Override
    public Object valueForKey(String s) {
      return DefaultImplementation.valueForKey(this, s);
    }

    @Override
    public void takeValueForKey(Object obj, String s) {
      DefaultImplementation.takeValueForKey(this, obj, s);
    }
  }
 
  public static class ErrorHandlingDefaultImpl implements ErrorHandling {

    @Override
    public Object handleQueryWithUnboundKey(String s) {
      return DefaultImplementation.handleQueryWithUnboundKey(this, s);
    }

    @Override
    public void handleTakeValueForUnboundKey(Object obj, String s) {
      DefaultImplementation.handleTakeValueForUnboundKey(this, obj, s);
    }

    @Override
    public void unableToSetNullForKey(String s) {
      DefaultImplementation.unableToSetNullForKey(this, s);
    }
   
  }
 
  /*
   * Tests for NSKeyValueCoding.Utility
   */
 
  public void testUtility$nullValue() {
    assertEquals(NSKeyValueCoding.NullValue, Utility.nullValue());
  }
 
  public static class ValueForKey$knownMethod {
    public Object knownMethod() { return FORTY_TWO; }
  }
 
  public void testUtility$valueForKey$knownMethod() {
    Object obj = new ValueForKey$knownMethod();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod"));
  }
 
  public void testUtility$valueForKey$anonInnerClassKnownMethod() {
    Object obj = new Object() {
      public Object knownMethod() { return FORTY_TWO; }
    };
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod"));
  }

  public static class ValueForKey$knownField {
    public Integer knownField = FORTY_TWO;
  }
 
  public void testUtility$valueForKey$knownField() {
    Object obj = new ValueForKey$knownField();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField"));
  }
 

  public void testUtility$valueForKey$anonInnerClassKnownField() {
    Object obj = new Object() {
      public Integer knownField = FORTY_TWO;
    };
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField"));
  }

  public static class TakeValueForKey$knownMethod {
    private Integer _value;
    public Integer knownMethod() { return _value; };
    public void setKnownMethod(Integer value) { _value = value; };
  }
 
  public void testUtility$takeValueForKey$knownMethod() {
    Object obj = new TakeValueForKey$knownMethod();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownMethod");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod"));
  }
 
  public void testUtility$takeValueForKey$anonInnerClassKnownMethod() {
    Object obj = new Object() {
      private Integer _value;
      public Integer knownMethod() { return _value; };
      public void setKnownMethod(Integer value) { _value = value; };
    };
    Utility.takeValueForKey(obj, FORTY_TWO, "knownMethod");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod"));
  }

  public static class TakeValueForKey$knownField {
    public Integer knownField;
  }

  public void testUtility$takeValueForKey$knownField() {
    Object obj = new TakeValueForKey$knownField();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownField");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField"));
  }
 
  public void testUtility$takeValueForKey$anonInnerClassKnownField() {
    Object obj = new Object() {
      public Integer knownField;
    };
    Utility.takeValueForKey(obj, FORTY_TWO, "knownField");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField"));
  }
   
  public void testUtility$valueForKey$Map() {
    Map<Object, Object> map = new HashMap<Object, Object>();
    map.put("fortytwo", FORTY_TWO);
    assertEquals(FORTY_TWO, Utility.valueForKey(map, "fortytwo"));
    assertEquals(null, Utility.valueForKey(map, "unknownElement"));
    assertEquals(map.values(), Utility.valueForKey(map, "values"));
    assertEquals(map.keySet(), Utility.valueForKey(map, "keySet"));
    assertEquals(map.size(), Utility.valueForKey(map, "size"));
    assertEquals(map.entrySet(), Utility.valueForKey(map, "entrySet"));
    map.put("values", 1);
    map.put("keySet", 2);
    map.put("size", 3);
    map.put("entrySet", 4);
    assertEquals(1, Utility.valueForKey(map, "values"));
    assertEquals(2, Utility.valueForKey(map, "keySet"));
    assertEquals(3, Utility.valueForKey(map, "size"));
    assertEquals(4, Utility.valueForKey(map, "entrySet"));
  }

  public void testUtility$takeValueForKey$Map() {
    Map<Object, Object> map = new HashMap<Object, Object>();
    Utility.takeValueForKey(map, FORTY_TWO, "fortytwo");
    assertEquals(FORTY_TWO, map.get("fortytwo"));
    Utility.takeValueForKey(map, 1, "values");
    Utility.takeValueForKey(map, 2, "keySet");
    Utility.takeValueForKey(map, 3, "size");
    Utility.takeValueForKey(map, 4, "entrySet");
    assertEquals(1, Utility.valueForKey(map, "values"));
    assertEquals(2, Utility.valueForKey(map, "keySet"));
    assertEquals(3, Utility.valueForKey(map, "size"));
    assertEquals(4, Utility.valueForKey(map, "entrySet"));
  }
 
  public void testUtility$valueForKey$UnknownKey() {
    Object obj = new Object();
    try {
      Utility.valueForKey(obj, "unknownKey");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }
  }

  public void testUtility$takeValueForKey$UnknownKey() {
    Object obj = new Object();
    try {
      Utility.takeValueForKey(obj, null, "unknownKey");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }
  }
 
  public void testUtility$valueForKey$implementsNSKeyValueCoding() {
    NSKeyValueCodingImpl obj = new NSKeyValueCodingImpl() {
      @Override
      public void takeValueForKey(Object obj, String s) {
        fail("this method should not be called");
      }
    };
    obj.setValue(FORTY_TWO);
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "anyKey"));
  }

  public void testUtility$takeValueForKey$implementsNSKeyValueCoding() {
    NSKeyValueCodingImpl obj = new NSKeyValueCodingImpl() {
      @Override
      public Object valueForKey(String s) {
        fail("this method should not be called");
        return null;
      }
    };
    Utility.takeValueForKey(obj, FORTY_TWO, "anyKey");
    assertEquals(FORTY_TWO, obj.value());
  }
   
  public void testUtility$takeValueForKey$implementsKeyBindingCreation() {
    _KeyBindingCreation obj = new _KeyBindingCreation() {
      private Object _value;
     
      @Override
      public _KeyBinding _keySetBindingForKey(String s) {
        return new _KeyBinding(Object.class, "knownKey") {
          @Override
          public void setValueInObject(Object value, Object object) {
            _value = value;
          }
        };
      }
     
      @Override
      public _KeyBinding _keyGetBindingForKey(String s) {
        return new _KeyBinding(Object.class, "knownKey") {
          @Override
          public Object valueInObject(Object object) {
            return _value;
          }
        };
      }
     
      @Override
      public _KeyBinding _createKeySetBindingForKey(String s) {
        return _keySetBindingForKey(s);
      }
     
      @Override
      public _KeyBinding _createKeyGetBindingForKey(String s) {
        return _keyGetBindingForKey(s);
      }
    };
   
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }
 
  public void testUtility$takeValueForKey$implementsCallBack() {
    Callback obj = new Callback() {
      private Object _value;
     
      public Object field;
      public Object method() { return null; }
      public void setMethod(Object obj) { }
      public Object methodValue() { return _value; }
      public Object fieldValue() { return field; }
     
      @Override
      public _KeyBinding _otherStorageBinding(String s) {
        return new _KeyBinding(Object.class, "otherStorage") {
          @Override
          public Object valueInObject(Object object) {
            return "otherStorage";
          }
        };
      }
     
      @Override
      public _KeyBinding _methodKeySetBinding(String s, String s1) {
        return new _KeyBinding(Object.class, "setMethod") {
          @Override
          public void setValueInObject(Object value, Object object) {
            _value = value;
          }
        };
      }
     
      @Override
      public _KeyBinding _methodKeyGetBinding(String s, String s1) {
        return new _KeyBinding(Object.class, "method") {
          @Override
          public Object valueInObject(Object object) {
            return _value;
          }
        };
      }
     
      @Override
      public _KeyBinding _fieldKeyBinding(String s, String s1) {
        return new _KeyBinding(Object.class, "field") {
          @Override
          public void setValueInObject(Object value, Object object) {
            _value = value;
          }
         
          @Override
          public Object valueInObject(Object object) {
            return _value;
          }
        };
      }
    };
    Utility.takeValueForKey(obj, FORTY_TWO, "method");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "methodValue"));
    Utility.takeValueForKey(obj, 24, "field");
    assertEquals(24, Utility.valueForKey(obj, "fieldValue"));

  }
 
  public void testUtility$handleQueryForUnboundKey() {
    Object obj = new Object();
    try {
      Utility.handleQueryWithUnboundKey(obj, "unknownKey");
      fail("Expected UnknownKeyException");
    } catch (UnknownKeyException e) {
    }
  }

  public void testUtility$handleTakeValueForUnboundKey() {
    Object obj = new Object();
    try {
      Utility.handleTakeValueForUnboundKey(obj, FORTY_TWO, "unknownKey");
      fail("Expected UnknownKeyException");
    } catch (UnknownKeyException e) {
    }
  }

  public void testUtility$unableToSetNullForKey() {
    Object obj = new Object();
    try {
      Utility.unableToSetNullForKey(obj, "unknownKey");
      fail("Expected UnknownKeyException");
    } catch (IllegalArgumentException e) {
    }
   
    ErrorHandlingImpl obj2 = new ErrorHandlingImpl();
    Utility.takeValueForKey(obj2, null, "knownKey");
    assertEquals(FORTY_TWO, obj2.value());
  }
 
  public void testUtility$handleQueryForUnboundKey$implementsErrorHandling() {
    ErrorHandlingImpl obj = new ErrorHandlingImpl() {
      @Override
      public void handleTakeValueForUnboundKey(Object obj, String s) {
        fail("this method should not be called");
      }

      @Override
      public void unableToSetNullForKey(String s) {
        fail("this method should not be called");
      }
    };
    assertEquals(FORTY_TWO, Utility.handleQueryWithUnboundKey(obj, "unknownKey"));
  }

  public void testUtility$handleTakeValueForUnboundKey$implementsErrorHandling() {
    ErrorHandlingImpl obj = new ErrorHandlingImpl() {
      @Override
      public Object handleQueryWithUnboundKey(String s) {
        fail("this method should not be called");
        return null;
      }

      @Override
      public void unableToSetNullForKey(String s) {
        fail("this method should not be called");
      }
    };
    Utility.handleTakeValueForUnboundKey(obj, null, "unknownKey");
    assertEquals(FORTY_TWO, obj.value());
  }

  public void testUtility$unableToSetNullForKey$implementsErrorHandling() {
    ErrorHandlingImpl obj = new ErrorHandlingImpl() {
      @Override
      public Object handleQueryWithUnboundKey(String s) {
        fail("this method should not be called");
        return null;
      }

      @Override
      public void handleTakeValueForUnboundKey(Object obj, String s) {
        fail("this method should not be called");
      }
    };
    Utility.unableToSetNullForKey(obj, "unknownKey");
    assertEquals(FORTY_TWO, obj.value());
  }
 
  /*
   * Tests for NSKeyValueCoding.DefaultImplementation
   */
 
  public void testDefaultImplementation$valueForKey() {
    NSKeyValueCodingDefaultImpl obj = new NSKeyValueCodingDefaultImpl();
    obj.setValue(FORTY_TWO);
    assertEquals(FORTY_TWO, obj.valueForKey("value"));
    try {
      obj.valueForKey("unknownKey");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e){
    }
  }

  public void testDefaultImplementation$takeValueForKey() {
    NSKeyValueCodingDefaultImpl obj = new NSKeyValueCodingDefaultImpl();
    obj.takeValueForKey(FORTY_TWO, "value");
    assertEquals(FORTY_TWO, obj.value());
    try {
      obj.takeValueForKey(FORTY_TWO, "unknownKey");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e){
    }
  }

  public void testDefaultImplementation$handleQueryForUnboundKey() {
    ErrorHandlingDefaultImpl obj = new ErrorHandlingDefaultImpl();
    try {
      obj.handleQueryWithUnboundKey("unknownKey");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }
  }
 
  public void testDefaultImplementation$handleTakeValueForUnboundKey() {
    ErrorHandlingDefaultImpl obj = new ErrorHandlingDefaultImpl();
    try {
      obj.handleTakeValueForUnboundKey(null, "unknownKey");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }
  }
 
  public void testDefaultImplementation$unableToSetNullForKey() {
    ErrorHandlingDefaultImpl obj = new ErrorHandlingDefaultImpl();
    try {
      obj.unableToSetNullForKey("unknownKey");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
  }
 
  /*
   * Tests for _KeyBinding creation
   */
 
  public static class KeyBindingTypeTest {
    public Integer knownField;

    public Byte byteObjectField;
    public byte byteField;
    public Character charObjectField;
    public char charField;
    public Short shortObjectField;
    public short shortField;
    public Integer integerField;
    public int intField;
    public Long longObjectField;
    public long longField;
    public Float floatObjectField;
    public float floatField;
    public Double doubleObjectField;
    public double doubleField;
    public Boolean booleanObjectField;
    public boolean booleanField;
    public BigInteger bigIntegerField;
    public BigDecimal bigDecimalField;
    public String stringField;
   
    public Integer knownMethod() { return FORTY_TWO; }
   
    public Byte byteObjectMethod() { return byteObjectField; }
    public void setByteObjectMethod(Byte value) { byteObjectField = value; }
    public byte byteMethod() { return byteField; }
    public void setByteMethod(byte value) { byteField = value; }
    public Character charObjectMethod() { return charObjectField; }
    public void setCharObjectMethod(Character value) { charObjectField = value; }
    public char charMethod() { return charField; }
    public void setCharMethod(char value) { charField = value; }
    public Short shortObjectMethod() { return shortObjectField; }
    public void setShortObjectMethod(Short value) { shortObjectField = value;
    public short shortMethod() { return shortField; }
    public void setShortMethod(short value) { shortField = value; }
    public Integer integerMethod() { return integerField; }
    public void setIntegerMethod(Integer value) { integerField = value; }
    public int intMethod() { return intField; }
    public void setIntMethod(int value) { intField = value; }
    public Long longObjectMethod() { return longObjectField; }
    public void setLongObjectMethod(Long value) { longObjectField = value; }
    public long longMethod() { return longField; }
    public void setLongMethod(long value) { longField = value; }
    public Float floatObjectMethod() { return floatObjectField; }
    public void setFloatObjectMethod(Float value) { floatObjectField = value; }
    public float floatMethod() { return floatField; }
    public void setFloatMethod(float value) { floatField = value; }
    public Double doubleObjectMethod() { return doubleObjectField; }
    public void setDoubleObjectMethod(Double value) { doubleObjectField = value; }
    public double doubleMethod() { return doubleField; }
    public void setDoubleMethod(double value) { doubleField = value; }
    public Boolean booleanObjectMethod() { return booleanObjectField; }
    public void setBooleanObjectMethod(Boolean value) { booleanObjectField = value; }
    public boolean booleanMethod() { return booleanField; }
    public void setBooleanMethod(boolean value) { booleanField = value; }
    public BigInteger bigIntegerMethod() { return bigIntegerField; }
    public void setBigIntegerMethod(BigInteger value) { bigIntegerField = value; }
    public BigDecimal bigDecimalMethod() { return bigDecimalField; }
    public void setBigDecimalMethod(BigDecimal value) { bigDecimalField = value; }   
    public String stringMethod() { return stringField; }
    public void setStringMethod(String value) { stringField = value; }
  }

  /*
   * Tests for _KeyBinding Getter field bindings
   */

  public void testDefaultImplementation$_keyGetBindingForKey$knownField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "knownField");
    assertEquals(obj.getClass(), kb.targetClass());
    assertEquals("knownField", kb.key())
    assertEquals(Integer.class, kb.valueType());
  }

  public void testDefaultImplementation$_keyGetBindingForKey$unknownField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "unknownField");
    assertEquals(obj.getClass(), kb.targetClass());
    assertEquals("unknownField", kb.key());
    assertEquals(Object.class, kb.valueType());
  }
 
  public void testDefaultImplementation$_keyGetBindingForKey$byteField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "byteObjectField");
    assertEquals(Byte.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.byteObjectField = FORTY_TWO_BYTE;
    assertEquals(FORTY_TWO_BYTE, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "byteField");
    assertEquals(Byte.TYPE, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.byteField = FORTY_TWO_BYTE;
    assertEquals(FORTY_TWO_BYTE, kb.valueInObject(obj));
  }
 
  public void testDefaultImplementation$_keyGetBindingForKey$charField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "charObjectField");
    assertEquals(Character.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.charObjectField = FORTY_TWO_CHAR;
    assertEquals(FORTY_TWO_CHAR, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "charField");
    assertEquals(Character.TYPE, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.charField = FORTY_TWO_CHAR;
    assertEquals(FORTY_TWO_CHAR, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$shortField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "shortObjectField");
    assertEquals(Short.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.shortObjectField = FORTY_TWO_SHORT;
    assertEquals(FORTY_TWO_SHORT, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "shortField");
    assertEquals(Short.class, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.shortField = FORTY_TWO_SHORT;
    assertEquals(FORTY_TWO_SHORT, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$integerField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "integerField");
    assertEquals(Integer.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.integerField = FORTY_TWO;
    assertEquals(FORTY_TWO, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "intField");
    assertEquals(Integer.class, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.intField = FORTY_TWO;
    assertEquals(FORTY_TWO, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$longField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "longObjectField");
    assertEquals(Long.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.longObjectField = FORTY_TWO_LONG;
    assertEquals(FORTY_TWO_LONG, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "longField");
    assertEquals(Long.class, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.longField = FORTY_TWO_LONG;
    assertEquals(FORTY_TWO_LONG, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$floatField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "floatObjectField");
    assertEquals(Float.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.floatObjectField = FORTY_TWO_FLOAT;
    assertEquals(FORTY_TWO_FLOAT, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "floatField");
    assertEquals(Float.class, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.floatField = FORTY_TWO_FLOAT;
    assertEquals(FORTY_TWO_FLOAT, kb.valueInObject(obj));
  }
 
  public void testDefaultImplementation$_keyGetBindingForKey$doubleField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "doubleObjectField");
    assertEquals(Double.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.doubleObjectField = FORTY_TWO_DOUBLE;
    assertEquals(FORTY_TWO_DOUBLE, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "doubleField");
    assertEquals(Double.class, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.doubleField = FORTY_TWO_DOUBLE;
    assertEquals(FORTY_TWO_DOUBLE, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$booleanField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "booleanObjectField");
    assertEquals(Boolean.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.booleanObjectField = true;
    assertEquals(Boolean.TRUE, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "booleanField");
    assertEquals(Boolean.class, kb.valueType());
    assertTrue(kb.isScalarProperty());
    obj.booleanField = true;
    assertEquals(Boolean.TRUE, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$stringField() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "stringField");
    assertEquals(String.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.stringField = FORTY_TWO_STRING;
    assertEquals(FORTY_TWO_STRING, kb.valueInObject(obj));
  }

  /*
   * Tests for _KeyBinding Setter field bindings
   */

  public void testDefaultImplementation$_keySetBindingForKey$knownField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "knownField");
    assertEquals(obj.getClass(), kb.targetClass());
    assertEquals("knownField", kb.key());
    assertEquals(Integer.class, kb.valueType());
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$byteField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "byteObjectField");
    assertEquals(Byte.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_BYTE, obj);
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "byteField");
    assertEquals(Byte.TYPE, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_BYTE, obj);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$integerField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "integerField");
    assertEquals(Integer.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO, obj);
    assertEquals(FORTY_TWO, obj.integerField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "intField");
    assertEquals(Integer.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO, obj);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$longObjectField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "longObjectField");
    assertEquals(Long.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_LONG, obj);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "longField");
    assertEquals(Long.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_LONG, obj);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$floatField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "floatObjectField");
    assertEquals(Float.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_FLOAT, obj);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "floatField");
    assertEquals(Float.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_FLOAT, obj);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$doubleField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "doubleObjectField");
    assertEquals(Double.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_DOUBLE, obj);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "doubleField");
    assertEquals(Double.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_DOUBLE, obj);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$booleanField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "booleanObjectField");
    assertEquals(Boolean.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(true, obj);
    assertTrue(obj.booleanObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "booleanField");
    assertEquals(Boolean.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(true, obj);
    assertTrue(obj.booleanField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$stringField() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "stringField");
    assertEquals(String.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_STRING, obj);
    assertEquals(FORTY_TWO_STRING, obj.stringField);
  }
 
  /*
   * Tests for _KeyBinding Getter method bindings
   */
 
  public void testDefaultImplementation$_keyGetBindingForKey$knownMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "knownMethod");
    assertEquals(obj.getClass(), kb.targetClass());
    assertEquals("knownMethod", kb.key());
    assertEquals(Integer.class, kb.valueType());
  }
 
  public void testDefaultImplementation$_keyGetBindingForKey$unknownMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "unknownMethod");
    assertEquals(obj.getClass(), kb.targetClass());
    assertEquals("unknownMethod", kb.key());
    assertEquals(Object.class, kb.valueType());
  }

  public void testDefaultImplementation$_keyGetBindingForKey$byteMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "byteObjectMethod");
    assertEquals(Byte.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.byteObjectField = FORTY_TWO_BYTE;
    assertEquals(FORTY_TWO_BYTE, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "byteMethod");
    assertEquals(Byte.TYPE, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.byteField = FORTY_TWO_BYTE;
    assertEquals(FORTY_TWO_BYTE, kb.valueInObject(obj));
  }
 
  public void testDefaultImplementation$_keyGetBindingForKey$charMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "charObjectMethod");
    assertEquals(Character.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.charObjectField = FORTY_TWO_CHAR;
    assertEquals(FORTY_TWO_CHAR, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "charMethod");
    assertEquals(Character.TYPE, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.charField = FORTY_TWO_CHAR;
    assertEquals(FORTY_TWO_CHAR, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$shortMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "shortObjectMethod");
    assertEquals(Short.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.shortObjectField = FORTY_TWO_SHORT;
    assertEquals(FORTY_TWO_SHORT, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "shortMethod");
    assertEquals(Short.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.shortField = FORTY_TWO_SHORT;
    assertEquals(FORTY_TWO_SHORT, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$integerMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "integerMethod");
    assertEquals(Integer.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.integerField = FORTY_TWO;
    assertEquals(FORTY_TWO, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "intMethod");
    assertEquals(Integer.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.intField = FORTY_TWO;
    assertEquals(FORTY_TWO, kb.valueInObject(obj));

  }

  public void testDefaultImplementation$_keyGetBindingForKey$longMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "longObjectMethod");
    assertEquals(Long.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.longObjectField = FORTY_TWO_LONG;
    assertEquals(FORTY_TWO_LONG, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "longMethod");
    assertEquals(Long.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.longField = FORTY_TWO_LONG;
    assertEquals(FORTY_TWO_LONG, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$floatMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "floatObjectMethod");
    assertEquals(Float.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.floatObjectField = FORTY_TWO_FLOAT;
    assertEquals(FORTY_TWO_FLOAT, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "floatMethod");
    assertEquals(Float.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.floatField = FORTY_TWO_FLOAT;
    assertEquals(FORTY_TWO_FLOAT, kb.valueInObject(obj));
  }
 
  public void testDefaultImplementation$_keyGetBindingForKey$doubleMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "doubleObjectMethod");
    assertEquals(Double.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.doubleObjectField = FORTY_TWO_DOUBLE;
    assertEquals(FORTY_TWO_DOUBLE, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "doubleMethod");
    assertEquals(Double.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.doubleField = FORTY_TWO_DOUBLE;
    assertEquals(FORTY_TWO_DOUBLE, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$booleanMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "booleanObjectMethod");
    assertEquals(Boolean.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.booleanObjectField = Boolean.TRUE;
    assertEquals(Boolean.TRUE, kb.valueInObject(obj));
   
    kb = DefaultImplementation._keyGetBindingForKey(obj, "booleanMethod");
    assertEquals(Boolean.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.booleanField = Boolean.TRUE;
    assertEquals(Boolean.TRUE, kb.valueInObject(obj));
  }

  public void testDefaultImplementation$_keyGetBindingForKey$stringMethod() {   
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keyGetBindingForKey(obj, "stringMethod");
    assertEquals(String.class, kb.valueType());
    assertFalse(kb.isScalarProperty());
    obj.stringField = FORTY_TWO_STRING;
    assertEquals(FORTY_TWO_STRING, kb.valueInObject(obj));
  }
 
  /*
   * Tests for _KeyBinding Setter method bindings
   */
  public void testDefaultImplementation$_keySetBindingForKey$byteMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "byteObjectMethod");
    assertEquals(Byte.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_BYTE, obj);
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);

    kb = DefaultImplementation._keySetBindingForKey(obj, "byteMethod");
    assertEquals(Byte.TYPE, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_BYTE, obj);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
  }

  public void testDefaultImplementation$_keySetBindingForKey$charMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "charObjectMethod");
    assertEquals(Character.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_CHAR, obj);
    assertEquals(FORTY_TWO_CHAR, obj.charObjectField);

    kb = DefaultImplementation._keySetBindingForKey(obj, "charMethod");
    assertEquals(Character.TYPE, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_CHAR, obj);
    assertEquals(FORTY_TWO_CHAR.charValue(), obj.charField);

  }

  public void testDefaultImplementation$_keySetBindingForKey$shortMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "shortObjectMethod");
    assertEquals(Short.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_SHORT, obj);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "shortMethod");
    assertEquals(Short.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_SHORT, obj);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);

  }

  public void testDefaultImplementation$_keySetBindingForKey$integerMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "integerMethod");
    assertEquals(Integer.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO, obj);
    assertEquals(FORTY_TWO, obj.integerField);

    kb = DefaultImplementation._keySetBindingForKey(obj, "intMethod");
    assertEquals(Integer.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO, obj);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
  }

  public void testDefaultImplementation$_keySetBindingForKey$longMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "longObjectMethod");
    assertEquals(Long.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_LONG, obj);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);

    kb = DefaultImplementation._keySetBindingForKey(obj, "longMethod");
    assertEquals(Long.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_LONG, obj);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);

  }

  public void testDefaultImplementation$_keySetBindingForKey$floatMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "floatObjectMethod");
    assertEquals(Float.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_FLOAT, obj);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "floatMethod");
    assertEquals(Float.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_FLOAT, obj);
    assertEquals(FORTY_TWO_FLOAT, obj.floatField);
  }

  public void testDefaultImplementation$_keySetBindingForKey$doubleMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "doubleObjectMethod");
    assertEquals(Double.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_DOUBLE, obj);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "doubleMethod");
    assertEquals(Double.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_DOUBLE, obj);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleField);
  }

  public void testDefaultImplementation$_keySetBindingForKey$booleanMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "booleanObjectMethod");
    assertEquals(Boolean.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(true, obj);
    assertTrue(obj.booleanObjectField);
   
    kb = DefaultImplementation._keySetBindingForKey(obj, "booleanMethod");
    assertEquals(Boolean.class, kb.valueType());
    assertTrue(kb.isScalarProperty());

    kb.setValueInObject(true, obj);
    assertTrue(obj.booleanField);
  }
 
  public void testDefaultImplementation$_keySetBindingForKey$stringMethod() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();

    _KeyBinding kb = DefaultImplementation._keySetBindingForKey(obj, "stringMethod");
    assertEquals(String.class, kb.valueType());
    assertFalse(kb.isScalarProperty());

    kb.setValueInObject(FORTY_TWO_STRING, obj);
    assertEquals(FORTY_TWO_STRING, obj.stringField);
  }
 
  public void testDefaultImplementation$TypeConversion$byte() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "bigDecimalField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BYTE, "bigIntegerField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(FORTY_TWO_BIG_DECIMAL, obj.bigDecimalField);
  }

  public void testDefaultImplementation$TypeConversion$short() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_SHORT, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(FORTY_TWO_BIG_DECIMAL, obj.bigDecimalField);
  }
 
  public void testDefaultImplementation$TypeConversion$integer() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(FORTY_TWO_BIG_DECIMAL, obj.bigDecimalField);
  }
 
  public void testDefaultImplementation$TypeConversion$long() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_LONG, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(FORTY_TWO_BIG_DECIMAL, obj.bigDecimalField);
  }
 
  public void testDefaultImplementation$TypeConversion$float() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_FLOAT, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(BigDecimal.valueOf(FORTY_TWO_DOUBLE), obj.bigDecimalField);
  }
 
  public void testDefaultImplementation$TypeConversion$double() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_DOUBLE, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(BigDecimal.valueOf(FORTY_TWO_DOUBLE), obj.bigDecimalField);
  }

  public void testDefaultImplementation$TypeConversion$bigInteger() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_INTEGER, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(FORTY_TWO_BIG_DECIMAL, obj.bigDecimalField);
  }

  public void testDefaultImplementation$TypeConversion$bigDecimal() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "byteField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "shortField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "integerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "intField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "longField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "floatField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "doubleField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "booleanField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, FORTY_TWO_BIG_DECIMAL, "bigDecimalField");
    assertEquals(FORTY_TWO_BYTE, obj.byteObjectField);
    assertEquals(FORTY_TWO_BYTE.byteValue(), obj.byteField);
    assertEquals(FORTY_TWO_SHORT, obj.shortObjectField);
    assertEquals(FORTY_TWO_SHORT.shortValue(), obj.shortField);
    assertEquals(FORTY_TWO, obj.integerField);
    assertEquals(FORTY_TWO.intValue(), obj.intField);
    assertEquals(FORTY_TWO_LONG, obj.longObjectField);
    assertEquals(FORTY_TWO_LONG.longValue(), obj.longField);
    assertEquals(FORTY_TWO_FLOAT, obj.floatObjectField);
    assertEquals(FORTY_TWO_FLOAT.floatValue(), obj.floatField);
    assertEquals(FORTY_TWO_DOUBLE, obj.doubleObjectField);
    assertEquals(FORTY_TWO_DOUBLE.doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(FORTY_TWO_BIG_INTEGER, obj.bigIntegerField);
    assertEquals(FORTY_TWO_BIG_DECIMAL, obj.bigDecimalField);
  }

  public void testDefaultImplementation$TypeConversion$boolean() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, true, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, true, "byteField");
    DefaultImplementation.takeValueForKey(obj, true, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, true, "shortField");
    DefaultImplementation.takeValueForKey(obj, true, "integerField");
    DefaultImplementation.takeValueForKey(obj, true, "intField");
    DefaultImplementation.takeValueForKey(obj, true, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, true, "longField");
    DefaultImplementation.takeValueForKey(obj, true, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, true, "floatField");
    DefaultImplementation.takeValueForKey(obj, true, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, true, "doubleField");
    DefaultImplementation.takeValueForKey(obj, true, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, true, "booleanField");
    DefaultImplementation.takeValueForKey(obj, true, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, true, "bigDecimalField");
    assertEquals(Byte.valueOf((byte)1), obj.byteObjectField);
    assertEquals((byte)1, obj.byteField);
    assertEquals(Short.valueOf((short)1), obj.shortObjectField);
    assertEquals((short)1, obj.shortField);
    assertEquals(Integer.valueOf(1), obj.integerField);
    assertEquals(1, obj.intField);
    assertEquals(Long.valueOf(1L), obj.longObjectField);
    assertEquals(1L, obj.longField);
    assertEquals(Float.valueOf(1), obj.floatObjectField);
    assertEquals(1.0f, obj.floatField);
    assertEquals(Double.valueOf(1), obj.doubleObjectField);
    assertEquals(1.0, obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(BigInteger.ONE, obj.bigIntegerField);
    assertEquals(BigDecimal.ONE, obj.bigDecimalField);
  }
 
 
  public void testDefaultImplementation$TypeConversion$null() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest() {
      {
        byteObjectField = Byte.MAX_VALUE;
        byteField = Byte.MAX_VALUE;
        shortObjectField = Short.MAX_VALUE;
        shortField = Short.MAX_VALUE;
        integerField = Integer.MAX_VALUE;
        intField = Integer.MAX_VALUE;
        longObjectField = Long.MAX_VALUE;
        longField = Long.MAX_VALUE;
        floatObjectField = Float.MAX_VALUE;
        floatField = Float.MAX_VALUE;
        doubleObjectField = Double.MAX_VALUE;
        doubleField = Double.MAX_VALUE;
        booleanObjectField = true;
        booleanField = true;
        bigIntegerField = BigInteger.ONE;
        bigDecimalField = BigDecimal.ONE;
      }
    };
   
    /* Test null assignment handling */
    DefaultImplementation.takeValueForKey(obj, null, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, null, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, null, "integerField");
    DefaultImplementation.takeValueForKey(obj, null, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, null, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, null, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, null, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, null, "bigIntegerField");
    DefaultImplementation.takeValueForKey(obj, null, "bigDecimalField");
    try {
      DefaultImplementation.takeValueForKey(obj, null, "byteField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    try {
      DefaultImplementation.takeValueForKey(obj, null, "shortField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    try {
      DefaultImplementation.takeValueForKey(obj, null, "intField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    try {
      DefaultImplementation.takeValueForKey(obj, null, "longField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    try {
      DefaultImplementation.takeValueForKey(obj, null, "floatField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    try {
      DefaultImplementation.takeValueForKey(obj, null, "doubleField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    try {
      DefaultImplementation.takeValueForKey(obj, null, "booleanField");
      fail("IllegalArgumentException expected");
    } catch (IllegalArgumentException e) {
    }
    assertEquals(null, obj.byteObjectField);
    assertEquals(Byte.MAX_VALUE, obj.byteField);
    assertEquals(null, obj.shortObjectField);
    assertEquals(Short.MAX_VALUE, obj.shortField);
    assertEquals(null, obj.integerField);
    assertEquals(Integer.MAX_VALUE, obj.intField);
    assertEquals(null, obj.longObjectField);
    assertEquals(Long.MAX_VALUE, obj.longField);
    assertEquals(null, obj.floatObjectField);
    assertEquals(Float.MAX_VALUE, obj.floatField);
    assertEquals(null, obj.doubleObjectField);
    assertEquals(Double.MAX_VALUE, obj.doubleField);
    assertEquals(null, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
    assertEquals(null, obj.bigIntegerField);
    assertEquals(null, obj.bigDecimalField);
  }
 
  public void testDefaultImplementation$TypeConversion$overflowLong() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    BigInteger bigNumber = BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.ONE);
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "byteField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "shortField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "integerField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "intField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, Long.MAX_VALUE, "booleanField");
    assertEquals(Byte.valueOf((byte)-1), obj.byteObjectField);
    assertEquals((byte)-1, obj.byteField);
    assertEquals(Short.valueOf((short)-1), obj.shortObjectField);
    assertEquals((short)-1, obj.shortField);
    assertEquals(Integer.valueOf(-1), obj.integerField);
    assertEquals(-1, obj.intField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
  }
 
  public void testDefaultImplementation$TypeConversion$overflowDouble() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "byteField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "shortField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "integerField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "intField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "longField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "floatField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, Double.MAX_VALUE, "booleanField");
    assertEquals(Byte.valueOf((byte)-1), obj.byteObjectField);
    assertEquals((byte)-1, obj.byteField);
    assertEquals(Short.valueOf((short)-1), obj.shortObjectField);
    assertEquals((short)-1, obj.shortField);
    assertEquals(Integer.valueOf(2147483647), obj.integerField);
    assertEquals(2147483647, obj.intField);
    assertEquals(Long.valueOf(9223372036854775807L), obj.longObjectField);
    assertEquals(9223372036854775807L, obj.longField);
    assertEquals(Float.valueOf(Float.POSITIVE_INFINITY), obj.floatObjectField);
    assertEquals(Float.POSITIVE_INFINITY, obj.floatField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
  }
 
  public void testDefaultImplementation$TypeConversion$overflowBigInteger() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    BigInteger bigNumber = BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.valueOf(Byte.MAX_VALUE));
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, bigNumber, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "byteField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "shortField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "integerField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "intField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "longField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "floatField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "doubleField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "booleanField");
    assertEquals(Byte.valueOf((byte)126), obj.byteObjectField);
    assertEquals((byte)126, obj.byteField);
    assertEquals(Short.valueOf((short)126), obj.shortObjectField);
    assertEquals((short)126, obj.shortField);
    assertEquals(Integer.valueOf(126), obj.integerField);
    assertEquals(126, obj.intField);
    assertEquals(Long.valueOf(Long.MIN_VALUE + Byte.MAX_VALUE - 1L), obj.longObjectField);
    assertEquals(Long.MIN_VALUE + Byte.MAX_VALUE - 1L, obj.longField);
    assertEquals(Float.valueOf(bigNumber.toString()), obj.floatObjectField);
    assertEquals(Float.valueOf(bigNumber.toString()).floatValue(), obj.floatField);
    assertEquals(Double.valueOf(bigNumber.toString()), obj.doubleObjectField);
    assertEquals(Double.valueOf(bigNumber.toString()).doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
  }
 
  public void testDefaultImplementation$TypeConversion$overflowBigDecimal() {
    KeyBindingTypeTest obj = new KeyBindingTypeTest();
   
    BigDecimal bigNumber = BigDecimal.valueOf(Double.MAX_VALUE).add(BigDecimal.valueOf(Byte.MAX_VALUE));
   
    /* Test automatic type conversion */
    DefaultImplementation.takeValueForKey(obj, bigNumber, "byteObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "byteField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "shortObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "shortField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "integerField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "intField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "longObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "longField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "floatObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "floatField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "doubleObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "doubleField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "booleanObjectField");
    DefaultImplementation.takeValueForKey(obj, bigNumber, "booleanField");
    assertEquals(Byte.valueOf((byte)127), obj.byteObjectField);
    assertEquals((byte)127, obj.byteField);
    assertEquals(Short.valueOf((short)127), obj.shortObjectField);
    assertEquals((short)127, obj.shortField);
    assertEquals(Integer.valueOf(127), obj.integerField);
    assertEquals(127, obj.intField);
    assertEquals(Long.valueOf(127L), obj.longObjectField);
    assertEquals(127L, obj.longField);
    assertEquals(Float.valueOf(bigNumber.toString()), obj.floatObjectField);
    assertEquals(Float.valueOf(bigNumber.toString()).floatValue(), obj.floatField);
    assertEquals(Double.valueOf(bigNumber.toString()), obj.doubleObjectField);
    assertEquals(Double.valueOf(bigNumber.toString()).doubleValue(), obj.doubleField);
    assertEquals(Boolean.TRUE, obj.booleanObjectField);
    assertEquals(true, obj.booleanField);
  }
 
  /*
   * Tests for _KeyBinding creation search order.
   */
 
  public static class GetMethod$GetPrefix {
    public Integer getKnownKey() { return FORTY_TWO; }
    public Integer knownKey() { fail("this method should not be called"); return null; }
    public Integer isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _getKnownKey() { fail("this method should not be called"); return null; }
    public Integer _knownKey() { fail("this method should not be called"); return null; }
    public Integer _isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
  public void testKeyBindingSearchOrder$GetMethod$GetPrefix() {
    Object obj = new GetMethod$GetPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetMethod$NoPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    public Integer knownKey() { return FORTY_TWO; }
    public Integer isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _getKnownKey() { fail("this method should not be called"); return null; }
    public Integer _knownKey() { fail("this method should not be called"); return null; }
    public Integer _isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  };
  public void testKeyBindingSearchOrder$GetMethod$NoPrefix() {
    Object obj = new GetMethod$NoPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetMethod$IsPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    public Integer isKnownKey() { return FORTY_TWO; };
    public Integer _getKnownKey() { fail("this method should not be called"); return null; }
    public Integer _knownKey() { fail("this method should not be called"); return null; }
    public Integer _isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$GetMethod$IsPrefix() {
    Object obj = new GetMethod$IsPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetMethod$UnderscoreGetPrefix {     
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _getKnownKey() { return FORTY_TWO; }
    public Integer _knownKey() { fail("this method should not be called"); return null; }
    public Integer _isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$GetMethod$UnderscoreGetPrefix() {
    Object obj = new GetMethod$UnderscoreGetPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetMethod$UnderscoreNoPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _getKnownKey() { fail("this method should not be called"); return null; }
    public Integer _knownKey() { return FORTY_TWO; }
    public Integer _isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$GetMethod$UnderscoreNoPrefix() {
    Object obj = new GetMethod$UnderscoreNoPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }
 
  public static class GetMethod$UnderscoreIsPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer _knownKey() { fail("this method should not be called"); return null; }
    public Integer _isKnownKey() { return FORTY_TWO; };
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  };
 
  public void testKeyBindingSearchOrder$GetMethod$UnderscoreIsPrefix() {
    Object obj = new GetMethod$UnderscoreIsPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetField$UnderscoreNoPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer _knownKey() { fail("this method should not be called"); return null; }
    protected Integer _isKnownKey() { fail("this method should not be called"); return null; };
    public Integer _knownKey = FORTY_TWO;
    public Integer _isKnownKey = 1;
    public Integer knownKey = 2;
    public Integer isKnownKey = 3;
  }
 
  public void testKeyBindingSearchOrder$GetField$UnderscoreNoPrefix() {
    Object obj = new GetField$UnderscoreNoPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetField$UnderscoreIsPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer _knownKey() { fail("this method should not be called"); return null; }
    protected Integer _isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _knownKey = 1;
    public Integer _isKnownKey = FORTY_TWO;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$GetField$UnderscoreIsPrefix() {
    Object obj = new GetField$UnderscoreIsPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

 
  public static class GetField$NoPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer _knownKey() { fail("this method should not be called"); return null; }
    protected Integer _isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _knownKey = 1;
    protected Integer _isKnownKey = 2;
    public Integer knownKey = FORTY_TWO;
    public Integer isKnownKey = 4;
  };
 
  public void testKeyBindingSearchOrder$GetField$NoPrefix() {
    Object obj = new GetField$NoPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }

  public static class GetField$IsPrefix {
    protected Integer getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer knownKey() { fail("this method should not be called"); return null; }
    protected Integer isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _getKnownKey() { fail("this method should not be called"); return null; }
    protected Integer _knownKey() { fail("this method should not be called"); return null; }
    protected Integer _isKnownKey() { fail("this method should not be called"); return null; };
    protected Integer _knownKey = 1;
    protected Integer _isKnownKey = 2;
    protected Integer knownKey = 3;
    public Integer isKnownKey = FORTY_TWO;
  }
 
  public void testKeyBindingSearchOrder$GetField$IsPrefix() {
    Object obj = new GetField$IsPrefix();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }
 
  public static class SetMethod$SetPrefix {
    public Integer _value;
    public void setKnownKey(Integer value) { _value = value; }
    public void _setKnownKey(Integer value) { fail("this method should not be called"); }
    public void setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public void _setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$SetMethod$SetPrefix() {
    Object obj = new SetMethod$SetPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "value"));
  }

  public static class SetMethod$UserscoreSetPrefix {
    public Integer _value;
    protected void setKnownKey(Integer value) { fail("this method should not be called"); }
    public void _setKnownKey(Integer value) { _value = value; }
    public void setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public void _setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$SetMethod$UserscoreSetPrefix() {
    Object obj = new SetMethod$UserscoreSetPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "value"));
  }

  public static class SetMethod$SetIsPrefix {
    public Integer _value;
    protected void setKnownKey(Integer value) { fail("this method should not be called"); }
    protected void _setKnownKey(Integer value) { fail("this method should not be called"); }
    public void setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public void _setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$SetMethod$SetIsPrefix() {
    Object obj = new SetMethod$SetIsPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(null, Utility.valueForKey(obj, "value"));
  }

  public static class SetMethod$UserscoreSetIsPrefix {
    public Integer _value;
    protected void setKnownKey(Integer value) { fail("this method should not be called"); }
    protected void _setKnownKey(Integer value) { fail("this method should not be called"); }
    protected void setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public void _setIsKnownKey(Integer value) { fail("this method should not be called"); }
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  }
 
  public void testKeyBindingSearchOrder$SetMethod$UserscoreSetIsPrefix() {
    Object obj = new SetMethod$UserscoreSetIsPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(null, Utility.valueForKey(obj, "value"));
  }
 
  public static class SearchOrderSetFieldUserscoreNoPrefix {
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  };
 
  public void testKeyBindingSearchOrder$SetField$UserscoreNoPrefix() {
    SearchOrderSetFieldUserscoreNoPrefix obj = new SearchOrderSetFieldUserscoreNoPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, obj._knownKey);
  }

  public static class SearchOrderSetFieldUserscoreIsPrefix {
    protected Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  };
 
  public void testKeyBindingSearchOrder$SetField$UserscoreIsPrefix() {
    SearchOrderSetFieldUserscoreIsPrefix obj = new SearchOrderSetFieldUserscoreIsPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, obj._isKnownKey);
  }

  public static class SearchOrderSetField$NoPrefix {
    protected Integer _knownKey = 1;
    protected Integer _isKnownKey = 2;
    public Integer knownKey = 3;
    public Integer isKnownKey = 4;
  };
 
  public void testKeyBindingSearchOrder$SetField$NoPrefix() {
    SearchOrderSetField$NoPrefix obj = new SearchOrderSetField$NoPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, obj.knownKey);
  }
 
  public static class SearchOrderSetFieldIsPrefix {
    protected Integer _knownKey = 1;
    protected Integer _isKnownKey = 2;
    protected Integer knownKey = 4;
    public Integer isKnownKey = 3;
  };
 
  public void testKeyBindingSearchOrder$SetField$IsPrefix() {
    SearchOrderSetFieldIsPrefix obj = new SearchOrderSetFieldIsPrefix();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, obj.isKnownKey);
  }
 
  public static class BindingSearch$multipleSetters {
    public Integer getKnownKey() { return FORTY_TWO; }
    public void setKnownKey(Object value) { fail("This method should not be called"); }
    public void setKnownKey(Integer value) { }
  }
 
  public void testKeyBindingSearch$multipleSetters() {
    Object obj = new BindingSearch$multipleSetters();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
  }
 
  public static class BindingSearch$mixedObjectPrimitiveSetGet {
    private Object _value;
    public int getKnownKey() { return (Integer)_value; }
    public void setKnownKey(Integer value) { fail("This method should not be called"); }
    public void setKnownKey(int value) { _value = value; }
    public void setKnownKey(Boolean value) { fail("This method should not be called"); }

  }
 
  public void testKeyBindingSearch$mixedObjectPrimitiveSetGet() {
    Object obj = new BindingSearch$mixedObjectPrimitiveSetGet();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownKey"));
  }
 
  public static class BindingSearch$singleArgumentGetter {
    public Integer knownKey;
    public Integer getKnownKey(Integer value) { fail("This method should not be called"); return null; }
  }
 
  public void testKeyBindingSearch$singleArgumentGetter() {
    Object obj = new BindingSearch$singleArgumentGetter();
    Utility.valueForKey(obj, "knownKey");
  }
 
  public static class BindingSearchOrder$SetMethod$multipleArgumentSetter {
    public Integer knownKey;
    public Integer getKnownKey() { return FORTY_TWO; }
    public void setKnownKey(Integer value, Integer value2) { fail("This method should not be called"); }
  }
 
  public void testKeyBindingSearchOrder$SetMethod$multipleArgumentSetter() {
    Object obj = new BindingSearchOrder$SetMethod$multipleArgumentSetter();
    Utility.takeValueForKey(obj, FORTY_TWO, "knownKey");
  }

  public static class CustomFieldSearchOrder {
    public Integer _knownKey = 1;
    public Integer _isKnownKey = 2;
    public Integer knownKey = 4;
    public Integer isKnownKey = 3;
  }

  public void testKeyBindingCustomFieldSearchOrder() {
    CustomFieldSearchOrder obj = new CustomFieldSearchOrder();
    int[] lookupOrder = new int[] {
        _KeyBindingFactory.FieldLookup,
        _KeyBindingFactory.MethodLookup,
        _KeyBindingFactory.UnderbarMethodLookup,
        _KeyBindingFactory.UnderbarFieldLookup,
        _KeyBindingFactory.OtherStorageLookup };
    _KeyBinding binding = NSKeyValueCoding.DefaultImplementation._createKeyGetBindingForKey(obj, "knownKey", lookupOrder);
    assertEquals(4, binding.valueInObject(obj));
  }
 
  public void testKeyBindingRestrictedAccess$withProtectedAccessor() {
    RestrictedClass obj = new RestrictedClass();
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod"));
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField"));
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod2"));
    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField2"));
  }
 
  public void testKeyBindingRestrictedAccess$withoutProtectedAccessor() {
    NoAccessClass obj = new NoAccessClass();
    try {
      Utility.valueForKey(obj, "knownField");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }
    try {
      Utility.valueForKey(obj, "knownMethod");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }   
    try {
      Utility.valueForKey(obj, "knownField2");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    }   
    try {
      Utility.valueForKey(obj, "knownMethod2");
      fail("UnknownKeyException expected");
    } catch (UnknownKeyException e) {
    } 
  }
 
//  public void testKeyBindingRestrictedAccess$overriddenProtectedAccessor() {
//    OverriddenAccessClass obj = new OverriddenAccessClass();
//    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod"));
//    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField"));
//    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownMethod2"));
//    assertEquals(FORTY_TWO, Utility.valueForKey(obj, "knownField2"));
//   
//    obj = new OverriddenAccessClass();
//    Utility.takeValueForKey(obj, null, "knownField");
//    Utility.takeValueForKey(obj, null, "knownField2");
//    assertEquals(24, Utility.valueForKey(obj, "knownField"));
//    assertEquals(24, Utility.valueForKey(obj, "knownField2"));
//   
//    obj = new OverriddenAccessClass();
//    Utility.takeValueForKey(obj, null, "knownMethod");
//    Utility.takeValueForKey(obj, null, "knownMethod2");
//    assertEquals(24, Utility.valueForKey(obj, "knownMethod"));
//    assertEquals(24, Utility.valueForKey(obj, "knownMethod2"));
//  }
 
  public void testKeyBindingRestrictedAccess$NoAccessSuperclass() {
    SubclassOfNoAccessClass obj = new SubclassOfNoAccessClass();
    assertEquals(42, Utility.valueForKey(obj, "knownField"));
  }
}
TOP

Related Classes of ns.foundation.TestNSKeyValueCoding$TakeValueForKey$knownMethod

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.