diff options
author | therzok <marius.ungureanu@xamarin.com> | 2018-07-20 17:42:23 +0300 |
---|---|---|
committer | Marius Ungureanu <teromario@yahoo.com> | 2018-08-01 17:07:37 +0300 |
commit | d45a366034ce0a8ae5e109a8bf307db41bdd30e0 (patch) | |
tree | a56a0e3e1a0fc73fcc71971b0d2e8d7a52e3bd1d /main/src/addins/MonoDevelop.UnitTesting | |
parent | e9383c122bd922c136664d5542e671c8e9d301ac (diff) |
[UnitTesting] Refactor status update to not iterate results twice.
Diffstat (limited to 'main/src/addins/MonoDevelop.UnitTesting')
-rw-r--r-- | main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs | 3 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs | 31 |
2 files changed, 21 insertions, 13 deletions
diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs index 373569e3d4..8b32dc1804 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTest.cs @@ -201,7 +201,8 @@ namespace MonoDevelop.UnitTesting status = value; OnTestStatusChanged (); - (Parent as UnitTestGroup)?.UpdateStatusFromChildren (); + + (Parent as UnitTestGroup)?.UpdateStatusFromChild (this); } } diff --git a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs index e2a94a14b4..65bd3fc0e7 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/Services/UnitTestGroup.cs @@ -70,7 +70,7 @@ namespace MonoDevelop.UnitTesting base.ResetLastResult (); } - static UnitTestResult GetLastResultDynamically (IEnumerable<UnitTest> tests) + static UnitTestResult GetLastResultDynamically (IEnumerable<UnitTest> tests, out bool isHistoric) { int passed = 0; int errors = 0; @@ -78,6 +78,7 @@ namespace MonoDevelop.UnitTesting int skipped = 0; int uniqeCount = 0; + isHistoric = false; ResultStatus ?lastStatus = null; var resultStatus = ResultStatus.Inconclusive; @@ -94,6 +95,7 @@ namespace MonoDevelop.UnitTesting uniqeCount++; lastStatus = res.Status; + isHistoric |= test.IsHistoricResult; } if (uniqeCount == 1) @@ -110,19 +112,24 @@ namespace MonoDevelop.UnitTesting return result; } - - internal void UpdateStatusFromChildren () + internal void UpdateStatusFromChild (UnitTest test) { - if (this.Status != TestStatus.Ready) + if (Status != TestStatus.Ready) return; - var calculatedResult = GetLastResultDynamically (Tests); - var storedResult = GetLastResult (); - if(!calculatedResult.Equals (storedResult)){ - lastResult = calculatedResult; - IsHistoricResult = Tests.Any (t => t.IsHistoricResult); - OnTestStatusChanged (); - } - (Parent as UnitTestGroup)?.UpdateStatusFromChildren (); + + var parent = this; + while (parent != null) { + var calculatedResult = GetLastResultDynamically (parent.Tests, out bool isHistoricResult); + var storedResult = GetLastResult (); + if (!calculatedResult.Equals (storedResult)) { + lastResult = calculatedResult; + IsHistoricResult = isHistoricResult; + OnTestStatusChanged (); + } + + test = this; + parent = parent as UnitTestGroup; + } } public UnitTestCollection Tests { |