public void MustCorrectlyHandleEventSubscription() { IOperation initialize() { return(operationMock.Object); }; var actionRequired = 0; var actionRequiredHandler = new ActionRequiredEventHandler(args => actionRequired++); var statusChanged = 0; var statusChangedHandler = new StatusChangedEventHandler(t => statusChanged++); var sut = new LazyInitializationOperation(initialize); sut.ActionRequired += actionRequiredHandler; sut.StatusChanged += statusChangedHandler; sut.Perform(); operationMock.Raise(o => o.ActionRequired += null, new Mock <ActionRequiredEventArgs>().Object); operationMock.Raise(o => o.StatusChanged += null, default(TextKey)); Assert.AreEqual(1, actionRequired); Assert.AreEqual(1, statusChanged); sut.ActionRequired -= actionRequiredHandler; sut.StatusChanged -= statusChangedHandler; operationMock.Raise(o => o.ActionRequired += null, new Mock <ActionRequiredEventArgs>().Object); operationMock.Raise(o => o.StatusChanged += null, default(TextKey)); Assert.AreEqual(1, actionRequired); Assert.AreEqual(1, statusChanged); sut.ActionRequired += actionRequiredHandler; sut.StatusChanged += statusChangedHandler; operationMock.Raise(o => o.ActionRequired += null, new Mock <ActionRequiredEventArgs>().Object); operationMock.Raise(o => o.StatusChanged += null, default(TextKey)); Assert.AreEqual(2, actionRequired); Assert.AreEqual(2, statusChanged); }
public void MustCorrectlyPropagateEventSubscription() { var actionRequiredCalled = false; var actionRequiredHandler = new ActionRequiredEventHandler(args => actionRequiredCalled = true); var statusChangedCalled = false; var statusChangedHandler = new StatusChangedEventHandler(t => statusChangedCalled = true); var operationA = new Mock <IOperation>(); var operationB = new Mock <IOperation>(); var operationC = new Mock <IOperation>(); var operations = new Queue <IOperation>(); operationA.Setup(o => o.Perform()).Returns(OperationResult.Success); operationB.Setup(o => o.Perform()).Returns(OperationResult.Success).Raises(o => o.ActionRequired += null, new Mock <ActionRequiredEventArgs>().Object); operationC.Setup(o => o.Perform()).Returns(OperationResult.Success).Raises(o => o.StatusChanged += null, default(TextKey)); operations.Enqueue(operationA.Object); operations.Enqueue(operationB.Object); operations.Enqueue(operationC.Object); var sut = new OperationSequence(loggerMock.Object, operations); sut.ActionRequired += actionRequiredHandler; sut.StatusChanged += statusChangedHandler; sut.TryPerform(); Assert.IsTrue(actionRequiredCalled); Assert.IsTrue(statusChangedCalled); actionRequiredCalled = false; statusChangedCalled = false; sut.ActionRequired -= actionRequiredHandler; sut.StatusChanged -= statusChangedHandler; sut.TryPerform(); Assert.IsFalse(actionRequiredCalled); Assert.IsFalse(statusChangedCalled); }