public void VisitFieldInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector();
            var constructorInfoElement = typeof(ClassWithMembers).GetConstructors().First().ToElement();
            var fieldInfoElement = new Fields<ClassWithMembers>().Select(x => x.PublicField).ToElement();

            var actual = sut.Visit(constructorInfoElement).Visit(fieldInfoElement);

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.InstanceConstructor, MemberKinds.InstanceField }, actual.Value);
        }
        public void VisitEventInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector();
            var fieldInfoElement = new Fields<ClassWithMembers>().Select(x => x.PublicField).ToElement();
            var eventInfoElement = typeof(ClassWithMembers)
                .GetEvents(BindingFlags.Instance | BindingFlags.Public)
                .First().ToElement();

            var actual = sut.Visit(fieldInfoElement).Visit(eventInfoElement);

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.InstanceField, MemberKinds.InstanceEvent }, actual.Value);
        }
        public void VisitGetSetPropertyInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector();
            var fieldInfoElement = new Fields<ClassWithMembers>().Select(x => x.PublicField).ToElement();
            var getSetPropertyInfoElement = typeof(ClassWithMembers)
                .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                .First(p => p.GetGetMethod(true) != null && p.GetSetMethod(true) != null)
                .ToElement();

            var actual = sut.Visit(fieldInfoElement).Visit(getSetPropertyInfoElement);

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.InstanceField, MemberKinds.InstanceProperty }, actual.Value);
        }
        public void VisitStaticSetPropertyInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector(new[] { MemberKinds.InstanceField });
            var setPropertyInfoElement = typeof(ClassWithMembers)
                .GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                .First(p => p.GetGetMethod(true) == null && p.GetSetMethod(true) != null)
                .ToElement();

            var actual = sut.Visit(setPropertyInfoElement);

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.InstanceField, MemberKinds.StaticSetProperty }, actual.Value);
        }
        public void VisitStaticMethodInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector(new[] { MemberKinds.InstanceField });
            var methodInfoElement = typeof(ClassWithMembers)
                .GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                .First().ToElement();

            var actual = sut.Visit(methodInfoElement);

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.InstanceField, MemberKinds.StaticMethod }, actual.Value);
        }
        public void VisitStaticConstructorInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector(new[] { MemberKinds.StaticEvent });
            var constructorInfoElement = typeof(ClassWithMembers)
                .GetConstructors(BindingFlags.Static | BindingFlags.NonPublic)
                .First().ToElement();

            var actual = sut.Visit(constructorInfoElement);

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.StaticEvent, MemberKinds.StaticConstructor }, actual.Value);
        }
 public void VisitNullPropertyInfoElementThrows()
 {
     var sut = new MemberKindCollector();
     Assert.Throws<ArgumentNullException>(() => sut.Visit((PropertyInfoElement)null));
 }