Maze / Library /PackageCache /com.unity.test-framework@1.1.33 /UnityEngine.TestRunner /Utils /AttributeHelper.cs
| using System; | |
| using System.IO; | |
| using System.Linq; | |
| namespace UnityEngine.TestTools | |
| { | |
| internal static class AttributeHelper | |
| { | |
| internal static Type GetTargetClassFromName(string targetClassName, Type attributeInterface) | |
| { | |
| Type targetClass = null; | |
| foreach (var assemblyName in ScriptingRuntime.GetAllUserAssemblies()) | |
| { | |
| // we need to pass the assembly name without the .dll extension, so removing that first | |
| var name = Path.GetFileNameWithoutExtension(assemblyName); | |
| targetClass = Type.GetType(targetClassName + "," + name); | |
| if (targetClass != null) | |
| break; | |
| } | |
| if (targetClass == null) | |
| { | |
| Debug.LogWarningFormat("Class type not found: " + targetClassName); | |
| return null; | |
| } | |
| ValidateTargetClass(targetClass, attributeInterface); | |
| return targetClass; | |
| } | |
| private static void ValidateTargetClass(Type targetClass, Type attributeInterface) | |
| { | |
| var constructorInfos = targetClass.GetConstructors(); | |
| if (constructorInfos.All(constructor => constructor.GetParameters().Length != 0)) | |
| { | |
| Debug.LogWarningFormat("{0} does not implement default constructor", targetClass.Name); | |
| } | |
| if (!attributeInterface.IsAssignableFrom(targetClass)) | |
| { | |
| Debug.LogWarningFormat("{0} does not implement {1}", targetClass.Name, attributeInterface.Name); | |
| } | |
| } | |
| } | |
| } | |