package org.bindgen.processor; import org.junit.Assert; import org.junit.Test; /** Tests a child class inheritance a generic getter/setter. */ public class InheritanceTest extends AbstractBindgenTestCase { @Test public void testChild() throws Exception { ClassLoader cl = this.compile("org/bindgen/processor/inheritance/Base.java", "org/bindgen/processor/inheritance/Child.java"); Class<?> cClass = cl.loadClass("org.bindgen.processor.inheritance.Child"); Class<?> cbClass = cl.loadClass("org.bindgen.processor.inheritance.ChildBinding"); assertChildBindings(cbClass, "hashCodeBinding", "list", "toStringBinding", "value", "valueField"); Object child = cClass.newInstance(); Object childBinding = cbClass.getConstructor(cClass).newInstance(child); Object valueBinding = cbClass.getMethod("value").invoke(childBinding); Object valueFieldBinding = cbClass.getMethod("valueField").invoke(childBinding); // set via the binding valueBinding.getClass().getMethod("set", String.class).invoke(valueBinding, "FOO"); // get via the class Assert.assertEquals("FOO", cClass.getMethod("value").invoke(child)); // set via the class cClass.getMethod("value", Object.class).invoke(child, "BAR"); // get via the binding Assert.assertEquals("BAR", valueBinding.getClass().getMethod("get").invoke(valueBinding)); // set via the field binding valueFieldBinding.getClass().getMethod("set", String.class).invoke(valueFieldBinding, "ZAZ"); // get via the field binding Assert.assertEquals("ZAZ", valueFieldBinding.getClass().getMethod("get").invoke(valueFieldBinding)); } }