PageRenderTime 48ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/test/com/google/gwt/inject/client/hierarchical/HierarchicalTest.java

http://google-gin.googlecode.com/
Java | 151 lines | 105 code | 28 blank | 18 comment | 0 complexity | 69ebe7944c04c6c4c9cde44bb3e1a71b MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0
  1. /*
  2. * Copyright 2008 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.google.gwt.inject.client.hierarchical;
  17. import com.google.gwt.core.client.GWT;
  18. import com.google.gwt.inject.client.AbstractGinModule;
  19. import com.google.gwt.inject.client.GinModules;
  20. import com.google.gwt.inject.client.Ginjector;
  21. import com.google.gwt.inject.client.SimpleObject;
  22. import com.google.gwt.junit.client.GWTTestCase;
  23. import com.google.inject.Inject;
  24. import com.google.inject.Provides;
  25. import com.google.inject.Singleton;
  26. import com.google.inject.TypeLiteral;
  27. import com.google.inject.name.Named;
  28. import com.google.inject.name.Names;
  29. import java.util.ArrayList;
  30. import java.util.Arrays;
  31. import java.util.List;
  32. /**
  33. * Gin tests using a {@code Ginjector} type hierarchy.
  34. */
  35. public class HierarchicalTest extends GWTTestCase {
  36. public void testHierarchicalInjector() {
  37. HierarchicalMyAppGinjector injector = GWT.create(HierarchicalMyAppGinjector.class);
  38. SimpleObject simple = injector.getSimple();
  39. assertNotNull(simple);
  40. SimpleObject unnamedSimple = injector.getUnnamedSimple();
  41. assertNotNull(unnamedSimple);
  42. assertSame(simple, unnamedSimple);
  43. SimpleObject purple = injector.getSimplePurple();
  44. assertNotNull(purple);
  45. assertSame(simple, purple);
  46. SimpleObject red = injector.getSimpleRed();
  47. assertNotNull(red);
  48. assertSame(purple, red);
  49. SimpleObject blue = injector.getSimpleBlue();
  50. assertNotNull(blue);
  51. assertSame(blue, red);
  52. }
  53. public void testOverlappingModules() {
  54. ChildGinjector ginjector = GWT.create(ChildGinjector.class);
  55. assertEquals("foo", ginjector.getRed());
  56. assertEquals("bar", ginjector.getBlue());
  57. assertEquals("baz", ginjector.getGreen());
  58. }
  59. public void testModuleInitializationOrder() {
  60. ChildGinjector ginjector = GWT.create(ChildGinjector.class);
  61. List<?> expectedOrder = Arrays.asList(GinModuleA.class, GinModuleC.class, GinModuleB.class);
  62. assertEquals(expectedOrder, ginjector.getModuleInitializationList());
  63. }
  64. public void testInheritedNonGinjector() {
  65. InheritingGinjector ginjector = GWT.create(InheritingGinjector.class);
  66. assertEquals("foo", ginjector.getString());
  67. }
  68. public String getModuleName() {
  69. return "com.google.gwt.inject.InjectTest";
  70. }
  71. @Singleton
  72. public static class ModuleInitializationList extends ArrayList<Object> {}
  73. public static class InitializationMarker<T> {
  74. @Inject
  75. InitializationMarker(T module, ModuleInitializationList list) {
  76. list.add(module.getClass());
  77. }
  78. }
  79. public static class GinModuleA extends AbstractGinModule {
  80. @Override
  81. protected void configure() {
  82. bindConstant().annotatedWith(Names.named("red")).to("foo");
  83. bind(new TypeLiteral<InitializationMarker<GinModuleA>>(){}).asEagerSingleton();
  84. }
  85. }
  86. public static class GinModuleB extends AbstractGinModule {
  87. @Override
  88. protected void configure() {
  89. bindConstant().annotatedWith(Names.named("blue")).to("bar");
  90. bind(new TypeLiteral<InitializationMarker<GinModuleB>>(){}).asEagerSingleton();
  91. }
  92. }
  93. public static class GinModuleC extends AbstractGinModule {
  94. @Override
  95. protected void configure() {
  96. bindConstant().annotatedWith(Names.named("green")).to("baz");
  97. bind(new TypeLiteral<InitializationMarker<GinModuleC>>(){}).asEagerSingleton();
  98. }
  99. }
  100. @GinModules({GinModuleA.class, GinModuleC.class})
  101. public static interface SuperGinjector extends Ginjector {
  102. @Named("red") String getRed();
  103. @Named("green") String getGreen();
  104. ModuleInitializationList getModuleInitializationList();
  105. }
  106. @GinModules({GinModuleB.class, GinModuleC.class})
  107. public static interface ChildGinjector extends SuperGinjector {
  108. @Named("blue") String getBlue();
  109. }
  110. static class SimpleGinModule extends AbstractGinModule {
  111. @Override
  112. protected void configure() {}
  113. @Provides
  114. String provideString() {
  115. return "foo";
  116. }
  117. }
  118. interface RandomInterface {
  119. String getString();
  120. }
  121. @GinModules(SimpleGinModule.class)
  122. interface InheritingGinjector extends RandomInterface, Ginjector {}
  123. }