public void when_visiting_root_then_visits_all_delegates() { var calledMethod = this.GetType().GetMethod("Called", BindingFlags.Instance | BindingFlags.NonPublic); var delegates = new VisitorDelegates(); foreach (var prop in typeof(VisitorDelegates).GetProperties()) { var actionTypeParam = prop.PropertyType.GetGenericArguments()[0]; var expression = Expression.Lambda( prop.PropertyType, Expression.Call(Expression.Constant(this), calledMethod, Expression.Constant(prop)), Expression.Parameter(actionTypeParam)); prop.SetValue(delegates, expression.Compile()); } var members = DocReader.Read(typeof(Sample).Assembly); members.Accept(new DelegateVisitor(delegates)); foreach (var prop in typeof(VisitorDelegates).GetProperties()) { if (prop == Reflect <VisitorDelegates> .GetProperty(x => x.VisitUnknownMember)) { continue; } Assert.True(calls.GetOrAdd(prop, 0) > 0, string.Format("Delegate on {0} was not called.", prop.Name)); } }
public void when_reading_unknown_member_then_marks_as_unknown() { var xml = Path.GetTempFileName(); File.WriteAllText(xml, @"<doc> <members> <member name='!:Error'> <summary> blah </summary> </member> </members> </doc>"); var member = DocReader.Read(xml).Elements.OfType <UnknownMember>().FirstOrDefault(); Assert.NotNull(member); Assert.Equal(MemberKinds.Unknown, member.Kind); var visited = default(UnknownMember); var delegates = new VisitorDelegates { VisitUnknownMember = x => visited = x }; member.Accept(new DelegateVisitor(delegates)); Assert.Same(member, visited); }
public void when_visiting_root_then_visits_all_delegates() { var calledMethod = this.GetType().GetMethod("Called", BindingFlags.Instance | BindingFlags.NonPublic); var delegates = new VisitorDelegates(); foreach (var prop in typeof(VisitorDelegates).GetProperties()) { var actionTypeParam = prop.PropertyType.GetGenericArguments()[0]; var expression = Expression.Lambda( prop.PropertyType, Expression.Call(Expression.Constant(this), calledMethod, Expression.Constant(prop)), Expression.Parameter(actionTypeParam)); prop.SetValue(delegates, expression.Compile()); } var members = DocReader.Read(typeof(Sample).Assembly); members.Accept(new DelegateVisitor(delegates)); foreach (var prop in typeof(VisitorDelegates).GetProperties()) { if (prop == Reflect<VisitorDelegates>.GetProperty(x => x.VisitUnknownMember)) continue; Assert.True(calls.GetOrAdd(prop, 0) > 0, string.Format("Delegate on {0} was not called.", prop.Name)); } }
public void when_reading_unknown_member_then_marks_as_unknown() { var xml = Path.GetTempFileName(); File.WriteAllText(xml, @"<doc> <members> <member name='!:Error'> <summary> blah </summary> </member> </members> </doc>"); var member = DocReader.Read(xml).Elements.OfType<UnknownMember>().FirstOrDefault(); Assert.NotNull(member); Assert.Equal(MemberKinds.Unknown, member.Kind); var visited = default(UnknownMember); var delegates = new VisitorDelegates { VisitUnknownMember = x => visited = x }; member.Accept(new DelegateVisitor(delegates)); Assert.Same(member, visited); }
/// <summary> /// Initializes a new instance of the <see cref="DelegateVisitor"/> class. /// </summary> /// <param name="delegates">The delegates to use when visiting the model.</param> public DelegateVisitor(VisitorDelegates delegates) { this.delegates = delegates; }