public void Extension_Test()
        {
            var sut1 = new TestClass1();
            var sut2 = new TestClass2();
            var objs = new List <object>(new object[] { sut1, sut2 });

            // Get common properties
            var distinctProperties = objs.GetDistinctDisplayNames(pd =>
            {
                return(pd.Converter is BaseTypeConverter);
            });

            distinctProperties.ForEach(propertyName =>
            {
                var distinctStandardValues = objs.GetDistinctStandardValues(propertyName);
                var commonValue            = objs.GetCommonValue(propertyName);
                Assert.IsNull(commonValue);
            });

            sut1.ListValue = sut2.ListValue;

            distinctProperties.ForEach(propertyName =>
            {
                var distinctStandardValues = objs.GetDistinctStandardValues(propertyName);
                var commonValue            = objs.GetCommonValue(propertyName);
                Assert.AreEqual(sut1.ListValue, commonValue);
            });
        }
        public void Extension_GetPropertyInfos_Test()
        {
            var sut1 = new TestClass1();
            var sut2 = new TestClass2();

            var result1 = sut1.GetPropertyInfos();

            Assert.AreEqual(13, result1.Count);
            var result2 = sut2.GetPropertyInfos();

            Assert.AreEqual(11, result2.Count);

            result1 = sut1.GetPropertyInfos(pi => { return(pi.PropertyType == typeof(int)); });
            Assert.AreEqual(2, result1.Count);
        }
        public void Extension_GetPropertyDescriptors_Test()
        {
            var sut1 = new TestClass1();
            var sut2 = new TestClass2();

            var propDesc1 = sut1.GetPropertyDescriptors();

            Assert.AreEqual(13, propDesc1.Count);
            var propDesc2 = sut2.GetPropertyDescriptors();

            Assert.AreEqual(11, propDesc2.Count);

            propDesc1 = sut1.GetPropertyDescriptors(pd => { return(pd.IsBrowsable && !pd.IsReadOnly); });
            Assert.AreEqual(10, propDesc1.Count);
        }
        public void Extension_GetStandardValues_Test()
        {
            var sut      = new TestClass1();
            var sutProps = new List <object>(new object[] { sut }).GetDistinctDisplayNames();

            var pds = sut.GetPropertyDescriptors();

            pds.ForEach(pd =>
            {
                var values = sut.GetStandardValues(pd.DisplayName);

                if (pd.DisplayName == "ListValue" || pd.DisplayName == "DynamicProperty")
                {
                    Assert.AreEqual(5, values.Count);
                }
                else
                {
                    Assert.AreEqual(0, values.Count);
                }
            });
        }
        public void Extension_Invalid_Property_Test()
        {
            var sut = new TestClass1();

            Assert.IsNull(sut.GetPropertyValue <string>("foo"));
        }