Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
    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>();
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
    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();
    }