forked from BilalY/Rasagar
76 lines
3.0 KiB
C#
76 lines
3.0 KiB
C#
using System;
|
|
using UnityEngine.Scripting;
|
|
|
|
namespace UnityEngine.TestRunner
|
|
{
|
|
/// <summary>
|
|
/// An assembly level attribute that indicates that a given type implementing <see cref = "ITestRunCallback"/> should be subscribed to updates on the test progress. You can invoke the callbacks with [NUnit](http://www.nunit.org/) `ITest` and `ITestResult` classes.
|
|
///
|
|
/// At the `RunStarted` and `RunFinished` methods, the test and test results are for the whole test tree. These methods invoke at each node in the test tree; first with the whole test assembly, then with the test class, and last with the test method.
|
|
///
|
|
/// From these callbacks, it's possible to read the partial or the full results, and to save the XML version of the result for further processing or continuous integration.
|
|
/// </summary>
|
|
/// <example>
|
|
/// <code>
|
|
/// <![CDATA[
|
|
/// using NUnit.Framework.Interfaces;
|
|
/// using UnityEngine;
|
|
/// using UnityEngine.TestRunner;
|
|
///
|
|
/// [assembly:TestRunCallback(typeof(TestListener))]
|
|
///
|
|
/// public class TestListener : ITestRunCallback
|
|
/// {
|
|
/// public void RunStarted(ITest testsToRun)
|
|
/// {
|
|
///
|
|
/// }
|
|
///
|
|
/// public void RunFinished(ITestResult testResults)
|
|
/// {
|
|
/// Debug.Log($"Run finished with result {testResults.ResultState}.");
|
|
/// }
|
|
///
|
|
/// public void TestStarted(ITest test)
|
|
/// {
|
|
///
|
|
/// }
|
|
///
|
|
/// public void TestFinished(ITestResult result)
|
|
/// {
|
|
///
|
|
/// }
|
|
///}
|
|
/// ]]>
|
|
/// </code>
|
|
/// > Note: The `TestRunCallback` does not need any references to the `UnityEditor` namespace and can run in standalone Players on the Player side.
|
|
/// </example>
|
|
[AttributeUsage(AttributeTargets.Assembly)]
|
|
public class TestRunCallbackAttribute : Attribute
|
|
{
|
|
private Type m_Type;
|
|
|
|
/// <summary>
|
|
/// Constructs a new instance of the <see cref="TestRunCallbackAttribute"/> class.
|
|
/// </summary>
|
|
/// <param name="type">A target type that implements <see cref="ITestRunCallback"/>.</param>
|
|
/// <exception cref="ArgumentException">Throws an ArgumentException if the provided type does not implement <see cref="ITestRunCallback"/>.</exception>
|
|
public TestRunCallbackAttribute(Type type)
|
|
{
|
|
var interfaceType = typeof(ITestRunCallback);
|
|
if (!interfaceType.IsAssignableFrom(type))
|
|
{
|
|
throw new ArgumentException(string.Format(
|
|
"Type {2} provided to {0} does not implement {1}. If the stripping level is set to high, the implementing class should have the {3}.",
|
|
GetType().Name, interfaceType.Name, type.Name, typeof(PreserveAttribute).Name));
|
|
}
|
|
m_Type = type;
|
|
}
|
|
|
|
internal ITestRunCallback ConstructCallback()
|
|
{
|
|
return Activator.CreateInstance(m_Type) as ITestRunCallback;
|
|
}
|
|
}
|
|
}
|