/extensions/throwingproviders/test/com/google/inject/throwingproviders/CheckedProviderMethodsModuleTest.java
Java | 189 lines | 143 code | 29 blank | 17 comment | 0 complexity | d587f61898f22d039c6ce6cef672299f MD5 | raw file
Possible License(s): Apache-2.0
- /*
- * Copyright (C) 2009 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.throwingproviders;
- import com.google.inject.AbstractModule;
- import com.google.inject.BindingAnnotation;
- import com.google.inject.Exposed;
- import com.google.inject.Guice;
- import com.google.inject.Injector;
- import com.google.inject.Key;
- import com.google.inject.PrivateModule;
- import com.google.inject.Provides;
- import com.google.inject.TypeLiteral;
- import com.google.inject.name.Named;
- import com.google.inject.name.Names;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.net.BindException;
- import java.rmi.RemoteException;
- import junit.framework.TestCase;
- /** Test methods for {@link CheckedProviderMethodsModule}. */
- public class CheckedProviderMethodsModuleTest extends TestCase {
- private final TypeLiteral<RpcProvider<String>> rpcProviderOfString =
- new TypeLiteral<RpcProvider<String>>() {};
- private final TypeLiteral<RpcProvider<Integer>> rpcProviderOfInteger =
- new TypeLiteral<RpcProvider<Integer>>() {};
- private final TypeLiteral<RpcProvider<Long>> rpcProviderOfLong =
- new TypeLiteral<RpcProvider<Long>>() {};
- private final TypeLiteral<RpcProvider<Float>> rpcProviderOfFloat =
- new TypeLiteral<RpcProvider<Float>>() {};
- private final TypeLiteral<RpcProvider<Pair<Double, String>>> rpcProviderOfPair =
- new TypeLiteral<RpcProvider<Pair<Double, String>>>() {};
- private final TestScope testScope = new TestScope();
- interface RpcProvider<T> extends CheckedProvider<T> {
- @Override
- T get() throws RemoteException, BindException;
- }
- @Retention(RetentionPolicy.RUNTIME)
- @BindingAnnotation
- @interface TestAnnotation {}
- class TestModule extends AbstractModule {
- private int nextIntToReturn = 100;
- @Override
- protected void configure() {
- bindScope(TestScope.Scoped.class, testScope);
- install(ThrowingProviderBinder.forModule(this));
- install(new TestPrivateModule());
- }
- @CheckedProvides(RpcProvider.class)
- String getSomeStringFromServer() {
- return "Works";
- }
- @CheckedProvides(RpcProvider.class)
- @TestScope.Scoped
- int getSomeIntegerFromServer() {
- return nextIntToReturn;
- }
- @CheckedProvides(RpcProvider.class)
- @TestAnnotation
- long getSomeLongFromServer() {
- return 0xffL;
- }
- @Provides
- double getSomeDouble() {
- return 2.0d;
- }
- @CheckedProvides(RpcProvider.class)
- Pair<Double, String> getSomePair(Double input) {
- return new Pair<Double, String>(input * 2, "foo");
- }
- @CheckedProvides(RpcProvider.class)
- float getFloat() throws BindException {
- throw new BindException("foo");
- }
- void setNextIntToReturn(int next) {
- nextIntToReturn = next;
- }
- }
- class TestPrivateModule extends PrivateModule {
- @Override
- protected void configure() {
- install(ThrowingProviderBinder.forModule(this));
- }
- @CheckedProvides(RpcProvider.class)
- @Named("fruit")
- @Exposed
- String provideApples() {
- return "apple";
- }
- }
- public void testNoAnnotationNoScope() throws BindException, RemoteException {
- Injector injector = Guice.createInjector(new TestModule());
- RpcProvider<String> provider = injector.getInstance(Key.get(rpcProviderOfString));
- assertEquals("Works", provider.get());
- }
- public void testWithScope() throws BindException, RemoteException {
- TestModule testModule = new TestModule();
- Injector injector = Guice.createInjector(testModule);
- RpcProvider<Integer> provider = injector.getInstance(Key.get(rpcProviderOfInteger));
- assertEquals((Integer) 100, provider.get());
- testModule.setNextIntToReturn(120);
- assertEquals((Integer) 100, provider.get());
- testScope.beginNewScope();
- assertEquals((Integer) 120, provider.get());
- }
- public void testWithAnnotation() throws BindException, RemoteException {
- TestModule testModule = new TestModule();
- Injector injector = Guice.createInjector(testModule);
- RpcProvider<Long> provider =
- injector.getInstance(Key.get(rpcProviderOfLong, TestAnnotation.class));
- assertEquals((Long) 0xffL, provider.get());
- }
- public void testWithInjectedParameters() throws BindException, RemoteException {
- TestModule testModule = new TestModule();
- Injector injector = Guice.createInjector(testModule);
- RpcProvider<Pair<Double, String>> provider = injector.getInstance(Key.get(rpcProviderOfPair));
- Pair<Double, String> pair = provider.get();
- assertEquals(pair.first, 4.0d, 0.0);
- }
- public void testWithThrownException() {
- TestModule testModule = new TestModule();
- Injector injector = Guice.createInjector(testModule);
- RpcProvider<Float> provider = injector.getInstance(Key.get(rpcProviderOfFloat));
- try {
- provider.get();
- fail();
- } catch (RemoteException e) {
- fail();
- } catch (BindException e) {
- // good
- }
- }
- public void testExposedMethod() throws BindException, RemoteException {
- TestModule testModule = new TestModule();
- Injector injector = Guice.createInjector(testModule);
- RpcProvider<String> provider =
- injector.getInstance(Key.get(rpcProviderOfString, Names.named("fruit")));
- assertEquals("apple", provider.get());
- }
- private static class Pair<A, B> {
- A first;
- B second;
- Pair(A a, B b) {
- this.first = a;
- this.second = b;
- }
- }
- }