| /** |
| * Copyright (C) 2008 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| package com.google.inject.name; |
| |
| import static com.google.inject.Asserts.assertEqualWhenReserialized; |
| import static com.google.inject.Asserts.assertEqualsBothWays; |
| |
| import com.google.common.collect.ImmutableMap; |
| import com.google.inject.AbstractModule; |
| import com.google.inject.Guice; |
| import com.google.inject.Injector; |
| import com.google.inject.Key; |
| |
| import junit.framework.TestCase; |
| |
| import java.io.IOException; |
| import java.util.Map; |
| import java.util.Properties; |
| |
| /** |
| * @author jessewilson@google.com (Jesse Wilson) |
| */ |
| public class NamesTest extends TestCase { |
| |
| @Named("foo") private String foo; |
| private Named namedFoo; |
| |
| protected void setUp() throws Exception { |
| super.setUp(); |
| namedFoo = getClass().getDeclaredField("foo").getAnnotation(Named.class); |
| } |
| |
| public void testConsistentEqualsAndHashcode() { |
| Named actual = Names.named("foo"); |
| assertEqualsBothWays(namedFoo, actual); |
| assertEquals(namedFoo.toString(), actual.toString()); |
| } |
| |
| public void testNamedIsSerializable() throws IOException { |
| assertEqualWhenReserialized(Names.named("foo")); |
| } |
| |
| public void testBindPropertiesUsingProperties() { |
| final Properties teams = new Properties(); |
| teams.setProperty("SanJose", "Sharks"); |
| teams.setProperty("Edmonton", "Oilers"); |
| |
| Injector injector = Guice.createInjector(new AbstractModule() { |
| protected void configure() { |
| Names.bindProperties(binder(), teams); |
| } |
| }); |
| |
| assertEquals("Sharks", injector.getInstance(Key.get(String.class, Names.named("SanJose")))); |
| assertEquals("Oilers", injector.getInstance(Key.get(String.class, Names.named("Edmonton")))); |
| } |
| |
| public void testBindPropertiesUsingMap() { |
| final Map<String, String> properties = ImmutableMap.of( |
| "SanJose", "Sharks", "Edmonton", "Oilers"); |
| |
| Injector injector = Guice.createInjector(new AbstractModule() { |
| protected void configure() { |
| Names.bindProperties(binder(), properties); |
| } |
| }); |
| |
| assertEquals("Sharks", injector.getInstance(Key.get(String.class, Names.named("SanJose")))); |
| assertEquals("Oilers", injector.getInstance(Key.get(String.class, Names.named("Edmonton")))); |
| } |
| |
| public void testBindPropertiesIncludesInheritedProperties() { |
| Properties defaults = new Properties(); |
| defaults.setProperty("Edmonton", "Eskimos"); |
| defaults.setProperty("Regina", "Pats"); |
| |
| final Properties teams = new Properties(defaults); |
| teams.setProperty("SanJose", "Sharks"); |
| teams.setProperty("Edmonton", "Oilers"); |
| |
| Injector injector = Guice.createInjector(new AbstractModule() { |
| protected void configure() { |
| Names.bindProperties(binder(), teams); |
| } |
| }); |
| |
| assertEquals("Pats", injector.getInstance(Key.get(String.class, Names.named("Regina")))); |
| assertEquals("Oilers", injector.getInstance(Key.get(String.class, Names.named("Edmonton")))); |
| assertEquals("Sharks", injector.getInstance(Key.get(String.class, Names.named("SanJose")))); |
| |
| try { |
| injector.getInstance(Key.get(String.class, Names.named("Calgary"))); |
| fail(); |
| } catch (RuntimeException expected) { |
| } |
| } |
| } |