in unity/EditorPlugin/UnitTesting/ClientControllerWrapper.cs [13:85]
public static ClientControllerWrapper TryCreate(string sessionId, UnitTestLaunchClientControllerInfo clientControllerInfo)
{
if (clientControllerInfo == null)
{
ourLogger.Verbose($"ClientController not specified (SessionId={sessionId})");
return null;
}
ourLogger.Verbose($"ClientController specified (SessionId={sessionId}): {clientControllerInfo.TypeName}, {clientControllerInfo.CodeBase}");
try
{
if (clientControllerInfo.CodeBaseDependencies != null)
foreach (var dependency in clientControllerInfo.CodeBaseDependencies)
{
ourLogger.Trace("Loading assembly from '{0}'", dependency);
Assembly.LoadFrom(dependency);
}
ourLogger.Trace("Loading assembly from '{0}'", clientControllerInfo.CodeBase);
var assembly = Assembly.LoadFrom(clientControllerInfo.CodeBase);
var type = assembly.GetType(clientControllerInfo.TypeName);
if (type == null)
{
ourLogger.Error("Type '{0}' not found in assembly '{1}'", clientControllerInfo.TypeName, assembly.FullName);
return null;
}
ourLogger.Trace("ClientController type found: {0}", type.AssemblyQualifiedName);
var clientController = Activator.CreateInstance(type, sessionId);
var onSessionStartedMethodInfo = type.GetMethod("OnSessionStarted", BindingFlags.Instance | BindingFlags.Public);
if (onSessionStartedMethodInfo == null)
{
ourLogger.Error("OnSessionStarted method not found in ClientController of type='{0}'", type.AssemblyQualifiedName);
return null;
}
var onTestStartedMethodInfo = type.GetMethod("OnTestStarted", BindingFlags.Instance | BindingFlags.Public);
if (onTestStartedMethodInfo == null)
{
ourLogger.Error("OnTestStarted method not found in ClientController of type='{0}'", type.AssemblyQualifiedName);
return null;
}
var onTestFinishedMethodInfo = type.GetMethod("OnTestFinished", BindingFlags.Instance | BindingFlags.Public);
if (onTestFinishedMethodInfo == null)
{
ourLogger.Error("OnTestFinished method not found in ClientController of type='{0}'", type.AssemblyQualifiedName);
return null;
}
var onSessionFinishedMethodInfo = type.GetMethod("OnSessionFinished", BindingFlags.Instance | BindingFlags.Public);
if (onSessionFinishedMethodInfo == null)
{
ourLogger.Error("OnSessionFinished method not found in ClientController of type='{0}'", type.AssemblyQualifiedName);
return null;
}
return new ClientControllerWrapper(clientController,
onSessionStartedMethodInfo,
onTestStartedMethodInfo,
onTestFinishedMethodInfo,
onSessionFinishedMethodInfo);
}
catch (Exception e)
{
ourLogger.Error("Failed to create ClientController", e);
return null;
}
}