blob: 6d598c83fd227c4dba5c5c2aceada752af6c0908 [file] [log] [blame]
/*
* Copyright (C) 2020 The Dagger Authors.
*
* 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 dagger.hilt.processor.internal.root;
import static com.google.testing.compile.CompilationSubject.assertThat;
import static dagger.hilt.android.processor.AndroidCompilers.compiler;
import com.google.common.base.Joiner;
import com.google.testing.compile.Compilation;
import com.google.testing.compile.JavaFileObjects;
import javax.tools.JavaFileObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
// This test makes sure we don't regress the formatting in the components file.
@RunWith(JUnit4.class)
public final class RootFileFormatterTest {
private static final Joiner JOINER = Joiner.on("\n");
@Test
public void testProdComponents() {
Compilation compilation =
compiler()
.compile(
JavaFileObjects.forSourceLines(
"test.TestApplication",
"package test;",
"",
"import android.app.Application;",
"import dagger.hilt.android.HiltAndroidApp;",
"",
"@HiltAndroidApp(Application.class)",
"public class TestApplication extends Hilt_TestApplication {}"),
entryPoint("SingletonComponent", "EntryPoint1"),
entryPoint("SingletonComponent", "EntryPoint2"),
entryPoint("ActivityComponent", "EntryPoint3"),
entryPoint("ActivityComponent", "EntryPoint4"));
assertThat(compilation).succeeded();
assertThat(compilation)
.generatedSourceFile("test/TestApplication_HiltComponents")
.contentsAsUtf8String()
.contains(
JOINER.join(
" public abstract static class SingletonC implements"
+ " HiltWrapper_ActivityRetainedComponentManager"
+ "_ActivityRetainedComponentBuilderEntryPoint,",
" ServiceComponentManager.ServiceComponentBuilderEntryPoint,",
" SingletonComponent,",
" GeneratedComponent,",
" EntryPoint1,",
" EntryPoint2,",
" TestApplication_GeneratedInjector {"));
assertThat(compilation)
.generatedSourceFile("test/TestApplication_HiltComponents")
.contentsAsUtf8String()
.contains(
JOINER.join(
" public abstract static class ActivityC implements ActivityComponent,",
" FragmentComponentManager.FragmentComponentBuilderEntryPoint,",
" ViewComponentManager.ViewComponentBuilderEntryPoint,",
" GeneratedComponent,",
" EntryPoint3,",
" EntryPoint4 {"));
}
@Test
public void testTestComponents() {
Compilation compilation =
compiler()
.compile(
JavaFileObjects.forSourceLines(
"test.MyTest",
"package test;",
"",
"import dagger.hilt.android.testing.HiltAndroidTest;",
"",
"@HiltAndroidTest",
"public class MyTest {}"),
entryPoint("SingletonComponent", "EntryPoint1"),
entryPoint("SingletonComponent", "EntryPoint2"),
entryPoint("ActivityComponent", "EntryPoint3"),
entryPoint("ActivityComponent", "EntryPoint4"));
assertThat(compilation).succeeded();
assertThat(compilation)
.generatedSourceFile("test/MyTest_HiltComponents")
.contentsAsUtf8String()
.contains(
JOINER.join(
" public abstract static class SingletonC implements"
+ " HiltWrapper_ActivityRetainedComponentManager"
+ "_ActivityRetainedComponentBuilderEntryPoint,",
" ServiceComponentManager.ServiceComponentBuilderEntryPoint,",
" SingletonComponent,",
" TestSingletonComponent,",
" EntryPoint1,",
" EntryPoint2,",
" MyTest_GeneratedInjector {"));
assertThat(compilation)
.generatedSourceFile("test/MyTest_HiltComponents")
.contentsAsUtf8String()
.contains(
JOINER.join(
" public abstract static class ActivityC implements ActivityComponent,",
" FragmentComponentManager.FragmentComponentBuilderEntryPoint,",
" ViewComponentManager.ViewComponentBuilderEntryPoint,",
" GeneratedComponent,",
" EntryPoint3,",
" EntryPoint4 {"));
}
@Test
public void testSharedTestComponents() {
Compilation compilation =
compiler()
.withOptions("-Adagger.hilt.shareTestComponents=true")
.compile(
JavaFileObjects.forSourceLines(
"test.MyTest",
"package test;",
"",
"import dagger.hilt.android.testing.HiltAndroidTest;",
"",
"@HiltAndroidTest",
"public class MyTest {}"),
entryPoint("SingletonComponent", "EntryPoint1"));
assertThat(compilation).succeeded();
assertThat(compilation)
.generatedSourceFile("dagger/hilt/android/internal/testing/root/Default_HiltComponents")
.contentsAsUtf8String()
.contains(
JOINER.join(
" public abstract static class SingletonC implements"
+ " HiltWrapper_ActivityRetainedComponentManager"
+ "_ActivityRetainedComponentBuilderEntryPoint,",
" ServiceComponentManager.ServiceComponentBuilderEntryPoint,",
" SingletonComponent,",
" TestSingletonComponent,",
" EntryPoint1,",
" MyTest_GeneratedInjector {"));
}
private static JavaFileObject entryPoint(String component, String name) {
return JavaFileObjects.forSourceLines(
"test." + name,
"package test;",
"",
"import dagger.hilt.EntryPoint;",
"import dagger.hilt.InstallIn;",
component.equals("SingletonComponent") ? "import dagger.hilt.components.SingletonComponent;"
: "import dagger.hilt.android.components." + component + ";",
"",
"@EntryPoint",
"@InstallIn(" + component + ".class)",
"public interface " + name + " {}");
}
}