public void testResolveMultipleCycles() throws Exception {
// Foo -> Bar -> Provider<Baz> -> Baz -> {Provider<Foo>, Provider<Bar>, Provider<Baz>}
// Resolves multiple cycles, including a cycle that starts with a Provider
StandardTree tree = createExampleTree();
Binding fooBinding = expectCreateBinding(foo(), required(foo(), bar()));
Binding barBinding = expectCreateBinding(bar(), required(bar(), providerBaz()));
Binding providerBazBinding = expectCreateBinding(
providerBaz(), requiredLazy(providerBaz(), baz()));
Binding bazBinding = expectCreateBinding(baz(), required(baz(), providerFoo()),
required(baz(), providerFoo()), required(baz(), providerBar()));
Binding providerFooBinding = expectCreateBinding(
providerFoo(), requiredLazy(providerFoo(), foo()));
Binding providerBarBinding = expectCreateBinding(
providerBar(), requiredLazy(providerBar(), bar()));
tree.root.addBinding(foo(), fooBinding);
tree.root.addBinding(providerBar(), providerBarBinding);
tree.root.addBinding(providerFoo(), providerFooBinding);