diff options
author | Dmytro Ovcharov <mr.celestian@gmail.com> | 2017-11-08 11:29:22 +0300 |
---|---|---|
committer | Lluis Sanchez <llsan@microsoft.com> | 2017-11-08 11:29:22 +0300 |
commit | 0dfcf09c650e1c4d25e4c30d1eda3d8d5690c8c4 (patch) | |
tree | 95a3b1f2148b6da84ef8bbda3368395abcd2538d /main/src/addins/MonoDevelop.UnitTesting | |
parent | 70ab2d93f6d71f1e4935a62006084af74b4cbae1 (diff) |
Bugfix14525 (#3195)
Fix bug 29749 - Unit Tests UI does not reflect passing tests in parent node
Diffstat (limited to 'main/src/addins/MonoDevelop.UnitTesting')
5 files changed, 114 insertions, 21 deletions
diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs index bf02475122..d1aefaac9d 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs @@ -37,14 +37,14 @@ using MonoDevelop.Core.Execution; using MonoDevelop.Ide; using System.Threading.Tasks; using System.Threading; - +
namespace MonoDevelop.UnitTesting -{ +{
public abstract class UnitTest: IDisposable { string name; IResultsStore resultsStore; - UnitTestResult lastResult; + internal UnitTestResult lastResult; UnitTest parent; TestStatus status; WorkspaceObject ownerSolutionItem; @@ -52,7 +52,7 @@ namespace MonoDevelop.UnitTesting UnitTestResultsStore results; bool historicResult; bool resultLoaded; - + public virtual bool CanMergeWithParent => false; public string FixtureTypeNamespace { @@ -125,7 +125,7 @@ namespace MonoDevelop.UnitTesting public UnitTestResultsStore Results { get { - if (results == null) { + if (results == null) {
results = new UnitTestResultsStore (this, GetResultsStore ()); } return results; @@ -143,7 +143,7 @@ namespace MonoDevelop.UnitTesting return lastResult; } - public void ResetLastResult () + public virtual void ResetLastResult () { historicResult = true; OnTestStatusChanged (); @@ -151,6 +151,7 @@ namespace MonoDevelop.UnitTesting public bool IsHistoricResult { get { return historicResult; } + internal set { historicResult = value; } } public UnitTestCollection GetRegressions (DateTime fromDate, DateTime toDate) @@ -195,6 +196,7 @@ namespace MonoDevelop.UnitTesting set { status = value; OnTestStatusChanged (); + (Parent as UnitTestGroup)?.UpdateStatusFromChildren (); } } @@ -341,9 +343,9 @@ namespace MonoDevelop.UnitTesting resultLoaded = true; IResultsStore store = GetResultsStore (); - if (store != null) + if (store != null)
store.RegisterResult (ActiveConfiguration, this, result); - OnTestStatusChanged (); + OnTestStatusChanged (); } IResultsStore GetResultsStore () @@ -365,7 +367,7 @@ namespace MonoDevelop.UnitTesting { IResultsStore store = GetResultsStore (); if (store != null) - store.Save (); + store.Save ();
} internal virtual void FindRegressions (UnitTestCollection list, DateTime fromDate, DateTime toDate) diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestCollection.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestCollection.cs index 8a004ad81d..214d513dba 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestCollection.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestCollection.cs @@ -35,9 +35,9 @@ namespace MonoDevelop.UnitTesting { public class UnitTestCollection: Collection<UnitTest> { - UnitTest owner; + UnitTestGroup owner; - internal UnitTestCollection (UnitTest owner) + internal UnitTestCollection (UnitTestGroup owner) { this.owner = owner; } diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs index 037499cfdc..d6541a4a7a 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs @@ -33,6 +33,8 @@ using System.Collections; using MonoDevelop.Projects; using System.Threading.Tasks; using System.Threading; +using System.Linq; +using System.Collections.Generic; namespace MonoDevelop.UnitTesting { @@ -60,7 +62,67 @@ namespace MonoDevelop.UnitTesting return false; } } - + + public override void ResetLastResult () + { + foreach (var test in Tests) + test.ResetLastResult(); + base.ResetLastResult (); + } + + static UnitTestResult GetLastResultDynamicaly (IEnumerable<UnitTest> tests) + { + int passed = 0; + int errors = 0; + int failures = 0; + int skipped = 0; + int uniqeCount = 0; + + ResultStatus ?lastStatus = null; + var resultStatus = ResultStatus.Inconclusive; + + foreach (var test in tests) { + var res = test.GetLastResult (); + passed += res.Passed; + errors += res.Errors; + failures += res.Failures; + skipped += res.Skipped; + + if(res.Status != lastStatus) + uniqeCount++; + + lastStatus = res.Status; + } + + if (uniqeCount == 1) + resultStatus = lastStatus.Value; + + var result = new UnitTestResult () { + Status = resultStatus, + Passed = passed, + Errors = errors, + Skipped = skipped, + Failures = failures + }; + + return result; + } + + + internal void UpdateStatusFromChildren () + { + if (this.Status == TestStatus.Running) + return; + var calculatedResult = GetLastResultDynamicaly (Tests); + var storedResult = GetLastResult (); + if(!calculatedResult.Equals (storedResult)){ + lastResult = calculatedResult; + IsHistoricResult = Tests.Any (t => t.IsHistoricResult); + OnTestStatusChanged (); + } + (Parent as UnitTestGroup)?.UpdateStatusFromChildren (); + } + public UnitTestCollection Tests { get { if (tests == null) { diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestResult.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestResult.cs index 50f10070ee..a2d0eb9208 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestResult.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestResult.cs @@ -224,6 +224,42 @@ namespace MonoDevelop.UnitTesting Inconclusive += res.Inconclusive; Skipped += res.Skipped; } + + public override int GetHashCode () + { + var unknowObject = new { + Status, + Passed, + Errors, + Failures, + Inconclusive, + NotRunnable, + Skipped, + Ignored + }; + return unknowObject.GetHashCode (); + } + + public override bool Equals (object obj) + { + var unitTestResult = obj as UnitTestResult; + if (unitTestResult == null) + return false; + return EqualsHelper (this, unitTestResult); + } + + bool EqualsHelper (UnitTestResult firstResult, UnitTestResult secondResult) + { + return firstResult.Status == secondResult.Status && + firstResult.Passed == secondResult.Passed && + firstResult.Errors == secondResult.Errors && + firstResult.Failures == secondResult.Failures && + firstResult.Inconclusive == secondResult.Inconclusive && + firstResult.NotRunnable == secondResult.NotRunnable && + firstResult.Skipped == secondResult.Skipped && + firstResult.Ignored == secondResult.Ignored; + } + } } diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs index ce58f92526..d6ab08a01f 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestService.cs @@ -402,14 +402,7 @@ namespace MonoDevelop.UnitTesting public static void ResetResult (UnitTest test) { - if (test == null) - return; - test.ResetLastResult (); - UnitTestGroup group = test as UnitTestGroup; - if (group == null) - return; - foreach (UnitTest t in new List<UnitTest> (group.Tests)) - ResetResult (t); + test?.ResetLastResult (); } public static event EventHandler TestSuiteChanged; @@ -468,7 +461,7 @@ namespace MonoDevelop.UnitTesting UnitTestService.ResetResult (test); TestContext ctx = new TestContext (monitor, resultsPad, context, DateTime.Now); - test.Run (ctx); + test.Run (ctx);
test.SaveResults (); } catch (Exception ex) { LoggingService.LogError (ex.ToString ()); |