using System; using UnityEditor; using UnityEditor.TestTools.TestRunner.Api; using UnityEngine; namespace Microsoft.Unity.VisualStudio.Editor.Testing { [InitializeOnLoad] internal class TestRunnerApiListener { private static readonly TestRunnerApi _testRunnerApi; private static readonly TestRunnerCallbacks _testRunnerCallbacks; static TestRunnerApiListener() { if (!VisualStudioEditor.IsEnabled) return; _testRunnerApi = ScriptableObject.CreateInstance(); _testRunnerCallbacks = new TestRunnerCallbacks(); _testRunnerApi.RegisterCallbacks(_testRunnerCallbacks); } public static void RetrieveTestList(string mode) { RetrieveTestList((TestMode) Enum.Parse(typeof(TestMode), mode)); } private static void RetrieveTestList(TestMode mode) { _testRunnerApi?.RetrieveTestList(mode, ta => _testRunnerCallbacks.TestListRetrieved(mode, ta)); } public static void ExecuteTests(string command) { // ExecuteTests format: // TestMode:FullName var index = command.IndexOf(':'); if (index < 0) return; var testMode = (TestMode)Enum.Parse(typeof(TestMode), command.Substring(0, index)); var filter = command.Substring(index + 1); ExecuteTests(new Filter { testMode = testMode, testNames = new [] { filter } }); } private static void ExecuteTests(Filter filter) { _testRunnerApi?.Execute(new ExecutionSettings(filter)); } } }