Beispiel #1
0
        /// <summary>
        /// Perform recursive property comparison of the child properties for objects that are of incompatible type.
        /// </summary>
        /// <param name="cyclicReferenceHandling">
        /// Indication of how cyclic references in the nested properties should be handled. By default this will result in an
        /// exception, but if <see cref="CyclicReferenceHandling.Ignore"/> is specified, cyclic references will just be ignored.
        /// </param>
        public PropertyAssertions <T> IncludingNestedObjects(
            CyclicReferenceHandling cyclicReferenceHandling = CyclicReferenceHandling.ThrowException)
        {
            config.IncludingNestedObjects();

            if (cyclicReferenceHandling == CyclicReferenceHandling.Ignore)
            {
                config.IgnoringCyclicReferences();
            }

            return(this);
        }
Beispiel #2
0
        /// <summary>
        /// Creates an instance of the equivalency assertions options based on defaults previously configured by the caller.
        /// </summary>
        protected SelfReferenceEquivalencyAssertionOptions(IEquivalencyAssertionOptions defaults)
        {
            allowInfiniteRecursion  = defaults.AllowInfiniteRecursion;
            isRecursive             = defaults.IsRecursive;
            cyclicReferenceHandling = defaults.CyclicReferenceHandling;
            allowInfiniteRecursion  = defaults.AllowInfiniteRecursion;
            enumEquivalencyHandling = defaults.EnumEquivalencyHandling;
            useRuntimeTyping        = defaults.UseRuntimeTyping;
            includeProperties       = defaults.IncludeProperties;
            includeFields           = defaults.IncludeFields;

            selectionRules.AddRange(defaults.SelectionRules);
            userEquivalencySteps.AddRange(defaults.UserEquivalencySteps);
            matchingRules.AddRange(defaults.MatchingRules);
            orderingRules = new OrderingRuleCollection(defaults.OrderingRules);

            RemoveSelectionRule <AllPublicPropertiesSelectionRule>();
            RemoveSelectionRule <AllPublicFieldsSelectionRule>();
        }
        /// <summary>
        ///     Creates an instance of the equivalency assertions options based on defaults previously configured by the caller.
        /// </summary>
        protected SelfReferenceEquivalencyAssertionOptions(IEquivalencyAssertionOptions defaults)
        {
            isRecursive             = defaults.IsRecursive;
            cyclicReferenceHandling = defaults.CyclicReferenceHandling;
            allowInfiniteRecursion  = defaults.AllowInfiniteRecursion;
            enumEquivalencyHandling = defaults.EnumEquivalencyHandling;
            useRuntimeTyping        = defaults.UseRuntimeTyping;
            includeProperties       = defaults.IncludeProperties;
            includeFields           = defaults.IncludeFields;

            selectionRules.AddRange(defaults.SelectionRules);
            userEquivalencySteps.AddRange(defaults.UserEquivalencySteps);
            matchingRules.AddRange(defaults.MatchingRules);
            orderingRules      = new OrderingRuleCollection(defaults.OrderingRules);
            ConversionSelector = defaults.ConversionSelector.Clone();

            getDefaultEqualityStrategy = defaults.GetEqualityStrategy;
            TraceWriter = defaults.TraceWriter;

            RemoveSelectionRule <AllPublicPropertiesSelectionRule>();
            RemoveSelectionRule <AllPublicFieldsSelectionRule>();
        }
        /// <summary>
        /// Creates an instance of the equivalency assertions options based on defaults previously configured by the caller.
        /// </summary>
        protected EquivalencyAssertionOptionsBase(IEquivalencyAssertionOptions defaults)
        {
            allowInfiniteRecursion  = defaults.AllowInfiniteRecursion;
            isRecursive             = defaults.IsRecursive;
            cyclicReferenceHandling = defaults.CyclicReferenceHandling;
            allowInfiniteRecursion  = defaults.AllowInfiniteRecursion;
            enumEquivalencyHandling = defaults.EnumEquivalencyHandling;
            useRuntimeTyping        = defaults.UseRuntimeTyping;
            includeProperties       = defaults.IncludeProperties;
            includeFields           = defaults.IncludeFields;

            selectionRules.AddRange(defaults.SelectionRules.Where(IsNotStandardSelectionRule));

            if (IncludesIncludingSelectionRule(defaults.SelectionRules))
            {
                mustAddSelectionRules = false;
            }

            userEquivalencySteps.AddRange(defaults.UserEquivalencySteps);
            matchingRules.AddRange(defaults.MatchingRules);
            orderingRules = new OrderingRuleCollection(defaults.OrderingRules);
        }
 /// <summary>
 ///     Causes the structural equality check to ignore any cyclic references.
 /// </summary>
 /// <remarks>
 ///     By default, cyclic references within the object graph will cause an exception to be thrown.
 /// </remarks>
 public TSelf IgnoringCyclicReferences()
 {
     cyclicReferenceHandling = CyclicReferenceHandling.Ignore;
     return((TSelf)this);
 }
Beispiel #6
0
 /// <summary>
 /// Causes the structural equality check to ignore any cyclic references.
 /// </summary>
 /// <remarks>
 /// By default, cyclic references within the object graph will cause an exception to be thrown.
 /// </remarks>
 public EquivalencyAssertionOptions <TSubject> IgnoringCyclicReferences()
 {
     cyclicReferenceHandling = CyclicReferenceHandling.Ignore;
     return(this);
 }
Beispiel #7
0
 public ComparisonConfiguration <TSubject> IgnoreCyclicReferences()
 {
     cyclicReferenceHandling = CyclicReferenceHandling.Ignore;
     return(this);
 }
Beispiel #8
0
 public ObjectTracker(CyclicReferenceHandling handling)
 {
     this.handling = handling;
 }
 public CyclicReferenceDetector(CyclicReferenceHandling handling)
 {
     this.handling = handling;
 }
 public ObjectTracker(CyclicReferenceHandling handling)
 {
     this.handling = handling;
 }