public void GetPropertiesToActivate_IncludesNonPublic()
        {
            // Arrange
            var instance = new TestClassWithPropertyVisiblity();
            var typeInfo = instance.GetType().GetTypeInfo();

            // Act
            var propertiesToActivate = PropertyActivator <int> .GetPropertiesToActivate(
                typeof(TestClassWithPropertyVisiblity),
                typeof(TestActivateAttribute),
                (propertyInfo) => new PropertyActivator <int>(propertyInfo, valueAccessor : (val) => val),
                includeNonPublic : true);

            // Assert
            Assert.Equal(5, propertiesToActivate.Length);
        }
        public void GetPropertiesToActivate_ExcludesNonPublic()
        {
            // Arrange
            var instance             = new TestClassWithPropertyVisiblity();
            var typeInfo             = instance.GetType().GetTypeInfo();
            var expectedPropertyInfo = typeInfo.GetDeclaredProperty("Public");

            // Act
            var propertiesToActivate = PropertyActivator <int> .GetPropertiesToActivate(
                typeof(TestClassWithPropertyVisiblity),
                typeof(TestActivateAttribute),
                (propertyInfo) => new PropertyActivator <int>(propertyInfo, valueAccessor : (val) => val));

            // Assert
            Assert.Equal(1, propertiesToActivate.Length);
            Assert.Single(propertiesToActivate, p => p.PropertyInfo == expectedPropertyInfo);
        }
        public void GetPropertiesToActivate_CanCreateCustomPropertyActivators()
        {
            // Arrange
            var instance             = new TestClass();
            var typeInfo             = instance.GetType().GetTypeInfo();
            var expectedPropertyInfo = typeInfo.GetDeclaredProperty("IntProperty");

            // Act
            var propertiesToActivate = PropertyActivator <int> .GetPropertiesToActivate(
                type : typeof(TestClass),
                activateAttributeType : typeof(TestActivateAttribute),
                createActivateInfo :
                (propertyInfo) => new PropertyActivator <int>(expectedPropertyInfo, valueAccessor: (val) => val + 1));

            // Assert
            Assert.Collection(
                propertiesToActivate,
                (activator) =>
            {
                Assert.Equal(expectedPropertyInfo, activator.PropertyInfo);
            });
        }