/// <summary> /// Initializes a new instance of the <see cref="ParentEqualityRule{TParent, TValue}"/> class. /// </summary> /// <param name="valueProvider">A service which gets the value to be compared from the parent object.</param> /// <param name="valueRule">A equality rule which tests the 'child' value.</param> public ParentEqualityRule(IGetsValueFromParent <TParent, TValue> valueProvider, IEqualityRule <TValue> valueRule) { this.valueProvider = valueProvider ?? throw new ArgumentNullException(nameof(valueProvider)); this.valueRule = valueRule ?? throw new ArgumentNullException(nameof(valueRule)); resultFactory = new EqualityResultFactory(); }
public void GetHashCode_gets_hash_code_from_every_rule(IEqualityRule <string> rule1, IEqualityRule <string> rule2, string str) { var sut = new MultipleEqualityRuleRunner <string>(new [] { rule1, rule2 }); sut.GetHashCode(str); Mock.Get(rule1).Verify(x => x.GetHashCode(str), Times.Once); Mock.Get(rule2).Verify(x => x.GetHashCode(str), Times.Once); }
public void GetEqualityResult_returns_false_result_if_any_rule_fails(IEqualityRule <string> rule1, IEqualityRule <string> rule2, string a, string b) { var sut = new MultipleEqualityRuleRunner <string>(new [] { rule1, rule2 }); Mock.Get(rule1) .Setup(x => x.GetEqualityResult(a, b)) .Returns(new EqualityResult(true, new[] { new EqualityRuleResult("Rule 1", true), })); Mock.Get(rule2) .Setup(x => x.GetEqualityResult(a, b)) .Returns(new EqualityResult(true, new[] { new EqualityRuleResult("Rule 2", false), })); var result = sut.GetEqualityResult(a, b); Assert.That(result?.AreEqual, Is.False); }
public void GetEqualityResult_returns_rule_result_for_each_rule(IEqualityRule <string> rule1, IEqualityRule <string> rule2, string a, string b) { var sut = new MultipleEqualityRuleRunner <string>(new [] { rule1, rule2 }); Mock.Get(rule1) .Setup(x => x.GetEqualityResult(a, b)) .Returns(new EqualityResult(true, new[] { new EqualityRuleResult("Rule 1", true), })); Mock.Get(rule2) .Setup(x => x.GetEqualityResult(a, b)) .Returns(new EqualityResult(true, new[] { new EqualityRuleResult("Rule 2", true), })); var result = sut.GetEqualityResult(a, b); Assert.That(result?.RuleResults?.Select(x => x.Name), Is.EquivalentTo(new [] { "Rule 1", "Rule 2" })); }
/// <summary> /// Initializes a new instance of the <see cref="RuleNameChangingDecorator{T}"/> class. /// </summary> /// <param name="wrapped">The wrapped equality rule.</param> /// <param name="nameTransformer">A function which transforms the rule name.</param> public RuleNameChangingDecorator(IEqualityRule <T> wrapped, Func <string, string> nameTransformer) { this.wrapped = wrapped ?? throw new ArgumentNullException(nameof(wrapped)); this.nameTransformer = nameTransformer ?? throw new ArgumentNullException(nameof(nameTransformer)); resultFactory = new EqualityResultFactory(); }
public void GetHashCode_uses_value_provider_to_get_value_and_passes_to_wrapped_rule([Frozen] IGetsValueFromParent <EmptyClass, string> valueProvider, [Frozen] IEqualityRule <string> rule, ParentEqualityRule <EmptyClass, string> sut, EmptyClass obj, string str, int hashCode) { Mock.Get(valueProvider).Setup(x => x.GetValue(obj)).Returns(str); Mock.Get(rule).Setup(x => x.GetHashCode(str)).Returns(hashCode); var result = sut.GetHashCode(obj); Mock.Get(rule).Verify(x => x.GetHashCode(str), Times.Once); Assert.That(result, Is.EqualTo(hashCode)); }
public void Equals_uses_value_provider_to_get_values_and_passes_to_wrapped_rule([Frozen] IGetsValueFromParent <EmptyClass, string> valueProvider, [Frozen] IEqualityRule <string> rule, ParentEqualityRule <EmptyClass, string> sut, EmptyClass obj1, EmptyClass obj2, string str1, string str2) { Mock.Get(valueProvider).Setup(x => x.GetValue(obj1)).Returns(str1); Mock.Get(valueProvider).Setup(x => x.GetValue(obj2)).Returns(str2); Mock.Get(rule).Setup(x => x.GetEqualityResult(str1, str2)).Returns(EqualityResult.Equal); var result = sut.Equals(obj1, obj2); Mock.Get(rule).Verify(x => x.GetEqualityResult(str1, str2), Times.Once); Assert.That(result, Is.True); }