예제 #1
0
 public void GetProperties_InternalConverter_When_Property_Is_Overridden_And_Base_Has_TypeConverterAttribute()
 {
     TypeConverterHelper.GetProperties(typeof(_MyClass2))[nameof(_MyClass2.ByteProperty)]
     .InternalConverter
     .Should()
     .BeNull();
 }
예제 #2
0
 public void GetProperties_InternalConverter_When_No_TypeConverterAttribute()
 {
     TypeConverterHelper.GetProperties(typeof(_MyType1))[nameof(_MyType1.IntProperty)]
     .InternalConverter
     .Should()
     .BeNull();
 }
예제 #3
0
 public void GetProperties_InternalConverter_When_TypeConverterAttribute()
 {
     TypeConverterHelper.GetProperties(typeof(_MyType3))[nameof(_MyType3.DateTimeProperty)]
     .InternalConverter
     .Should()
     .BeOfType <_MyDateTimeConverter>();
 }
예제 #4
0
 public void GetProperties_Converter_When_TypeConverterAttribute_And_PropertyType_Has_TypeConverter()
 {
     TypeConverterHelper.GetProperties(typeof(_MyClass3))[nameof(_MyClass3.ByteProperty)]
     .Converter
     .Should()
     .BeOfType <_MyByteConverter1>();
 }
예제 #5
0
 public void GetProperties_Converter_When_No_TypeConverterAttribute_And_PropertyType_Has_TypeConverter()
 {
     TypeConverterHelper.GetProperties(typeof(_MyType1))[nameof(_MyType1.IntProperty)]
     .Converter
     .Should()
     .BeSameAs(TypeConverterHelper.GetConverter(typeof(int)));
 }
예제 #6
0
 public void GetProperties_Converter_When_No_TypeConverterAttribute_And_PropertyType_Has_No_TypeConverter()
 {
     TypeConverterHelper.GetProperties(typeof(_MyClass5))[nameof(_MyClass5.MyType1Property)]
     .Converter
     .Should()
     .BeNull();
 }
예제 #7
0
        public static object GetPropertyValue(Type xamlType, string propertyName, string xamlValue, Func <object> fallbackValueFunc)
        {
            ReflectedPropertyData property = TypeConverterHelper.GetProperties(xamlType)[propertyName];

            if (property == null)
            {
                throw new InvalidOperationException(
                          $"Property '{propertyName}' was not found in type '{xamlType}'."
                          );
            }

            // Note: here we do not want to use the Converter property as it would return a non-null
            // converter for several known types for which object instantiation can be optimized at
            // compilation and we would waste time parsing strings.
            TypeConverter converter = property.InternalConverter;

            if (converter != null)
            {
                return(converter.ConvertFromInvariantString(xamlValue));
            }

            if (fallbackValueFunc != null)
            {
                return(fallbackValueFunc());
            }

            throw new InvalidOperationException(
                      $"Failed to create a '{property.PropertyType}' from the text '{xamlValue}'."
                      );
        }
예제 #8
0
        public void GetProperties_When_Property_Is_Overridden()
        {
            var properties = TypeConverterHelper.GetProperties(typeof(_MyClass2));

            properties.Should().HaveCount(1);
            properties[0].Name.Should().Be(nameof(_MyClass2.ByteProperty));
            properties[0].ComponentType.Should().BeSameAs(typeof(_MyClass2));
        }
예제 #9
0
        public void GetProperties_When_New_Property_Hides_Base_Property()
        {
            var properties = TypeConverterHelper.GetProperties(typeof(_MyType5));

            properties.Should().HaveCount(1);
            properties[0].Name.Should().Be(nameof(_MyType5.FloatProperty));
            properties[0].ComponentType.Should().BeSameAs(typeof(_MyType5));
        }
예제 #10
0
        public void GetProperties_Inheritance_1()
        {
            var properties = TypeConverterHelper.GetProperties(typeof(_MyType1));

            properties.Should().HaveCount(2);
            properties[nameof(_MyType1.IntProperty)].Should().NotBeNull();
            properties[nameof(_MyType1.DoubleProperty)].Should().NotBeNull();
        }
예제 #11
0
        public void GetProperties_Inheritance_3()
        {
            var properties = TypeConverterHelper.GetProperties(typeof(_MyType3));

            properties.Should().HaveCount(4);
            properties[nameof(_MyType1.IntProperty)].Should().NotBeNull();
            properties[nameof(_MyType1.DoubleProperty)].Should().NotBeNull();
            properties[nameof(_MyType2.StringProperty)].Should().NotBeNull();
            properties[nameof(_MyType3.DateTimeProperty)].Should().NotBeNull();
        }
예제 #12
0
 public void GetProperties_InternalConverter_Should_Be_Cached()
 {
     TypeConverterHelper.GetProperties(typeof(_MyType1))[nameof(_MyType1.IntProperty)]
     .InternalConverter
     .Should()
     .BeSameAs(
         TypeConverterHelper.GetProperties(typeof(_MyType1))[nameof(_MyType1.IntProperty)]
         .InternalConverter
         );
 }