Exemple #1
0
        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);
        }
Exemple #3
0
        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);
		}
Exemple #12
0
 private bool IsTestSelected(UnitTestResult test)
 {
     return(selectedTests.Contains(test));
 }