public void MergeWithLeftMultipleEntriesReturnsCorrectEntries()
        {
            var stat  = Mock.Of <IStatBuilder>();
            var form1 = Mock.Of <IFormBuilder>();
            var leftAndRightCondition = Mock.Of <IConditionBuilder>();
            var rightCondition        = Mock.Of <IConditionBuilder>();
            var leftCondition         = Mock.Of <IConditionBuilder>(
                c => c.And(rightCondition) == leftAndRightCondition);
            var rightEntry = EmptyEntry
                             .WithStat(stat)
                             .WithCondition(rightCondition);
            var left = CreateResult(
                EmptyEntry.WithCondition(leftCondition),
                EmptyEntry.WithForm(form1),
                EmptyEntry);
            var right    = CreateResult(rightEntry);
            var expected = new[]
            {
                EmptyEntry.WithStat(stat).WithCondition(leftAndRightCondition),
                EmptyEntry.WithForm(form1).WithStat(stat).WithCondition(rightCondition),
                EmptyEntry.WithStat(stat).WithCondition(rightCondition)
            };

            var result = left.MergeWith(right);

            CollectionAssert.AreEqual(expected, result.Entries);
        }
        public void MergeWithBothSingleEntryAndValueInBothThrows()
        {
            var entryLeft  = DefaultEntry;
            var entryRight = EmptyEntry
                             .WithValue(Mock.Of <IValueBuilder>());
            var left  = CreateResult(entryLeft);
            var right = CreateResult(entryRight);

            Assert.Throws <ArgumentException>(() => left.MergeWith(right));
        }
Ejemplo n.º 3
0
        public void BuildReturnsCorrectModifiers()
        {
            var conditionBuilder = Mock.Of <IConditionBuilder>();

            var value                     = Mock.Of <IValue>();
            var valueBuilder              = Mock.Of <IValueBuilder>();
            var convertedValueBuilder     = Mock.Of <IValueBuilder>();
            var statConvertedValueBuilder = Mock.Of <IValueBuilder>();
            var formConvertedValueBuilder = Mock.Of <IValueBuilder>(b => b.Build() == value);

            var stats  = new[] { Mock.Of <IStat>() };
            var source = new ModifierSource.Local.Given();

            IValueBuilder StatConvertValue(IValueBuilder v) =>
            v == convertedValueBuilder ? statConvertedValueBuilder : v;

            var statBuilderMock = new Mock <IStatBuilder>();

            statBuilderMock.Setup(b => b.Build()).Returns((stats, _ => source, StatConvertValue));
            var statBuilderWithCondition = statBuilderMock.Object;
            var statBuilder          = Mock.Of <IStatBuilder>();
            var convertedStatBuilder =
                Mock.Of <IStatBuilder>(s => s.WithCondition(conditionBuilder) == statBuilderWithCondition);

            var form = Form.More;

            IValueBuilder FormConvertValue(IValueBuilder v) =>
            v == statConvertedValueBuilder ? formConvertedValueBuilder : v;

            var formBuilderMock = new Mock <IFormBuilder>();

            formBuilderMock.Setup(b => b.Build()).Returns((form, FormConvertValue));
            var formBuilder = formBuilderMock.Object;

            var entry = EmptyEntry
                        .WithStat(statBuilder)
                        .WithForm(formBuilder)
                        .WithValue(valueBuilder)
                        .WithCondition(conditionBuilder);

            var input = CreateResult(
                new[] { entry },
                s => s == statBuilder ? convertedStatBuilder : s,
                v => v == valueBuilder ? convertedValueBuilder : v);

            var result = input.Build(Source);

            Assert.AreEqual(1, result.Count);
            var item = result[0];

            Assert.AreEqual(stats, item.Stats);
            Assert.AreEqual(form, item.Form);
            Assert.AreEqual(value, item.Value);
            Assert.AreSame(source, item.Source);
        }
        public void MergeWithBothSingleEntryAndConditionInBothAndsConditions()
        {
            var expected       = Mock.Of <IConditionBuilder>();
            var rightCondition = Mock.Of <IConditionBuilder>();
            var leftCondition  = Mock.Of <IConditionBuilder>(c => c.And(rightCondition) == expected);
            var entryLeft      = EmptyEntry
                                 .WithCondition(leftCondition);
            var entryRight = CreateFilledEntry(condition: rightCondition);
            var left       = CreateResult(entryLeft);
            var right      = CreateResult(entryRight);

            var result = left.MergeWith(right);

            Assert.AreEqual(expected, result.Entries.Single().Condition);
        }
        public void MergeWithDoesNotSwapLeftAndRight()
        {
            var expected       = Mock.Of <IConditionBuilder>();
            var rightCondition = Mock.Of <IConditionBuilder>();
            var leftCondition  = Mock.Of <IConditionBuilder>(
                c => c.And(rightCondition) == expected);
            var leftEntry  = EmptyEntry.WithCondition(leftCondition);
            var left       = CreateResult(leftEntry, leftEntry);
            var rightEntry = EmptyEntry.WithCondition(rightCondition);
            var right      = CreateResult(rightEntry);

            var result = left.MergeWith(right);
            var actual = result.Entries[0].Condition;

            Assert.AreEqual(expected, actual);
        }
        public void BuildThrowsForLocalTotalOverride()
        {
            var statBuilderResult =
                new StatBuilderResult(new IStat[0], new ModifierSource.Local.Skill(), Funcs.Identity);
            var statBuilder = Mock.Of <IStatBuilder>(
                b => b.Build(It.IsAny <BuildParameters>()) == new[] { statBuilderResult });
            var formBuilderMock = new Mock <IFormBuilder>();

            formBuilderMock.Setup(b => b.Build()).Returns((Form.TotalOverride, (ValueConverter)Funcs.Identity));
            var formBuilder = formBuilderMock.Object;
            var entry       = EmptyEntry
                              .WithStat(statBuilder)
                              .WithForm(formBuilder)
                              .WithValue(Mock.Of <IValueBuilder>());
            var input = CreateResult(entry);

            Assert.Throws <ArgumentException>(() => input.Build(Source, Entity));
        }
Ejemplo n.º 7
0
        public void BuildUsesGlobalForLocalTotalOverride()
        {
            var statBuilderResult =
                new StatBuilderResult(new IStat[0], new ModifierSource.Local.Skill(""), Funcs.Identity);
            var statBuilder = Mock.Of <IStatBuilder>(
                b => b.Build(It.IsAny <BuildParameters>()) == new[] { statBuilderResult });
            var formBuilderMock = new Mock <IFormBuilder>();

            formBuilderMock.Setup(b => b.Build()).Returns((Form.TotalOverride, (ValueConverter)Funcs.Identity));
            var formBuilder = formBuilderMock.Object;
            var entry       = EmptyEntry
                              .WithStat(statBuilder)
                              .WithForm(formBuilder)
                              .WithValue(Mock.Of <IValueBuilder>());
            var input = CreateResult(entry);

            var actual = input.Build(Source, Entity);

            Assert.IsInstanceOf <ModifierSource.Global>(actual.Single().Source);
        }