private UnitTestRendererLine[] ParseTestList(Test test, List<UnitTestResult> results, HashSet<string> categories) { foreach (string category in test.Categories) categories.Add(category); if (test is TestMethod) { var result = new UnitTestResult { Test = new UnitTestInfo(test as TestMethod) }; results.Add(result); return new[] { new TestLine(test as TestMethod, result.Id) }; } GroupLine group = null; if (test is TestSuite) group = new GroupLine(test as TestSuite); var namespaceList = new List<UnitTestRendererLine>(new[] {group}); foreach (Test result in test.Tests) { if (result is NamespaceSuite || test is TestAssembly) namespaceList.AddRange(ParseTestList(result, results, categories)); else group.AddChildren(ParseTestList(result, results, categories)); } namespaceList.Sort(); return namespaceList.ToArray(); }
public static void OpenInEditor(UnitTestResult test, bool openError) { var sourceFilePath = ExtractSourceFilePath(test.StackTrace); var sourceFileLine = ExtractSourceFileLine(test.StackTrace); if (!openError || sourceFileLine == 0 || string.IsNullOrEmpty(sourceFilePath)) { var sp = GetSequencePointOfTest(test); if (sp != null) { sourceFileLine = sp.StartLine; sourceFilePath = sp.Document.Url; } } OpenInEditorInternal(sourceFilePath, sourceFileLine); }
public UnitTestRendererLine GetTests(out UnitTestResult[] results, out string[] categories) { if (m_TestSuite == null) { var assemblies = GetAssembliesWithTests().Select(a => a.Location).ToList(); TestSuite suite = PrepareTestSuite(assemblies); m_TestSuite = suite; } var resultList = new List<UnitTestResult>(); var categoryList = new HashSet<string>(); UnitTestRendererLine lines = null; if (m_TestSuite != null) lines = ParseTestList(m_TestSuite, resultList, categoryList).Single(); results = resultList.ToArray(); categories = categoryList.ToArray(); return lines; }
private static SequencePoint GetSequencePointOfTest(UnitTestResult test) { var readerParameters = new ReaderParameters { ReadSymbols = true, SymbolReaderProvider = new MdbReaderProvider(), ReadingMode = ReadingMode.Immediate }; var assemblyDefinition = AssemblyDefinition.ReadAssembly(test.Test.AssemblyPath, readerParameters); var classModule = assemblyDefinition.MainModule.Types.Single(t => t.FullName == test.Test.FullClassName); Collection<MethodDefinition> methods; MethodDefinition method = null; while (classModule.BaseType != null) { methods = classModule.Methods; if (methods.Any(t => t.Name == test.Test.MethodName)) { method = classModule.Methods.First(t => t.Name == test.Test.MethodName); break; } classModule = classModule.BaseType as TypeDefinition; } if (method != null) { var sp = method.Body.Instructions.First(i => i.SequencePoint != null).SequencePoint; return sp; } return null; }
private void UpdateTest(UnitTestResult unitTestResult) { var result = testList.FirstOrDefault(m => m.Test.Equals(unitTestResult.Test)); if (result != null) { result.Update(unitTestResult); } else { testList.Add(unitTestResult); } }
public static SequencePoint GetSequencePointOfTest(UnitTestResult test) { var readerParameters = new ReaderParameters { ReadSymbols = true, SymbolReaderProvider = new MdbReaderProvider (), ReadingMode = ReadingMode.Immediate }; var assemblyDefinition = AssemblyDefinition.ReadAssembly (test.AssemblyPath, readerParameters); var classModule = assemblyDefinition.MainModule.Types.Single (t => t.FullName == test.Test.FullClassName); var method = classModule.Methods.Single (t => t.Name == test.Test.MethodName); var sp = method.Body.Instructions.First (i => i.SequencePoint != null).SequencePoint; return sp; }
private void PrintTestContextMenu(UnitTestResult test) { var m = new GenericMenu (); if ((selectedTests.Count() + selectedGroups.Count()) > 1) { m.AddItem (guiRunSelected, false, data => RunTest (selectedTests.Select (t=>t.Test.FullName) .Concat(selectedGroups) .ToArray()), ""); } if (!string.IsNullOrEmpty(test.Test.FullName)) { m.AddItem (guiRun, false, data => RunTest(new[] { test.Test.FullName }), ""); } m.AddSeparator(""); m.AddItem(guiOpenInEditor, false, data => GuiHelper.OpenInEditor (test), ""); m.ShowAsContext(); }
private void SelectTest (UnitTestResult test) { if (!Event.current.control) { selectedTests.Clear (); selectedGroups.Clear (); } if (Event.current.control && IsTestSelected(test)) selectedTests.Remove (test); else selectedTests.Add (test); forceRefresh = true; }
private bool IsTestSelected (UnitTestResult test) { return selectedTests.Contains (test); }
private void PrintTest(string printedName, UnitTestResult test) { EditorGUIUtility.SetIconSize(new Vector2(12, 12)); GUILayout.BeginHorizontal (GUILayout.Height (18)); var foldoutGUIContent = new GUIContent (printedName, test.Executed ? GuiHelper.GetIconForTestResult (test.ResultState) : Icons.unknownImg, test.Test.FullName); Indent (); var rect = GUILayoutUtility.GetRect(foldoutGUIContent, EditorStyles.label, GUILayout.ExpandWidth (true), GUILayout.MaxHeight (18)); if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown && Event.current.button == 0) { SelectTest (test); GUI.FocusControl(""); if (Event.current.clickCount == 2 && selectedTests.Count == 1) { OpenFailedTestOnError (); } } else if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.ContextClick) { Event.current.Use(); PrintTestContextMenu(test); } var style = IsTestSelected (test) ? Styles.selectedLabel : Styles.label; EditorGUI.LabelField(rect, foldoutGUIContent, style); if (notifyOnSlowRun && test.Duration > slowTestThreshold) { var labelRect = style.CalcSize (foldoutGUIContent); var iconRect = new Rect (rect.xMin + labelRect.x, rect.yMin, 20, 20); GUI.Label(iconRect, guiStopWatch); } GUILayout.EndHorizontal(); EditorGUIUtility.SetIconSize(Vector2.zero); }
private void PrintTest(string printedName, UnitTestResult test) { EditorGUIUtility.SetIconSize(new Vector2(15, 15)); GUILayout.BeginHorizontal (GUILayout.Height (18)); var foldoutGUIContent = new GUIContent (printedName, test.Executed || test.IsIgnored || test.ResultState == TestResultState.NotRunnable ? GuiHelper.GetIconForResult (test.ResultState) : Icons.unknownImg, test.Test.FullName); Indent (); GUILayout.Space (10); var rect = GUILayoutUtility.GetRect(foldoutGUIContent, EditorStyles.label, GUILayout.ExpandWidth (true)/*, GUILayout.MaxHeight (18)*/); if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown && Event.current.button == 0) { SelectTest (test); GUI.FocusControl(""); if (Event.current.clickCount == 2 && selectedTests.Count == 1) { OpenFailedTestOnError (); } } else if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.ContextClick) { Event.current.Use(); PrintTestContextMenu(test); } var style = IsTestSelected (test) ? Styles.selectedLabel : Styles.label; EditorGUI.LabelField(rect, foldoutGUIContent, style); GUILayout.EndHorizontal(); EditorGUIUtility.SetIconSize(Vector2.zero); }
private bool IsTestSelected(UnitTestResult test) { return(selectedTests.Contains(test)); }