public void ValueIsCorrectWhenInitializedWithMemberKinds()
        {
            var memberKinds = new[] { MemberKinds.InstanceProperty, MemberKinds.StaticField };
            var sut = new MemberKindCollector(memberKinds);

            var actual = sut.Value;

            Assert.Equal(memberKinds, actual);
        }
        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 VisitGetPropertyInfoElementCollectsCorrectMemberKind()
        {
            var sut = new MemberKindCollector();
            var fieldInfoElement = new Fields<ClassWithMembers>().Select(x => x.PublicField).ToElement();
            var getPropertyInfoElement = typeof(ClassWithMembers)
                .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                .First(p => p.GetSetMethod(true) == null && p.GetGetMethod(true) != null)
                .ToElement();

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

            Assert.NotSame(sut, actual);
            Assert.Equal(new[] { MemberKinds.InstanceField, MemberKinds.InstanceGetProperty }, 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 ValueIsCorrect()
 {
     var sut = new MemberKindCollector();
     var actual = sut.Value;
     Assert.Empty(actual);
 }
        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));
 }
 public void SutIsReflectionVisitor()
 {
     var sut = new MemberKindCollector();
     Assert.IsAssignableFrom<IReflectionVisitor<IEnumerable<MemberKinds>>>(sut);
 }