

package com.google.inject;

import junit.framework.TestCase;

/**
 * @author crazybob@google.com (Bob Lee)
 */
public class BoundInstanceInjectionTest extends TestCase {

  public void testInstancesAreInjected() throws CreationException {
    final O o = new O();

    Injector injector = Guice.createInjector(new AbstractModule() {
      protected void configure() {
        bind(O.class).toInstance(o);
        bind(int.class).toInstance(5);
      }
    });

    assertEquals(5, o.fromMethod);
  }

  static class O {
    int fromMethod;
    @Inject
    void setInt(int i) {
      this.fromMethod = i;
    }
  }

  public void testProvidersAreInjected() throws CreationException {
    Injector injector = Guice.createInjector(new AbstractModule() {
      protected void configure() {
        bind(O.class).toProvider(new Provider<O>() {
          @Inject int i;
          public O get() {
            O o = new O();
            o.setInt(i);
            return o;
          }
        });
        bind(int.class).toInstance(5);
      }
    });

    assertEquals(5, injector.getInstance(O.class).fromMethod);
  }

}
