summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs')
-rw-r--r--Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs263
1 files changed, 263 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs
new file mode 100644
index 0000000..45eab30
--- /dev/null
+++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs
@@ -0,0 +1,263 @@
+using System;
+using UnityEditor.Callbacks;
+using UnityEditor.TestTools.TestRunner.Api;
+using UnityEditor.TestTools.TestRunner.GUI;
+using UnityEngine;
+
+namespace UnityEditor.TestTools.TestRunner
+{
+ [Serializable]
+ internal class TestRunnerWindow : EditorWindow, IHasCustomMenu
+ {
+ internal static class Styles
+ {
+ public static GUIStyle info;
+ public static GUIStyle testList;
+
+ static Styles()
+ {
+ info = new GUIStyle(EditorStyles.wordWrappedLabel);
+ info.wordWrap = false;
+ info.stretchHeight = true;
+ info.margin.right = 15;
+
+ testList = new GUIStyle("CN Box");
+ testList.margin.top = 0;
+ testList.padding.left = 3;
+ }
+ }
+
+ private readonly GUIContent m_GUIHorizontalSplit = EditorGUIUtility.TrTextContent("Horizontal layout");
+ private readonly GUIContent m_GUIVerticalSplit = EditorGUIUtility.TrTextContent("Vertical layout");
+ private readonly GUIContent m_GUIEnableaPlaymodeTestsRunner = EditorGUIUtility.TrTextContent("Enable playmode tests for all assemblies");
+ private readonly GUIContent m_GUIDisablePlaymodeTestsRunner = EditorGUIUtility.TrTextContent("Disable playmode tests for all assemblies");
+ private readonly GUIContent m_GUIRunPlayModeTestAsEditModeTests = EditorGUIUtility.TrTextContent("Run playmode tests as editmode tests");
+
+ internal static TestRunnerWindow s_Instance;
+ private bool m_IsBuilding;
+ [NonSerialized]
+ private bool m_Enabled;
+ public TestFilterSettings filterSettings;
+
+ [SerializeField]
+ private SplitterState m_Spl = new SplitterState(new float[] { 75, 25 }, new[] { 32, 32 }, null);
+
+ private TestRunnerWindowSettings m_Settings;
+
+ private enum TestRunnerMenuLabels
+ {
+ PlayMode = 0,
+ EditMode = 1
+ }
+ [SerializeField]
+ private int m_TestTypeToolbarIndex = (int)TestRunnerMenuLabels.EditMode;
+ [SerializeField]
+ private PlayModeTestListGUI m_PlayModeTestListGUI;
+ [SerializeField]
+ private EditModeTestListGUI m_EditModeTestListGUI;
+
+ internal TestListGUI m_SelectedTestTypes;
+
+ private ITestRunnerApi m_testRunnerApi;
+
+ private WindowResultUpdater m_WindowResultUpdater;
+
+ [MenuItem("Window/General/Test Runner", false, 201, false)]
+ public static void ShowPlaymodeTestsRunnerWindowCodeBased()
+ {
+ s_Instance = GetWindow<TestRunnerWindow>("Test Runner");
+ s_Instance.Show();
+ }
+
+ static TestRunnerWindow()
+ {
+ InitBackgroundRunners();
+ }
+
+ private static void InitBackgroundRunners()
+ {
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
+ }
+
+ [DidReloadScripts]
+ private static void CompilationCallback()
+ {
+ UpdateWindow();
+ }
+
+ private static void OnPlayModeStateChanged(PlayModeStateChange state)
+ {
+ if (s_Instance && state == PlayModeStateChange.EnteredEditMode && s_Instance.m_SelectedTestTypes.HasTreeData())
+ {
+ //repaint message details after exit playmode
+ s_Instance.m_SelectedTestTypes.TestSelectionCallback(s_Instance.m_SelectedTestTypes.m_TestListState.selectedIDs.ToArray());
+ s_Instance.Repaint();
+ }
+ }
+
+ public void OnDestroy()
+ {
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ if (m_testRunnerApi != null)
+ {
+ m_testRunnerApi.UnregisterCallbacks(m_WindowResultUpdater);
+ }
+ }
+
+ private void OnEnable()
+ {
+ s_Instance = this;
+ SelectTestListGUI(m_TestTypeToolbarIndex);
+
+ m_testRunnerApi = ScriptableObject.CreateInstance<TestRunnerApi>();
+ m_WindowResultUpdater = new WindowResultUpdater();
+ m_testRunnerApi.RegisterCallbacks(m_WindowResultUpdater);
+ }
+
+ private void Enable()
+ {
+ m_Settings = new TestRunnerWindowSettings("UnityEditor.PlaymodeTestsRunnerWindow");
+ filterSettings = new TestFilterSettings("UnityTest.IntegrationTestsRunnerWindow");
+
+ if (m_SelectedTestTypes == null)
+ {
+ SelectTestListGUI(m_TestTypeToolbarIndex);
+ }
+
+ StartRetrieveTestList();
+ m_SelectedTestTypes.Reload();
+ m_Enabled = true;
+ }
+
+ private void SelectTestListGUI(int testTypeToolbarIndex)
+ {
+ if (testTypeToolbarIndex == (int)TestRunnerMenuLabels.PlayMode)
+ {
+ if (m_PlayModeTestListGUI == null)
+ {
+ m_PlayModeTestListGUI = new PlayModeTestListGUI();
+ }
+ m_SelectedTestTypes = m_PlayModeTestListGUI;
+ }
+ else if (testTypeToolbarIndex == (int)TestRunnerMenuLabels.EditMode)
+ {
+ if (m_EditModeTestListGUI == null)
+ {
+ m_EditModeTestListGUI = new EditModeTestListGUI();
+ }
+ m_SelectedTestTypes = m_EditModeTestListGUI;
+ }
+ }
+
+ private void StartRetrieveTestList()
+ {
+ if (!m_SelectedTestTypes.HasTreeData())
+ {
+ m_testRunnerApi.RetrieveTestList(m_SelectedTestTypes.TestMode, (rootTest) =>
+ {
+ m_SelectedTestTypes.Init(this, rootTest);
+ m_SelectedTestTypes.Reload();
+ });
+ }
+ }
+
+ public void OnGUI()
+ {
+ if (!m_Enabled)
+ {
+ Enable();
+ }
+
+ if (BuildPipeline.isBuildingPlayer)
+ {
+ m_IsBuilding = true;
+ }
+ else if (m_IsBuilding)
+ {
+ m_IsBuilding = false;
+ Repaint();
+ }
+
+ EditorGUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ var selectedIndex = m_TestTypeToolbarIndex;
+ m_TestTypeToolbarIndex = GUILayout.Toolbar(m_TestTypeToolbarIndex, Enum.GetNames(typeof(TestRunnerMenuLabels)), "LargeButton", UnityEngine.GUI.ToolbarButtonSize.FitToContents);
+ GUILayout.FlexibleSpace();
+ EditorGUILayout.EndHorizontal();
+
+ if (selectedIndex != m_TestTypeToolbarIndex)
+ {
+ SelectTestListGUI(m_TestTypeToolbarIndex);
+ StartRetrieveTestList();
+ }
+
+ EditorGUILayout.BeginVertical();
+ using (new EditorGUI.DisabledScope(EditorApplication.isPlayingOrWillChangePlaymode))
+ {
+ m_SelectedTestTypes.PrintHeadPanel();
+ }
+ EditorGUILayout.EndVertical();
+
+ if (m_Settings.verticalSplit)
+ SplitterGUILayout.BeginVerticalSplit(m_Spl);
+ else
+ SplitterGUILayout.BeginHorizontalSplit(m_Spl);
+
+ EditorGUILayout.BeginVertical();
+ EditorGUILayout.BeginVertical(Styles.testList);
+ m_SelectedTestTypes.RenderTestList();
+ EditorGUILayout.EndVertical();
+ EditorGUILayout.EndVertical();
+
+ m_SelectedTestTypes.RenderDetails();
+
+ if (m_Settings.verticalSplit)
+ SplitterGUILayout.EndVerticalSplit();
+ else
+ SplitterGUILayout.EndHorizontalSplit();
+ }
+
+ public void AddItemsToMenu(GenericMenu menu)
+ {
+ menu.AddItem(m_GUIVerticalSplit, m_Settings.verticalSplit, m_Settings.ToggleVerticalSplit);
+ menu.AddItem(m_GUIHorizontalSplit, !m_Settings.verticalSplit, m_Settings.ToggleVerticalSplit);
+
+ menu.AddSeparator(null);
+
+ var playModeTestRunnerEnabled = PlayerSettings.playModeTestRunnerEnabled;
+ var currentActive = playModeTestRunnerEnabled ? m_GUIDisablePlaymodeTestsRunner : m_GUIEnableaPlaymodeTestsRunner;
+
+ if (EditorPrefs.GetBool("InternalMode", false))
+ {
+ menu.AddItem(m_GUIRunPlayModeTestAsEditModeTests, PlayerSettings.runPlayModeTestAsEditModeTest, () =>
+ {
+ PlayerSettings.runPlayModeTestAsEditModeTest = !PlayerSettings.runPlayModeTestAsEditModeTest;
+ });
+ }
+
+ menu.AddItem(currentActive, false, () =>
+ {
+ PlayerSettings.playModeTestRunnerEnabled = !playModeTestRunnerEnabled;
+ EditorUtility.DisplayDialog(currentActive.text, "You need to restart the editor now", "Ok");
+ });
+ }
+
+ public void RebuildUIFilter()
+ {
+ if (m_SelectedTestTypes != null && m_SelectedTestTypes.HasTreeData())
+ {
+ m_SelectedTestTypes.RebuildUIFilter();
+ }
+ }
+
+ public static void UpdateWindow()
+ {
+ if (s_Instance != null && s_Instance.m_SelectedTestTypes != null)
+ {
+ s_Instance.m_SelectedTestTypes.Repaint();
+ s_Instance.Repaint();
+ }
+ }
+ }
+}