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> | ||
|  |     /// <para>> Note: The `TestRunCallback` does not need any references to the `UnityEditor` namespace and can run in standalone Players on the Player side.</para> | ||
|  |     /// </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; | ||
|  |         } | ||
|  |     } | ||
|  | } |