/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit;
import java.io.*;
import javax.annotation.*;
import javax.inject.*;
import javax.sql.*;
import org.junit.*;
import static org.junit.Assert.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public final class TestedClassWithQualifiedDependencyTest
{
public static class TestedClass
{
@Inject private Dependency1 dep1;
@Autowired private Dependency2 dep2;
@Resource(name = "main-db") private DataSource ds;
@Named("some.textual.value") private String text;
@Qualifier("a.BC-12") private Long numericValue;
@Qualifier("a.BC-12b") private Long numericValue2;
}
public static class Dependency1
{
@Inject @Named("action1") private Runnable action;
@Autowired @Qualifier("foo") private Serializable qualifiedDep;
}
public static class Dependency2
{
@Qualifier("action2") private Runnable action;
@Named("bar") private Serializable qualifiedDep;
}
@Tested Serializable foo;
@Before
public void createQualifiedDependency()
{
foo = "foo";
}
@Tested Dependency2 dependency2;
@Tested final Long aBC12 = 123L;
@Tested final Long aBC12b = 45L;
@Tested(fullyInitialized = true) TestedClass tested;
@Injectable Runnable action1;
@Test
public void useTestedObjectWithDifferentDependenciesEachHavingAQualifiedSubDependency(@Injectable Runnable action2)
{
assertSame(action2, dependency2.action);
assertSame(dependency2, tested.dep2);
assertSame(action1, tested.dep1.action);
assertSame(foo, tested.dep1.qualifiedDep);
assertNull(tested.dep2.qualifiedDep);
}
@Tested DependencyImpl dep1;
@Tested(fullyInitialized = true) ClassWithQualifiedDependencyOfAbstractType tested2;
public interface Dependency {}
static class DependencyImpl implements Dependency {}
static class ClassWithQualifiedDependencyOfAbstractType { @Named("dep1") Dependency dependency; }
@Test
public void useTestedObjectOfSubtypeForQualifiedAbstractDependencyTypeInAnotherTestedObject()
{
assertSame(dep1, tested2.dependency);
}
@Injectable DataSource mainDb;
@Test
public void verifyDependenciesHavingCompositeNames(@Injectable("text value") String someTextualValue)
{
assertSame(mainDb, tested.ds);
assertEquals(someTextualValue, tested.text);
assertEquals(aBC12, tested.numericValue);
assertEquals(aBC12b, tested.numericValue2);
}
}