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