42 changed files with 577 additions and 192 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