package com.google.gwt.inject.rebind.resolution;
import static com.google.gwt.inject.rebind.resolution.TestUtils.bar;
import static com.google.gwt.inject.rebind.resolution.TestUtils.baz;
import static com.google.gwt.inject.rebind.resolution.TestUtils.foo;
import com.google.gwt.inject.rebind.GinjectorBindings;
import com.google.gwt.inject.rebind.binding.Dependency;
import junit.framework.TestCase;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
/**
* Tests for {@link RequiredKeySet}.
*/
public class RequiredKeySetTest extends TestCase {
private static final String SOURCE = "dummy";
private IMocksControl control;
private GinjectorBindings origin;
@Override
protected void setUp() throws Exception {
control = EasyMock.createControl();
origin = control.createMock(GinjectorBindings.class);
}
public void testChainOfSingleDeps() throws Exception {
EasyMock.expect(origin.getDependencies()).andStubReturn(TestUtils.dependencyList(
new Dependency(Dependency.GINJECTOR, foo(), SOURCE)));
control.replay();
DependencyGraph graph = new DependencyGraph.Builder(origin)
.addEdge(new Dependency(Dependency.GINJECTOR, foo(), SOURCE))
.addEdge(new Dependency(foo(), bar(), SOURCE))
.addEdge(new Dependency(bar(), baz(), SOURCE)).build();
RequiredKeySet requiredKeys = new RequiredKeySet(graph);
assertTrue(requiredKeys.isRequired(foo()));
assertTrue(requiredKeys.isRequired(bar()));
assertTrue(requiredKeys.isRequired(baz()));
control.verify();
}
public void testWithMultipleDeps() throws Exception {
EasyMock.expect(origin.getDependencies()).andStubReturn(TestUtils.dependencyList(
new Dependency(Dependency.GINJECTOR, foo(), SOURCE)));
control.replay();
DependencyGraph graph = new DependencyGraph.Builder(origin)
.addEdge(new Dependency(Dependency.GINJECTOR, foo(), SOURCE))
.addEdge(new Dependency(foo(), bar(), SOURCE))
.addEdge(new Dependency(foo(), baz(), SOURCE)).build();
RequiredKeySet requiredKeys = new RequiredKeySet(graph);
assertTrue(requiredKeys.isRequired(foo()));
assertTrue(requiredKeys.isRequired(bar()));
assertTrue(requiredKeys.isRequired(baz()));
control.verify();
}
public void testRequiredSkipsOptional() throws Exception {
EasyMock.expect(origin.getDependencies()).andStubReturn(TestUtils.dependencyList(
new Dependency(Dependency.GINJECTOR, foo(), SOURCE)));
control.replay();
DependencyGraph graph = new DependencyGraph.Builder(origin)
.addEdge(new Dependency(Dependency.GINJECTOR, foo(), SOURCE))
.addEdge(new Dependency(foo(), bar(), true, false, SOURCE))
.addEdge(new Dependency(foo(), baz(), SOURCE)).build();
RequiredKeySet requiredKeys = new RequiredKeySet(graph);
assertTrue(requiredKeys.isRequired(foo()));
assertFalse(requiredKeys.isRequired(bar()));
assertTrue(requiredKeys.isRequired(baz()));
control.verify();
}
public void testRequiredNotHiddenByOptional() throws Exception {
EasyMock.expect(origin.getDependencies()).andStubReturn(TestUtils.dependencyList(
new Dependency(Dependency.GINJECTOR, foo(), SOURCE)));
control.replay();
DependencyGraph graph = new DependencyGraph.Builder(origin)
.addEdge(new Dependency(Dependency.GINJECTOR, foo(), SOURCE))
.addEdge(new Dependency(foo(), bar(), true, false, SOURCE))
.addEdge(new Dependency(baz(), bar(), SOURCE))
.addEdge(new Dependency(foo(), baz(), SOURCE)).build();
RequiredKeySet requiredKeys = new RequiredKeySet(graph);
assertTrue(requiredKeys.isRequired(foo()));
assertTrue(requiredKeys.isRequired(bar()));
assertTrue(requiredKeys.isRequired(baz()));
control.verify();
}
}