public void should_send_the_last_unit_to_children_if_no_unit_matched() { const string kind = "kind"; var expected = new UnitId("expected", "expected"); // --arrange var target = new SkipWhileUnit(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), new UnitId(kind, null), 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(); }
public void using_arguments_should_add_registrations() { const string expectedString = "expected"; const int expectedInt = 312; var tuner1 = A.Dummy <IArgumentTuner>(); var tuner2 = A.Dummy <IArgumentTuner>(); var expectedWeight = WeightOf.BuildChainPattern.IfFirstUnit + WeightOf.InjectionPoint.ByTypeAssignability; var expectedChildNode = new SkipWhileUnit(Static.Of <IsServiceUnit>()) { Children = { new IfFirstUnit(new IsAssignableFromType(expectedString.GetType()), expectedWeight) .UseBuildAction(new Instance <object>(expectedString), BuildStage.Cache), new IfFirstUnit(new IsAssignableFromType(expectedInt.GetType()), expectedWeight) .UseBuildAction(new Instance <object>(expectedInt), BuildStage.Cache) } }; // --arrange var actual = new Util.TestBuildChainPattern(); var target = new FinalTuner(actual); // --act target.UsingArguments(tuner1, expectedString, expectedInt, tuner2); // --assert A.CallTo(() => tuner1.Tune(actual, 0)).MustHaveHappenedOnceAndOnly().Then( A.CallTo(() => tuner2.Tune(actual, 0)).MustHaveHappenedOnceAndOnly()); actual.Children.Single().Should().BeEquivalentTo(expectedChildNode); }
public void treat_inheritors_generic([Values(null, "tag")] string tag) { var expected = new SkipWhileUnit(new IsInheritorOf(typeof(IDisposable), tag)); // --arrange var tree = new BuildChainPatternTree(); var target = new RootTuner(tree); // --act // --assert target.TreatInheritorsOf <IDisposable>(tag); tree.Children.Single().Should().BeEquivalentTo(expected); }
public void building_generic([Values(null, "tag")] string tag) { var expected = new SkipWhileUnit(new UnitPattern(typeof(IDisposable), tag)); // --arrange var tree = new BuildChainPatternTree(); var target = new RootTuner(tree); // --act target.Building <IDisposable>(tag); // --assert tree.Children.Single().Should().BeEquivalentTo(expected); }
public void treat_open_generic([Values(null, "tag")] string tag) { var expected = new SkipWhileUnit(new IsGenericOfDefinition(typeof(List <>), tag)); // --arrange var tree = new BuildChainPatternTree(); var target = new RootTuner(tree); // --act var tuner = target.TreatOpenGeneric(typeof(List <>), tag); // --assert tree.Children.Single().Should().BeEquivalentTo(expected); tuner.Should().BeOfType <TreatingOpenGenericTuner>(); }
public void amend_weight([Values(null, "tag")] string tag) { const int weight = 3875; var expected = new SkipWhileUnit(new UnitPattern(typeof(IDisposable), tag), weight); // --arrange var tree = new BuildChainPatternTree(); var target = new RootTuner(tree); // --act target.Building <IDisposable>(tag) .AmendWeight(weight); // --assert tree.Children.Single().Should().BeEquivalentTo(expected); }
public void should_add_self_weight_to_input_weight() { const string kind = "kind"; const int patternWeight = 39; const int inputWeight = 21; // --arrange var target = new SkipWhileUnit(new UnitPattern(kind), patternWeight); var child1 = A.Fake <IBuildChainPattern>(); var child2 = A.Fake <IBuildChainPattern>(); target.AddNode(child1); target.AddNode(child2); // --act var chain = new[] { new UnitId(kind, null), new UnitId(kind, null), new UnitId("not" + kind, null) }.ToArrayTail(); target.GatherBuildActions(chain, out var actionBag, inputWeight); // --assert A.CallTo(() => child1.GatherBuildActions(An <BuildChain> ._, out actionBag, inputWeight + patternWeight)).MustHaveHappenedOnceAndOnly(); A.CallTo(() => child2.GatherBuildActions(An <BuildChain> ._, out actionBag, inputWeight + patternWeight)).MustHaveHappenedOnceAndOnly(); }