@Test public void testFailFallBackToMethod() throws Exception { Setter<Foo, String> setter = new ObjectSetterFactory(new AsmFactory(Thread.currentThread().getContextClassLoader()){ @Override public <T, P> Setter<T, P> createSetter(Method m) throws Exception { throw new UnsupportedOperationException(); } }).getSetter(Foo.class, "foo"); assertTrue(setter instanceof MethodSetter); SetterHelperTest.validateFooSetter(setter); }
@Test public void testBuilderFromMethodVoid() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, Getter<? super Void, ?>> params = new HashMap<Parameter, Getter<? super Void, ?>>(); params.put(parameters[2], new ConstantGetter<Void, Object>("zrux")); params.put(parameters[0], new ConstantGetter<Void, Integer>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final Instantiator<Void, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, ClassBuilderWithMethod>getInstantiator(b, Void.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null); assertFalse((instantiator instanceof BuilderInstantiator)); assertEquals(3, o.getId()); assertEquals("zrux", o.getZrux()); }
@Test public void testRegisterOrCreate() { AsmFactory asmFactory = new AsmFactory(getClass().getClassLoader()); final MyService[] services = new MyService[] {new MyService(), new MyService() }; UnaryFactory<AsmFactory, MyService> factory = new UnaryFactory<AsmFactory, MyService>() { int i = 0; @Override public MyService newInstance(AsmFactory asmFactory) { return services[i++]; } }; assertSame(services[0], asmFactory.registerOrCreate(MyService.class, factory)); assertSame(services[0], asmFactory.registerOrCreate(MyService.class, factory)); }
@Test public void testBuilderFromMethodAsmBoxing() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, BiFunction<? super Void, ? super Object, ?>> params = new HashMap<Parameter, BiFunction<? super Void, ? super Object, ?>>(); params.put(parameters[1], new ConstantBiFunction<Void, Object, String>("myname")); params.put(parameters[0], new ConstantBiFunction<Void, Object, Integer>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final BiInstantiator<Void, Object, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, Object, ClassBuilderWithMethod>getBiInstantiator(b, Void.class, Object.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null, null); assertFalse((instantiator instanceof BuilderBiInstantiator)); assertEquals("myname", o.getName()); assertEquals(3, o.getId()); }
@Test public void testBuilderFromMethodVoidNullHandling() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, Getter<? super Void, ?>> params = new HashMap<Parameter, Getter<? super Void, ?>>(); params.put(parameters[2], new ConstantGetter<Void, Object>(null)); params.put(parameters[0], new ConstantGetter<Void, Integer>(null)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final Instantiator<Void, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, ClassBuilderWithMethod>getInstantiator(b, Void.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null); assertFalse((instantiator instanceof BuilderInstantiator)); assertEquals(0, o.getId()); assertEquals(null, o.getZrux()); }
@Test public void testBuilderFromMethodVoid() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, BiFunction<? super Void, ? super Object, ?>> params = new HashMap<Parameter, BiFunction<? super Void, ? super Object, ?>>(); params.put(parameters[2], new ConstantBiFunction<Void, Object, String>("zrux")); params.put(parameters[0], new ConstantBiFunction<Void, Object, Integer>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final BiInstantiator<Void, Object, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, Object,ClassBuilderWithMethod>getBiInstantiator(b, Void.class, Object.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null, null); assertFalse((instantiator instanceof BuilderBiInstantiator)); assertEquals(3, o.getId()); assertEquals("zrux", o.getZrux()); }
@Test public void testBuilderFromMethodVoidNullHandling() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, BiFunction<? super Void, ? super Object, ?>> params = new HashMap<Parameter, BiFunction<? super Void, ? super Object, ?>>(); params.put(parameters[2], new ConstantBiFunction<Void, Object, String>(null)); params.put(parameters[0], new ConstantBiFunction<Void, Object, Integer>(null)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final BiInstantiator<Void, Object, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, Object,ClassBuilderWithMethod>getBiInstantiator(b, Void.class, Object.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null, null); assertFalse((instantiator instanceof BuilderBiInstantiator)); assertEquals(0, o.getId()); assertEquals(null, o.getZrux()); }
@Test public void testBuilderFromMethodAsmBoxing() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, Getter<? super Void, ?>> params = new HashMap<Parameter, Getter<? super Void, ?>>(); params.put(parameters[1], new ConstantGetter<Void, Object>("myname")); params.put(parameters[0], new ConstantGetter<Void, Integer>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final Instantiator<Void, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, ClassBuilderWithMethod>getInstantiator(b, Void.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null); assertFalse((instantiator instanceof BuilderInstantiator)); assertEquals("myname", o.getName()); assertEquals(3, o.getId()); }
params.put(parameters[0], new ConstantBiFunction<Void, Object, Integer>(1)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final BiInstantiator<Void, Object, User> instantiator = instantiatorFactory .<Void, Object, User>getBiInstantiator(b, Void.class, Object.class, params, true, true);
params.put(parameters[0], new ConstantIntGetter<Void>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final Instantiator<Void, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, ClassBuilderWithMethod>getInstantiator(b, Void.class, params, true, true);
params.put(parameters[0], new ConstantBiFunction<Void, Object, Integer>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(new AsmFactory(getClass().getClassLoader()), true); final BiInstantiator<Void, Object, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, Object, ClassBuilderWithMethod>getBiInstantiator(b, Void.class, Object.class, params, true, true);