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)); }
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)); }
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); }