Beispiel #1
0
 public void Rerurns_false_when_propery_name_is_not_repeated()
 {
     Assert.IsFalse(SelfReferenceDetection.DoesItLookLikeSelfReference("class.Prop.Date.property.Date.Date"));
     Assert.IsFalse(SelfReferenceDetection.DoesItLookLikeSelfReference("class.Prop.Date.property"));
     Assert.IsFalse(SelfReferenceDetection.DoesItLookLikeSelfReference("class.Prop"));
     Assert.IsFalse(SelfReferenceDetection.DoesItLookLikeSelfReference("class.class"));
     Assert.IsFalse(SelfReferenceDetection.DoesItLookLikeSelfReference("Prop.Date.date.Date"));
 }
        /// <summary>
        /// Traversal of Properties Tree (deep-fir, recursive)
        /// </summary>
        private void TraversPropertyTreeInternal(
            IVSDebugPropertyProxy debugProperty,
            StringFilter stringFilter,
            int depth)
        {
            depth++;
            if (depth > MaxDepth)
            {
                _searchStatus.StatusUpdated($"Skipping property: {debugProperty.PropertyInfo.FullName}. Max depth reached");
                return;
            }

            if (SelfReferenceDetection.DoesItLookLikeSelfReference(debugProperty.PropertyInfo.Name))
            {
                _searchStatus.StatusUpdated($"Skip traversing property {debugProperty.PropertyInfo.FullName}. Property looks like referece to self object");
                return;
            }

            ThrowIfCancelRequested();

            _logger.Info("Traversing property {0}", debugProperty.PropertyInfo.FullName);
            // visit root
            RiseAppropriateAction(debugProperty.PropertyInfo, stringFilter);

            // travers all children
            foreach (IPropertyInfo unevalProperty in debugProperty.Children)
            {
                ThrowIfCancelRequested();

                IVSDebugPropertyProxy evaluated = EvaluateExpression(unevalProperty);

                // null in case we can skip that property
                if (evaluated == null)
                {
                    continue;
                }

                var valueProperty = evaluated.PropertyInfo as IValuePropertyInfo;

                if (valueProperty != null)
                {
                    RiseAppropriateAction(valueProperty, stringFilter);
                }
                else if (evaluated.PropertyInfo is IExpandablePropertyInfo)
                {
                    TraversPropertyTreeInternal(evaluated, stringFilter, depth);
                }
                else
                {
                    throw new NotSupportedException($"Property info type { evaluated.PropertyInfo.GetType().Name } is not supported. Contact developer.");
                }
            }
        }
Beispiel #3
0
 public void Returns_true_when_property_name_is_repeated()
 {
     Assert.IsTrue(SelfReferenceDetection.DoesItLookLikeSelfReference("property.Date.Date.Date.Date"));
     Assert.IsTrue(SelfReferenceDetection.DoesItLookLikeSelfReference("property.Date.Date.Date.Date.Date"));
 }