private void OnMessagesCollected(MessageCollection <ModelVersionCreated, SelectedTreeViewItemChanged> set) { set.MarkAsConsumed(set.Message2); object modelObject = null; if (set.Message2.SelectedItem is AgentViewModel agent) { modelObject = set.Message1.Model.Agents.FirstOrDefault(a => a.Id == agent.ModelId); } else if (set.Message2.SelectedItem is MessageViewModel message) { modelObject = set.Message1.Model.Messages.FirstOrDefault(a => a.Id == message.ModelId); } if (modelObject != null) { OnMessage(new SelectedModelObjectChanged(modelObject, set, SelectionSource.Tree)); } else { set.MarkAsConsumed(set.Message1); collector.Push(set.Message2); //basically waits for new model version created } }
public void ThirdPushedMessageIsExecuted() { bool executed = false; MessageCollector <TestMessage, OtherMessage, OtherMessage2> collector = new MessageCollector <TestMessage, OtherMessage, OtherMessage2>(); collector.Push(new TestMessage()); collector.Push(new OtherMessage()); collector.PushAndExecute(new OtherMessage2(), set => executed = true); executed.Should().BeTrue("the set was completed"); }
public void FourthConsumedMessageIsRemovedFromCollector() { bool executed = false; MessageCollector <TestMessage, OtherMessage, OtherMessage2, OtherMessage3> collector = new MessageCollector <TestMessage, OtherMessage, OtherMessage2, OtherMessage3>(); collector.Push(new TestMessage()); collector.Push(new OtherMessage()); collector.Push(new OtherMessage2()); collector.PushAndExecute(new OtherMessage3(), set => executed = true); executed.Should().BeTrue("the set was completed"); }
public void PushAndExecuteStoresMessages() { int executed = 0; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(set => executed++); collector.Push(new TestMessage()); collector.PushAndExecute(new OtherMessage(), set => { }); collector.Push(new TestMessage()); executed.Should().Be(2, "push and execute should store the other message."); }
public void ExecutePushedMessageOnlyOnce() { int executed = 0; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(); collector.Push(new TestMessage()); collector.PushAndExecute(new OtherMessage(), set => { executed++; }); collector.Push(new TestMessage()); executed.Should().Be(1, "the executed action should not have been executed twice."); }
public void ConsumedMessageIsRemovedFromCollectorUsingPushAndExecute() { int executed = 0; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(set => executed++); collector.Push(new TestMessage()); collector.PushAndExecute(new OtherMessage(), set => { set.MarkAsConsumed(set.Message2); }); collector.Push(new TestMessage()); executed.Should().Be(1, "other message should have been eliminated."); }
public void ExecuteOriginalActionToo() { bool executed = false; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(set => executed = true); collector.Push(new TestMessage()); collector.PushAndExecute(new OtherMessage(), set => { }); executed.Should().BeTrue("the original action should have been executed."); }
protected override void ExecuteCore(Message messageData) { if (messageData.Is <GraphCreationSkipped>()) { OnMessage(new GraphViewModelUpdated(messageData)); } else { collector.Push(messageData); } }
protected override void ExecuteCore(Message messageData) { if (messageData.Is <GraphViewModelUpdated>()) { Select(lastSet); } else { collector.Push(messageData); } }
public void ExecutePushedMessageIfSetIsFullWithDecorator() { bool executed = false; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(); collector.Push(new TestMessage()); collector.PushAndExecute(OtherDecorator.Decorate(new OtherMessage()), set => { executed = true; }); executed.Should().BeTrue("this set should have been executed immediately."); }
protected override void ExecuteCore(Message messageData) { if (messageData.Is <ModifyModel>()) { collector ??= new MessageCollector <ModificationResult, TreeViewModelUpdated, GraphViewModelUpdated>(OnMessagesCollected); return; } if (messageData.MessageDomain.Root.Is <ModifyModel>()) { collector?.Push(messageData); } }
public void ExecutePushedMessageIfSetIsFull() { bool executed = false; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(); collector.Push(new TestMessage()); bool result = collector.PushAndExecute(new OtherMessage(), set => { executed = true; }); executed.Should().BeTrue("this set should have been executed immediately."); result.Should().BeTrue("result should be true if it was executed."); }
public void ExecutePushedMessageIfSetIsFilledLater() { bool executed = false; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(); using Timer timer = new Timer(state => { executed.Should().BeFalse("The set should not execute before pushing second message."); collector.Push(new TestMessage()); }, null, 200, Timeout.Infinite); collector.PushAndExecute(new OtherMessage(), set => { executed = true; }); executed.Should().BeTrue("this set should have been executed after the timer goes of."); }
public void CancelPushAndExecuteAndAfterwardsPushDoesNotExecuteAction() { bool executed = false; MessageCollector <TestMessage, OtherMessage> collector = new MessageCollector <TestMessage, OtherMessage>(); using CancellationTokenSource source = new CancellationTokenSource(); using Timer timer = new Timer(state => { source.Cancel(); }, null, 200, Timeout.Infinite); collector.PushAndExecute(new OtherMessage(), set => { executed = true; }, source.Token); collector.Push(new TestMessage()); executed.Should().BeFalse("execution was canceled."); }
protected override void ExecuteCore(Message messageData) { collector.Push(messageData); }