1fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkitpackage com.google.inject;
2fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit
3eab76471fbc2118a3c07d103d4b5548e153ed9e7limpbizkitimport static com.google.inject.Asserts.assertContains;
4b7a02b02d81c830d148355c90bc309bcd66fb592sberlin
5eab76471fbc2118a3c07d103d4b5548e153ed9e7limpbizkitimport com.google.inject.name.Names;
6b7a02b02d81c830d148355c90bc309bcd66fb592sberlin
7477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkitimport junit.framework.TestCase;
82b93168004c7ad3ae4393933de2ee19e81787656limpbizkit
9b7a02b02d81c830d148355c90bc309bcd66fb592sberlinimport java.util.logging.Logger;
10b7a02b02d81c830d148355c90bc309bcd66fb592sberlin
11fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit/**
12fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit * Test built-in injection of loggers.
13fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit *
14fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit * @author jessewilson
15fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit */
16fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkitpublic class LoggerInjectionTest extends TestCase {
17fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit
18fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit  @Inject Logger logger;
19fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit
20fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit  public void testLoggerWithMember() {
21fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit    Injector injector = Guice.createInjector();
22fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit    injector.injectMembers(this);
23fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit    assertEquals("com.google.inject.LoggerInjectionTest", logger.getName());
24fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit  }
25fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit
2682cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin  public void testLoggerInConstructor() {
2782cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    Injector injector = Guice.createInjector();
2882cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    Foo foo = injector.getInstance(Foo.class);
2982cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    assertEquals("com.google.inject.LoggerInjectionTest$Foo", foo.logger.getName());
3082cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin  }
3182cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin
3282cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin  private static class Foo {
3382cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    Logger logger;
3482cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    @SuppressWarnings("unused")
3582cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    @Inject Foo(Logger logger) {
3682cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin      this.logger = logger;
3782cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin    }
3882cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin  }
3982cbc6d68319d3a5b032b44b97ad6b6c0f9e3831sberlin
40fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit  public void testLoggerWithoutMember() {
41fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit    Injector injector = Guice.createInjector();
422b93168004c7ad3ae4393933de2ee19e81787656limpbizkit    assertNull(injector.getInstance(Logger.class).getName());
432b93168004c7ad3ae4393933de2ee19e81787656limpbizkit    assertNull(injector.getProvider(Logger.class).get().getName());
442b93168004c7ad3ae4393933de2ee19e81787656limpbizkit    assertNull(injector.getBinding(Logger.class).getProvider().get().getName());
452b93168004c7ad3ae4393933de2ee19e81787656limpbizkit    assertEquals("Provider<Logger>", injector.getProvider(Logger.class).toString());
46fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit  }
47150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit
48150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit  public void testCanBindAnnotatedLogger() {
49150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit    Injector injector = Guice.createInjector(new AbstractModule() {
50150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit      protected void configure() {
51150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit        bind(Logger.class)
52150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit            .annotatedWith(Names.named("anonymous"))
53150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit            .toInstance(Logger.getAnonymousLogger());
54150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit      }
55150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit    });
56150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit
57150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit    assertNull(injector.getInstance(Key.get(Logger.class, Names.named("anonymous"))).getName());
58150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit  }
59150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit
60150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit  public void testCannotBindLogger() {
61150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit    try {
62150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit      Guice.createInjector(new AbstractModule() {
63150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit        protected void configure() {
64150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit          bind(Logger.class).toInstance(Logger.getAnonymousLogger());
65150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit        }
66150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit      });
67150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit      fail();
68150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit    } catch (CreationException expected) {
69eab76471fbc2118a3c07d103d4b5548e153ed9e7limpbizkit      assertContains(expected.getMessage(),
70eab76471fbc2118a3c07d103d4b5548e153ed9e7limpbizkit          "A binding to java.util.logging.Logger was already configured");
71150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit    }
72150d677aafdbdb131abca815ffe1e2d9a6029b6dlimpbizkit  }
73fcf2b8ca9ca92c65e52a91fa0b682061428dab63limpbizkit}
74