Mercury-IM/domain/src/test/java/org/mercury_im/messenger/learning_tests/dagger/DaggerTest.java

113 lines
2.7 KiB
Java

package org.mercury_im.messenger.learning_tests.dagger;
import org.junit.jupiter.api.Test;
import javax.inject.Inject;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class DaggerTest {
@dagger.Component(modules = {SingletonModule.class})
@Singleton
public interface Component {
void inject(Consumer consumer);
}
@Module
public class NewInstanceModule {
private int DEPENDENCY_INDEX = 0;
private final String MODULE_NAME;
public NewInstanceModule(String moduleName) {
this.MODULE_NAME = moduleName;
}
@Provides
Dependency provideDependency() {
return new Dependency(DEPENDENCY_INDEX++, MODULE_NAME);
}
}
@Module
public class SingletonModule {
private int DEPENDENCY_INDEX = 0;
private final String MODULE_NAME;
public SingletonModule(String moduleName) {
this.MODULE_NAME = moduleName;
}
@Provides
@Singleton
Dependency provideDependency() {
return new Dependency(DEPENDENCY_INDEX++, MODULE_NAME);
}
}
public static class Dependency {
final int index;
final String moduleName;
@Inject
public Dependency(int index, String moduleName) {
this.index = index;
this.moduleName = moduleName;
}
public int getIndex() {
return index;
}
public String getModuleName() {
return moduleName;
}
}
public static class Consumer {
@Inject
Dependency dependency;
public Consumer() {
}
public Dependency getDependency() {
return dependency;
}
}
@Test
public void test() {
Component component0 = DaggerDaggerTest_Component.builder().singletonModule(new SingletonModule("First")).build();
Consumer consumer0 = new Consumer();
Consumer consumer1 = new Consumer();
component0.inject(consumer0);
component0.inject(consumer1);
Component component1 = DaggerDaggerTest_Component.builder().singletonModule(new SingletonModule("Second")).build();
Consumer consumer2 = new Consumer();
Consumer consumer3 = new Consumer();
component1.inject(consumer2);
component1.inject(consumer3);
assertEquals(0, consumer0.getDependency().getIndex());
//assertEquals(1, consumer1.getDependency().getIndex());
assertEquals(0, consumer2.getDependency().getIndex());
//assertEquals(1, consumer3.getDependency().getIndex());
}
}