mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
6.7 KiB
Java
250 lines
6.7 KiB
Java
/**
|
|
* Copyright (c) 2012 Todoroo Inc
|
|
*
|
|
* See the file "LICENSE" for the full license governing this code.
|
|
*/
|
|
package com.todoroo.andlib.service;
|
|
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.robolectric.RobolectricTestRunner;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertNull;
|
|
import static org.junit.Assert.fail;
|
|
|
|
@RunWith(RobolectricTestRunner.class)
|
|
public class DependencyInjectionTest {
|
|
|
|
@Test
|
|
public void testNoAutowire() {
|
|
DependencyInjectionService service = new DependencyInjectionService();
|
|
|
|
Object test = new Object();
|
|
service.inject(test);
|
|
}
|
|
|
|
@Test
|
|
public void testSimpleStringInjectionAutowire() {
|
|
DependencyInjectionService service = new DependencyInjectionService();
|
|
service.addInjector(
|
|
new AbstractDependencyInjector() {
|
|
|
|
@Override
|
|
public Object getInjection(Field field) {
|
|
if(field.getName().equals("foo"))
|
|
return "bar";
|
|
return null;
|
|
}
|
|
}
|
|
);
|
|
|
|
// test various permissions
|
|
Object test = new Object() {
|
|
@Autowired public String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertEquals("bar", test.toString());
|
|
|
|
test = new Object() {
|
|
@Autowired String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertEquals("bar", test.toString());
|
|
|
|
test = new Object() {
|
|
@Autowired protected String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertEquals("bar", test.toString());
|
|
|
|
test = new Object() {
|
|
@Autowired private String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertEquals("bar", test.toString());
|
|
|
|
// test no annotation
|
|
test = new Object() {
|
|
public String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertNull( test.toString());
|
|
}
|
|
|
|
@Test
|
|
public void testHierarchicalStringInjectionAutowire() {
|
|
DependencyInjectionService service = new DependencyInjectionService();
|
|
service.addInjector(
|
|
new AbstractDependencyInjector() {
|
|
|
|
@Override
|
|
public Object getInjection(Field field) {
|
|
return "malarkey";
|
|
}
|
|
}
|
|
);
|
|
service.addInjector(
|
|
new AbstractDependencyInjector() {
|
|
|
|
@Override
|
|
public Object getInjection(Field field) {
|
|
if(field.getName().equals("foo"))
|
|
return "bar";
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object test = new Object() {
|
|
@Autowired public String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertEquals("bar", test.toString());
|
|
|
|
test = new Object() {
|
|
@Autowired public String forks;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return forks;
|
|
}
|
|
};
|
|
service.inject(test);
|
|
assertEquals("malarkey", test.toString());
|
|
}
|
|
|
|
@Test
|
|
public void testMissingInjection() {
|
|
DependencyInjectionService service = new DependencyInjectionService();
|
|
service.addInjector(
|
|
new AbstractDependencyInjector() {
|
|
|
|
@Override
|
|
public Object getInjection(Field field) {
|
|
if(field.getName().equals("wozzle"))
|
|
return "bar";
|
|
return null;
|
|
}
|
|
}
|
|
);
|
|
|
|
Object test = new Object() {
|
|
@Autowired public String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
|
|
try {
|
|
service.inject(test);
|
|
fail("could inject with missing injector");
|
|
} catch (RuntimeException e) {
|
|
// expected
|
|
}
|
|
|
|
assertNull(test.toString());
|
|
}
|
|
|
|
@Test
|
|
public void testMultipleInjection() {
|
|
DependencyInjectionService service = new DependencyInjectionService();
|
|
service.addInjector(
|
|
new AbstractDependencyInjector() {
|
|
|
|
@Override
|
|
public Object getInjection(Field field) {
|
|
if(field.getName().equals("foo"))
|
|
return "bar";
|
|
return null;
|
|
}
|
|
}
|
|
);
|
|
|
|
Object test1 = new Object() {
|
|
@Autowired public String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
Object test2 = new Object() {
|
|
@Autowired public String foo;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return foo;
|
|
}
|
|
};
|
|
service.inject(test1);
|
|
service.inject(test2);
|
|
assertEquals("bar", test1.toString());
|
|
assertEquals("bar", test2.toString());
|
|
}
|
|
|
|
public static class ParentInjectee {
|
|
@Autowired protected String foo;
|
|
}
|
|
|
|
public static class ChildInjectee extends ParentInjectee {
|
|
@Autowired protected String bar;
|
|
}
|
|
|
|
@Test
|
|
public void testInheritedInjection() {
|
|
DependencyInjectionService service = new DependencyInjectionService();
|
|
service.addInjector(
|
|
new AbstractDependencyInjector() {
|
|
|
|
@Override
|
|
public Object getInjection(Field field) {
|
|
if(field.getName().equals("foo"))
|
|
return "gotfoo";
|
|
else if(field.getName().equals("bar"))
|
|
return "hasbar";
|
|
return null;
|
|
}
|
|
}
|
|
);
|
|
|
|
ChildInjectee child = new ChildInjectee();
|
|
service.inject(child);
|
|
assertEquals("gotfoo", child.foo);
|
|
assertEquals("hasbar", child.bar);
|
|
}
|
|
}
|