From 24dcfa6a71740ddbe4e97d1bddec040738eaa51c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Thu, 25 Oct 2018 13:09:51 +0200 Subject: Bug 713024: "Test Results" pane has bad performance when very large amounts of text are shown https://devdiv.visualstudio.com/DevDiv/_workitems/edit/713024 --- .../MonoDevelop.UnitTesting/Gui/TestResultsPad.cs | 39 ++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'main/src/addins/MonoDevelop.UnitTesting') diff --git a/main/src/addins/MonoDevelop.UnitTesting/Gui/TestResultsPad.cs b/main/src/addins/MonoDevelop.UnitTesting/Gui/TestResultsPad.cs index 75c29f3e14..a59bbcbf71 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Gui/TestResultsPad.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Gui/TestResultsPad.cs @@ -738,8 +738,38 @@ namespace MonoDevelop.UnitTesting TreeIter testRow = failuresStore.AppendValues (TestStatusIcon.Failure, Escape (test.FullName), test, file); bool hasMessage = !string.IsNullOrEmpty (result.Message); - if (hasMessage) - failuresStore.AppendValues (testRow, null, ""+Escape (result.Message) + "", test, null, 0, ErrorMessage); + if (hasMessage) { + var sb = StringBuilderCache.Allocate (); + string curLineText; + int curLine = 1; + const int maxLineLength = 255; + const int maxLineNumber = 255; + sb.Append (""); + using (var sr = new StringReader (result.Message)) { + while (null != (curLineText = sr.ReadLine ())) { + if (curLineText == null) continue; + if (curLine < maxLineNumber) { + if (curLineText.Length > maxLineLength) { + sb.Append (curLineText, 0, maxLineLength); + sb.AppendLine ("…"); + } else { + sb.AppendLine (curLineText); + } + } + curLine++; + } + } + if (curLine > maxLineNumber) { + sb.Append (""); + sb.Append (GettextCatalog.GetString ("(+{0} lines not shown - see output view for full result message)", curLine - maxLineNumber)); + sb.Append (""); + } + sb.Append (""); + failuresStore.AppendValues (testRow, null,StringBuilderCache.ReturnAndFree (sb), test, null, 0, ErrorMessage); + } + if (!string.IsNullOrEmpty (result.StackTrace)) { TreeIter row = testRow; if (hasMessage) @@ -774,6 +804,11 @@ namespace MonoDevelop.UnitTesting outputView.Buffer.Insert (ref it, result.ConsoleOutput); if (result.ConsoleError != null) outputView.Buffer.Insert (ref it, result.ConsoleError); + if (!string.IsNullOrEmpty (result.Message)) { + outputView.Buffer.Insert (ref it, GettextCatalog.GetString ("Result message:")); + outputView.Buffer.Insert (ref it, "\n"); + outputView.Buffer.Insert (ref it, result.Message); + } outputView.ScrollMarkOnscreen (outputView.Buffer.InsertMark); } -- cgit v1.2.3