private void PrepareCombinedTrigger(Logical operation) { if (_triggers.Count == 0 || _nextCombination != null) { throw new InvalidOperationException(); } _nextCombination = new CombinedTrigger(operation, _triggers.Last()); _triggers.RemoveAt(_triggers.Count - 1); _triggers.Add(_nextCombination); }
void IAffector.AddTrigger(ITrigger trigger) { if (_nextCombination != null) { _nextCombination.Second = trigger; _nextCombination = null; return; } _triggers.Add(trigger); }
public void Should_Apply_Not_Operand(bool value) { var fakeTrigger = A.Fake <ITrigger>(); A.CallTo(() => fakeTrigger.WillAffect()).Returns(value); var trigger = new CombinedTrigger { Second = fakeTrigger }; Assert.NotEqual(value, trigger.WillAffect()); }
public void Should_Update_Updateable_Triggers() { var firstTrigger = A.Fake <IUpdateableTrigger>(); var secondTrigger = A.Fake <IUpdateableTrigger>(); var trigger = new CombinedTrigger(Logical.And, firstTrigger) { Second = secondTrigger }; trigger.Update(); A.CallTo(() => firstTrigger.Update()).MustHaveHappened(1, Times.Exactly); A.CallTo(() => secondTrigger.Update()).MustHaveHappened(1, Times.Exactly); }
internal void Should_Apply_And_Or_Xor_Operands(Logical operand, bool firstTriggerValue, bool secondTriggerValue, bool expected) { var firstTrigger = A.Fake <ITrigger>(); A.CallTo(() => firstTrigger.WillAffect()).Returns(firstTriggerValue); var secondTrigger = A.Fake <ITrigger>(); A.CallTo(() => secondTrigger.WillAffect()).Returns(secondTriggerValue); var trigger = new CombinedTrigger(operand, firstTrigger) { Second = secondTrigger }; Assert.Equal(expected, trigger.WillAffect()); }
internal void Should_Throw_InvalidOperationException_When_Missing_SecondTrigger_For_And_Or_Xor_Operands(Logical operand) { var trigger = new CombinedTrigger(operand, new RandomTrigger()); Assert.Throws <InvalidOperationException>(() => trigger.WillAffect()); }
public void Should_Throw_InvalidOperationException_When_Missing_SecondTrigger_For_Not_Operand() { var trigger = new CombinedTrigger(); Assert.Throws <InvalidOperationException>(() => trigger.WillAffect()); }