public void PropertyVisitor_WithMixedAdapters_CanIterate() { var container = new MixedContainer(); var visitor = new TestVisitor(""); visitor.AddAdapter(new MixedContravariantAdapter(visitor)); visitor.AddAdapter(new MixedAdapter(visitor)); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo("AA")); }
public void PropertyVisitor_WithInertAdapter_ContinuesAsExpected() { var container = new Container(); var visitor = new TestVisitor(""); visitor.AddAdapter(new MixedContravariantAdapter(visitor)); visitor.AddAdapter(new MixedAdapter(visitor)); visitor.AddAdapter(new MultiAdapter(visitor)); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo("IVisit<Container, int>")); }
public void PropertyVisitor_WhenCallingMultipleAdapters_RespectVisitation(bool withAdapters) { for (var count = 0; count < 10; ++count) { var container = new Container(); var visitor = new TestVisitor("1"); visitor.AddAdapter(new MultiContinueAdapter(visitor, count, withAdapters)); visitor.AddAdapter(new MessageAdapter(visitor, "0")); PropertyContainer.Accept(visitor, ref container); var result = withAdapters ? new string('0', count) : new string('1', count); Assert.That(visitor.ToString(), Is.EqualTo(result)); } }
public void PropertyVisitor_WhenChainingAdapters_RespectVisitation(int count, params VisitStatus[] statuses) { var container = new Container(); var expectedHasDefault = true; foreach (var status in statuses) { if (status == VisitStatus.Stop) { expectedHasDefault = false; break; } if (status == VisitStatus.Handled) { break; } } var visitor = new TestVisitor(expectedHasDefault ? "0" : ""); foreach (var status in statuses) { visitor.AddAdapter(new ChainedAdapter(visitor, status)); } PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo(new string('0', count))); }
public void PropertyVisitor_WithContravariantAdapters_CallsMostTyped() { var container = new ContainerWithInterface(); var visitor = new TestVisitor(""); visitor.AddAdapter(new ContravariantAdapter(visitor)); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo("ABA")); }
public void PropertyVisitor_WithExcludeAdapter_StopsVisitationWhenRequired() { var container = new ExcludeContainer(); var visitor = new TestVisitor("X"); visitor.AddAdapter(new ExcludeAdapter(visitor)); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Does.Not.Contain("int")); Assert.That(visitor.ToString(), Does.Contain("float")); }
public void PropertyVisitor_WithWrappingAdapter_CallsAdapterAndDefault() { var container = new Container(); var visitor = new TestVisitor("Failure is inevitable"); visitor.AddAdapter(new WrappingAdapter(visitor)); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo("This sentence: \"Failure is inevitable\" is simply not true")); }
public void PropertyVisitor_WithMultiAdapter_CallsMostTypedAdapter() { var container = new Container(); var visitor = new TestVisitor("Failure"); visitor.AddAdapter(new MultiAdapter(visitor)); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo("IVisit<Container, int>")); visitor.Reset(); PropertyContainer.Accept(visitor, ref container); Assert.That(visitor.ToString(), Is.EqualTo("IVisit<Container, int>")); }