1package com.google.inject;
2
3import static com.google.inject.Asserts.assertContains;
4
5import com.google.inject.name.Names;
6
7import junit.framework.TestCase;
8
9import java.util.logging.Logger;
10
11/**
12 * Test built-in injection of loggers.
13 *
14 * @author jessewilson
15 */
16public class LoggerInjectionTest extends TestCase {
17
18  @Inject Logger logger;
19
20  public void testLoggerWithMember() {
21    Injector injector = Guice.createInjector();
22    injector.injectMembers(this);
23    assertEquals("com.google.inject.LoggerInjectionTest", logger.getName());
24  }
25
26  public void testLoggerInConstructor() {
27    Injector injector = Guice.createInjector();
28    Foo foo = injector.getInstance(Foo.class);
29    assertEquals("com.google.inject.LoggerInjectionTest$Foo", foo.logger.getName());
30  }
31
32  private static class Foo {
33    Logger logger;
34    @SuppressWarnings("unused")
35    @Inject Foo(Logger logger) {
36      this.logger = logger;
37    }
38  }
39
40  public void testLoggerWithoutMember() {
41    Injector injector = Guice.createInjector();
42    assertNull(injector.getInstance(Logger.class).getName());
43    assertNull(injector.getProvider(Logger.class).get().getName());
44    assertNull(injector.getBinding(Logger.class).getProvider().get().getName());
45    assertEquals("Provider<Logger>", injector.getProvider(Logger.class).toString());
46  }
47
48  public void testCanBindAnnotatedLogger() {
49    Injector injector = Guice.createInjector(new AbstractModule() {
50      protected void configure() {
51        bind(Logger.class)
52            .annotatedWith(Names.named("anonymous"))
53            .toInstance(Logger.getAnonymousLogger());
54      }
55    });
56
57    assertNull(injector.getInstance(Key.get(Logger.class, Names.named("anonymous"))).getName());
58  }
59
60  public void testCannotBindLogger() {
61    try {
62      Guice.createInjector(new AbstractModule() {
63        protected void configure() {
64          bind(Logger.class).toInstance(Logger.getAnonymousLogger());
65        }
66      });
67      fail();
68    } catch (CreationException expected) {
69      assertContains(expected.getMessage(),
70          "A binding to java.util.logging.Logger was already configured");
71    }
72  }
73}
74