1 /** 2 * Copyright (C) 2013 Google, Inc. 3 * Copyright (C) 2013 Square, Inc. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package dagger.tests.integration.operation; 18 19 import com.google.testing.compile.JavaFileObjects; 20 import dagger.internal.codegen.ComponentProcessor; 21 import javax.tools.JavaFileObject; 22 import org.junit.Test; 23 import org.junit.runner.RunWith; 24 import org.junit.runners.JUnit4; 25 26 import static com.google.common.truth.Truth.assert_; 27 import static com.google.testing.compile.JavaSourcesSubjectFactory.javaSources; 28 import static java.util.Arrays.asList; 29 30 @RunWith(JUnit4.class) 31 public final class PrimitiveInjectionTest { 32 33 // TODO(cgruber): Use @test.ForTest to qualify primitives once qualifier equivalence is working. 34 /* 35 JavaFileObject annotation = JavaFileObjects.forSourceLines("test.ForTest", 36 "package test;", 37 "import javax.inject.Qualifier;", 38 "@Qualifier", 39 "public @interface ForTest {", 40 "}"); 41 */ 42 43 // TODO(cgruber): Expand test to support more primitive types when b/15512877 is fixed. 44 JavaFileObject primitiveInjectable = JavaFileObjects.forSourceLines("test.PrimitiveInjectable", 45 "package test;", 46 "import javax.inject.Inject;", 47 "class PrimitiveInjectable {", 48 " @Inject PrimitiveInjectable(int ignored) {}", 49 "}"); 50 51 JavaFileObject primitiveModule = JavaFileObjects.forSourceLines("test.PrimitiveModule", 52 "package test;", 53 "import dagger.Module;", 54 "import dagger.Provides;", 55 "@Module", 56 "class PrimitiveModule {", 57 " @Provides int primitiveInt() { return Integer.MAX_VALUE; }", 58 "}"); 59 60 JavaFileObject component = JavaFileObjects.forSourceLines("test.PrimitiveComponent", 61 "package test;", 62 "import dagger.Component;", 63 "import dagger.Provides;", 64 "@Component(modules = PrimitiveModule.class)", 65 "interface PrimitiveComponent {", 66 " int primitiveInt();", 67 " PrimitiveInjectable primitiveInjectable();", 68 "}"); 69 70 JavaFileObject expectedComponent = JavaFileObjects.forSourceLines( 71 "test.DaggerPrimitiveComponent", 72 "package test;", 73 "", 74 "import javax.annotation.Generated;", 75 "import javax.inject.Provider;", 76 "", 77 "@Generated(\"dagger.internal.codegen.ComponentProcessor\")", 78 "public final class DaggerPrimitiveComponent implements PrimitiveComponent {", 79 " private Provider<Integer> primitiveIntProvider;", 80 " private Provider<PrimitiveInjectable> primitiveInjectableProvider;", 81 "", 82 " private DaggerPrimitiveComponent(Builder builder) {", 83 " assert builder != null;", 84 " initialize(builder);", 85 " }", 86 "", 87 " public static Builder builder() {", 88 " return new Builder();", 89 " }", 90 "", 91 " public static PrimitiveComponent create() {", 92 " return builder().build();", 93 " }", 94 "", 95 " @SuppressWarnings(\"unchecked\")", 96 " private void initialize(final Builder builder) {", 97 " this.primitiveIntProvider =", 98 " PrimitiveModule_PrimitiveIntFactory.create(builder.primitiveModule);", 99 " this.primitiveInjectableProvider =", 100 " PrimitiveInjectable_Factory.create(primitiveIntProvider);", 101 " }", 102 "", 103 " @Override", 104 " public int primitiveInt() {", 105 " return primitiveIntProvider.get();", 106 " }", 107 "", 108 " @Override", 109 " public PrimitiveInjectable primitiveInjectable() {", 110 " return primitiveInjectableProvider.get();", 111 " }", 112 "", 113 " public static final class Builder {", 114 " private PrimitiveModule primitiveModule;", 115 "", 116 " private Builder() {", 117 " }", 118 "", 119 " public PrimitiveComponent build() {", 120 " if (primitiveModule == null) {", 121 " this.primitiveModule = new PrimitiveModule();", 122 " }", 123 " return new DaggerPrimitiveComponent(this);", 124 " }", 125 "", 126 " public Builder primitiveModule(PrimitiveModule primitiveModule) {", 127 " if (primitiveModule == null) {", 128 " throw new NullPointerException();", 129 " }", 130 " this.primitiveModule = primitiveModule;", 131 " return this;", 132 " }", 133 " }", 134 "}"); 135 primitiveArrayTypesAllInjected()136 @Test public void primitiveArrayTypesAllInjected() { 137 assert_().about(javaSources()) 138 .that(asList(component, primitiveInjectable, primitiveModule)) 139 .processedWith(new ComponentProcessor()) 140 .compilesWithoutError() 141 .and().generatesSources(expectedComponent); 142 } 143 } 144