public void should_skip_all_units_but_the_last_one() { var expected = new UnitId("expected", "expected"); // --arrange var target = new SkipAllUnits(); var child1 = A.Fake <IBuildChainPattern>(); var child2 = A.Fake <IBuildChainPattern>(); target.AddNode(child1); target.AddNode(child2); // --act var chain = new[] { new UnitId(1, null), new UnitId(null, 2), new UnitId(3, null), expected }.ToArrayTail(); WeightedBuildActionBag?actionBag; target.GatherBuildActions(chain, out actionBag, 0); // --assert WeightedBuildActionBag?weightedBuildActionBag; A.CallTo(() => child1.GatherBuildActions(An <BuildChain> .That.IsEqualTo(expected.ToArrayTail(), Comparer.OfArrayTail <UnitId>()), out weightedBuildActionBag, An <int> ._)) .MustHaveHappenedOnceAndOnly(); WeightedBuildActionBag?actionBag1; A.CallTo(() => child2.GatherBuildActions(An <BuildChain> .That.IsEqualTo(expected.ToArrayTail(), Comparer.OfArrayTail <UnitId>()), out actionBag1, An <int> ._)) .MustHaveHappenedOnceAndOnly(); }
public void should_match_first_unit_and_send_the_rest_to_children() { const string kind = "kind"; var expected = new UnitId("expected", "expected"); // --arrange var target = new IfFirstUnit(new UnitPattern(kind)); var child1 = A.Fake <IBuildChainPattern>(); var child2 = A.Fake <IBuildChainPattern>(); target.AddNode(child1); target.AddNode(child2); // --act var chain = new[] { new UnitId(kind, null), expected }.ToArrayTail(); target.GatherBuildActions(chain, out var actionBag, 0); // --assert A.CallTo(() => child1.GatherBuildActions(An <BuildChain> .That.IsEqualTo(expected.ToArrayTail(), Comparer.OfArrayTail <UnitId>()), out actionBag, An <int> ._)) .MustHaveHappenedOnceAndOnly(); A.CallTo(() => child2.GatherBuildActions(An <BuildChain> .That.IsEqualTo(expected.ToArrayTail(), Comparer.OfArrayTail <UnitId>()), out actionBag, An <int> ._)) .MustHaveHappenedOnceAndOnly(); }