private void AddCausalityStack(CausalityStack s) { if (Stacks == null) { Stacks = new List <CausalityStack>(1); } CausalityStack causalityStack = new CausalityStack(); if (s.Count > 0) { CausalityTable = new Dictionary <Guid, ICausality>(); foreach (ICausality current in s) { if (!CausalityTable.ContainsKey(current.Guid)) { CausalityTable[current.Guid] = current; causalityStack.Add(current); } } if (causalityStack.Count > 0) { Stacks.Add(causalityStack); } } }
public void Push() { var causalities = new Stack <Causality>(); var sut = new CausalityStack(causalities); sut.Push(new Port("x")); Assert.AreEqual(1, causalities.Count); Assert.AreEqual("x", causalities.Pop().Port.Fullname); }
public void Peek() { var causalities = new Stack <Causality>(); causalities.Push(new Causality(new Port("x"))); causalities.Push(new Causality(new Port("y"))); var sut = new CausalityStack(causalities); Assert.AreEqual("y", sut.Peek().Port.Fullname); Assert.AreEqual(2, causalities.Count); }
public void IsEmpty() { var causalities = new Stack <Causality>(); var sut = new CausalityStack(causalities); Assert.IsTrue(sut.IsEmpty); causalities.Push(new Causality(new Port("x"))); Assert.IsFalse(sut.IsEmpty); }
public void Pop() { var causalities = new Stack <Causality>(); causalities.Push(new Causality(new Port("x"))); var sut = new CausalityStack(causalities); sut.Pop(); Assert.AreEqual(0, causalities.Count); }
public void Push() { var sut = new PushCausality("pc"); Assert.AreEqual("pc", sut.Name); CausalityStack result = null; sut.Implementation(new Message("x", "hello"), _ => result = _.Causalities, null); Assert.AreEqual("x.exception", result.Peek().Port.Fullname); }
public void Pop() { var sut = new PopCausality("pc"); Assert.AreEqual("pc", sut.Name); var msg = new Message("x", "hello"); msg.Causalities.Push(new Port("handler")); CausalityStack result = null; sut.Implementation(msg, _ => result = _.Causalities, null); Assert.IsTrue(result.IsEmpty); }
internal CausalityThreadContext Clone() { CausalityThreadContext causalityThreadContext = new CausalityThreadContext(ActiveCausality, null); if (ActiveCausality != null) { return(causalityThreadContext); } causalityThreadContext.Stacks = new List <CausalityStack>(); foreach (CausalityStack current in Stacks) { CausalityStack causalityStack = new CausalityStack(); causalityStack.AddRange(current); causalityThreadContext.Stacks.Add(causalityStack); } return(causalityThreadContext); }
public void Copy() { var causalities = new Stack <Causality>(); causalities.Push(new Causality(new Port("x"))); causalities.Push(new Causality(new Port("y"))); var sut = new CausalityStack(causalities); var copyOfSut = sut.Copy(); Assert.AreNotSame(copyOfSut, sut); Assert.AreEqual("y", copyOfSut.Peek().Port.Fullname); copyOfSut.Pop(); Assert.AreEqual("x", copyOfSut.Peek().Port.Fullname); copyOfSut.Pop(); Assert.IsTrue(copyOfSut.IsEmpty); Assert.AreEqual(2, causalities.Count); }
internal void AddCausality(ICausality causality) { if (CausalityThreadContext.IsEmpty(this)) { ActiveCausality = causality; return; } if (CausalityTable == null) { CausalityTable = new Dictionary <Guid, ICausality>(); } if (ActiveCausality == null) { if (Stacks != null) { if (CausalityTable.ContainsKey(causality.Guid)) { return; } CausalityTable.Add(causality.Guid, causality); foreach (CausalityStack current in Stacks) { current.Add(causality); } } return; } if (causality.Guid == ActiveCausality.Guid) { return; } CausalityTable.Add(ActiveCausality.Guid, ActiveCausality); CausalityTable.Add(causality.Guid, causality); Stacks = new List <CausalityStack>(); CausalityStack causalityStack = new CausalityStack(); causalityStack.Add(ActiveCausality); causalityStack.Add(causality); ActiveCausality = null; Stacks.Add(causalityStack); }