/// <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" }));
        }
Exemplo n.º 5
0
 /// <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();
 }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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);
        }