You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.2 KiB
C#
75 lines
2.2 KiB
C#
1 year ago
|
using System;
|
||
|
using System.Reflection;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine.EventSystems;
|
||
|
using UnityEditor;
|
||
|
using NUnit.Framework;
|
||
|
|
||
|
public class InterceptedEventsPreviewTests
|
||
|
{
|
||
|
[Test]
|
||
|
public void InterceptedEventsPreviewCacheUsingTypeCacheReturnsSameTypes()
|
||
|
{
|
||
|
var typeCacheEventInterfaces = new List<Type>();
|
||
|
TypeCache.TypeCollection types = TypeCache.GetTypesDerivedFrom<IEventSystemHandler>();
|
||
|
foreach (var type in types)
|
||
|
{
|
||
|
if (!type.IsInterface)
|
||
|
continue;
|
||
|
|
||
|
typeCacheEventInterfaces.Add(type);
|
||
|
}
|
||
|
|
||
|
var appDomainEventInterfaces = new List<Type>();
|
||
|
foreach (var type in GetAccessibleTypesInLoadedAssemblies())
|
||
|
{
|
||
|
if (!type.IsInterface)
|
||
|
continue;
|
||
|
|
||
|
appDomainEventInterfaces.Add(type);
|
||
|
}
|
||
|
|
||
|
Assert.AreNotEqual(typeCacheEventInterfaces.Count, appDomainEventInterfaces.Count, "Did not find the same number of EventInterface types");
|
||
|
|
||
|
for (int i = 0; i < typeCacheEventInterfaces.Count; ++i)
|
||
|
{
|
||
|
Assert.Contains(typeCacheEventInterfaces[i], appDomainEventInterfaces);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static IEnumerable<Type> GetAccessibleTypesInLoadedAssemblies()
|
||
|
{
|
||
|
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
|
||
|
for (var i = 0; i < assemblies.Length; ++i)
|
||
|
{
|
||
|
Type[] types;
|
||
|
var assembly = assemblies[i];
|
||
|
|
||
|
if (assembly == null)
|
||
|
continue;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
types = assembly.GetTypes();
|
||
|
}
|
||
|
catch (ReflectionTypeLoadException e)
|
||
|
{
|
||
|
// assembly.GetTypes() might fail in case the Assembly cannot resolve all its references,
|
||
|
// or in case it was built targetting a newer version of .NET.
|
||
|
// In case the resolution fails for some types, we can still access the ones that have been
|
||
|
// properly loaded.
|
||
|
types = e.Types;
|
||
|
}
|
||
|
|
||
|
for (var j = 0; j < types.Length; ++j)
|
||
|
{
|
||
|
var type = types[j];
|
||
|
if (type == null)
|
||
|
continue;
|
||
|
|
||
|
yield return type;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|