3 changed files with 252 additions and 7 deletions
@ -0,0 +1,221 @@ |
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel; |
|||
using System.Globalization; |
|||
using System.Reflection; |
|||
using Moq; |
|||
|
|||
namespace Avalonia.Markup.UnitTests.Data; |
|||
|
|||
class DynamicReflectableType : IReflectableType, INotifyPropertyChanged, IEnumerable<KeyValuePair<string, object>> |
|||
{ |
|||
private Dictionary<string, object> _dic = new(); |
|||
|
|||
public TypeInfo GetTypeInfo() |
|||
{ |
|||
return new FakeTypeInfo(); |
|||
} |
|||
|
|||
public void Add(string key, object value) |
|||
{ |
|||
_dic.Add(key, value); |
|||
|
|||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(key)); |
|||
} |
|||
|
|||
public object this[string key] |
|||
{ |
|||
get => _dic[key]; |
|||
set |
|||
{ |
|||
_dic[key] = value; |
|||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(key)); |
|||
} |
|||
} |
|||
|
|||
public event PropertyChangedEventHandler PropertyChanged; |
|||
public IEnumerator<KeyValuePair<string, object>> GetEnumerator() |
|||
{ |
|||
return _dic.GetEnumerator(); |
|||
} |
|||
|
|||
IEnumerator IEnumerable.GetEnumerator() |
|||
{ |
|||
return ((IEnumerable)_dic).GetEnumerator(); |
|||
} |
|||
|
|||
|
|||
class FakeTypeInfo : TypeInfo |
|||
{ |
|||
protected override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, |
|||
ParameterModifier[] modifiers) |
|||
{ |
|||
var propInfo = new Mock<PropertyInfo>(); |
|||
propInfo.SetupGet(x => x.Name).Returns(name); |
|||
propInfo.SetupGet(x => x.PropertyType).Returns(typeof(object)); |
|||
propInfo.SetupGet(x => x.CanWrite).Returns(true); |
|||
propInfo.Setup(x => x.GetValue(It.IsAny<object>(), It.IsAny<object[]>())) |
|||
.Returns((object target, object [] _) => ((DynamicReflectableType)target)._dic.GetValueOrDefault(name)); |
|||
propInfo.Setup(x => x.SetValue(It.IsAny<object>(), It.IsAny<object>(), It.IsAny<object[]>())) |
|||
.Callback((object target, object value, object [] _) => |
|||
{ |
|||
((DynamicReflectableType)target)._dic[name] = value; |
|||
}); |
|||
return propInfo.Object; |
|||
} |
|||
|
|||
#region NotSupported
|
|||
|
|||
|
|||
public override object[] GetCustomAttributes(bool inherit) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override object[] GetCustomAttributes(Type attributeType, bool inherit) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override bool IsDefined(Type attributeType, bool inherit) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Module Module { get; } |
|||
public override string Namespace { get; } |
|||
public override string Name { get; } |
|||
protected override TypeAttributes GetAttributeFlagsImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, |
|||
Type[] types, ParameterModifier[] modifiers) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Type GetElementType() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override EventInfo GetEvent(string name, BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override EventInfo[] GetEvents(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override FieldInfo GetField(string name, BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override FieldInfo[] GetFields(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
protected override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, |
|||
Type[] types, ParameterModifier[] modifiers) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override MethodInfo[] GetMethods(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override PropertyInfo[] GetProperties(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, |
|||
ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Type UnderlyingSystemType { get; } |
|||
|
|||
protected override bool IsArrayImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
protected override bool IsByRefImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
protected override bool IsCOMObjectImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
protected override bool IsPointerImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
protected override bool IsPrimitiveImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Assembly Assembly { get; } |
|||
public override string AssemblyQualifiedName { get; } |
|||
public override Type BaseType { get; } |
|||
public override string FullName { get; } |
|||
public override Guid GUID { get; } |
|||
|
|||
|
|||
|
|||
protected override bool HasElementTypeImpl() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Type GetNestedType(string name, BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Type[] GetNestedTypes(BindingFlags bindingAttr) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Type GetInterface(string name, bool ignoreCase) |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
public override Type[] GetInterfaces() |
|||
{ |
|||
throw new NotSupportedException(); |
|||
} |
|||
|
|||
|
|||
#endregion
|
|||
|
|||
} |
|||
} |
|||
Loading…
Reference in new issue