public void AcceptsAndPropagatesVisitor() { var applicationBindingMock = new Mock <ApplicationBindingBase <string> >(); var referencedApplicationBindingMock = new Mock <ApplicationBindingBase <string> >(); applicationBindingMock.Object.ReferencedApplications.Add(referencedApplicationBindingMock.Object); var orchestrationBindingMock = new Mock <OrchestrationBindingBase <Process> >(); applicationBindingMock.Object.Orchestrations.Add(orchestrationBindingMock.Object); var receivePortMock = new Mock <ReceivePortBase <string> >(); applicationBindingMock.Object.ReceivePorts.Add(receivePortMock.Object); var sendPortMock = new Mock <SendPortBase <string> >(); applicationBindingMock.Object.SendPorts.Add(sendPortMock.Object); var pipeline = new VisitorPipeline <string>(applicationBindingMock.Object); var visitorMock = new Mock <IApplicationBindingVisitor>(); var sut = new ProcessingStage <string>(pipeline); sut.Accept(visitorMock.Object); visitorMock.Verify(m => m.VisitReferencedApplicationBinding(referencedApplicationBindingMock.Object), Times.Once); visitorMock.Verify(m => m.VisitApplicationBinding(applicationBindingMock.Object), Times.Once); visitorMock.Verify(m => m.VisitOrchestration(orchestrationBindingMock.Object), Times.Once); visitorMock.Verify(m => m.VisitReceivePort(receivePortMock.Object), Times.Once); visitorMock.Verify(m => m.VisitSendPort(sendPortMock.Object), Times.Once); }
public void AcceptsAndPropagatesVisitorToCurrentStage() { var visitorMock = new Mock <IApplicationBindingVisitor>(); var sut = new VisitorPipeline <string>(new Mock <IApplicationBinding <string> >().Object); var stageMock = new Mock <ProcessingStage <string> >(sut); sut.Stage = stageMock.Object; sut.Accept(visitorMock.Object); stageMock.Verify(m => m.Accept(visitorMock.Object)); }
public void AdvanceVisitorPipelineStage() { var applicationBindingMock = new Mock <IApplicationBinding <string> >(MockBehavior.Strict); var visitableApplicationBindingMock = applicationBindingMock.As <IVisitable <IApplicationBindingVisitor> >(); var visitorPipeline = new VisitorPipeline <string>(applicationBindingMock.Object); visitableApplicationBindingMock .Setup(m => m.Accept(It.IsAny <IApplicationBindingVisitor>())) // ProcessingStage is used for each visitor called in sequence .Callback(() => visitorPipeline.Stage.Should().BeOfType <ProcessingStage <string> >()) .Returns(It.IsAny <IApplicationBindingVisitor>()); var sut = new PreprocessingStage <string>(visitorPipeline); sut.Accept(new Mock <IApplicationBindingVisitor>().Object); // PreprocessingStage is restored once all the visitors have done their processing visitorPipeline.Stage.Should().BeSameAs(sut); }