/******************************************************************************* * Copyright (c) 2010-present Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Stuart McCulloch (Sonatype, Inc.) - initial API and implementation *******************************************************************************/ package org.eclipse.sisu.launch; import java.util.Properties; import javax.inject.Inject; import javax.inject.Named; import org.eclipse.sisu.inject.BeanLocator; import org.junit.Ignore; import com.google.inject.Binder; import com.google.inject.Key; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.FactoryModuleBuilder; @Ignore( "Need to fix test properties" ) public final class AssistedTestCase extends InjectedTestCase { interface FooFactory { Foo create( int port ); } @Named static class AssistedFoo implements Foo { final int port; final String host; @Inject public AssistedFoo( @Assisted final int port, @Named( "${host}" ) final String host ) { this.port = port; this.host = host; } } @Override public void configure( final Binder binder ) { binder.install( new FactoryModuleBuilder().implement( Foo.class, AssistedFoo.class ).build( FooFactory.class ) ); } @Override public void configure( final Properties properties ) { properties.setProperty( "host", "localhost" ); } @Inject FooFactory beanFactory; @Inject BeanLocator beanLocator; public void testAssistedInject() { Foo bean = beanFactory.create( 8080 ); assertTrue( bean instanceof AssistedFoo ); assertEquals( 8080, ( (AssistedFoo) bean ).port ); assertEquals( "localhost", ( (AssistedFoo) bean ).host ); bean = beanLocator.locate( Key.get( FooFactory.class ) ).iterator().next().getValue().create( 42 ); assertEquals( 42, ( (AssistedFoo) bean ).port ); assertEquals( "localhost", ( (AssistedFoo) bean ).host ); bean = beanLocator.locate( Key.get( Foo.class ) ).iterator().next().getValue(); assertTrue( bean instanceof DefaultFoo ); } }