diff options
author | Mike Krüger <mikkrg@microsoft.com> | 2018-10-11 14:28:58 +0300 |
---|---|---|
committer | Mike Krüger <mikkrg@microsoft.com> | 2018-10-11 14:30:13 +0300 |
commit | 4b55cb84cafa985e6325f857b5890745e46672ac (patch) | |
tree | 5d6f1978c625b2ed538bfb0b1246284908c2a263 /main/src/addins/MonoDevelop.UnitTesting | |
parent | 49733687242ce1186dde13cc9d6236696181b3e8 (diff) |
Fixes VSTS Bug 701330: DTS: When adding Unit Test into the
application, the application will crash with a stack trace that seems
to try to recursively add unit test over 85,000 times
https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/701330
Diffstat (limited to 'main/src/addins/MonoDevelop.UnitTesting')
3 files changed, 26 insertions, 2 deletions
diff --git a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.Tests/MonoDevelop.UnitTesting.Tests/VsTestUnitTestTests.cs b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.Tests/MonoDevelop.UnitTesting.Tests/VsTestUnitTestTests.cs index 635d0b5197..4ae6127211 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.Tests/MonoDevelop.UnitTesting.Tests/VsTestUnitTestTests.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.Tests/MonoDevelop.UnitTesting.Tests/VsTestUnitTestTests.cs @@ -27,6 +27,7 @@ using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using MonoDevelop.UnitTesting.VsTest;
using NUnit.Framework; +using System; namespace MonoDevelop.UnitTesting.Tests { @@ -71,5 +72,25 @@ namespace MonoDevelop.UnitTesting.Tests Assert.AreEqual (expectedFixtureTypeName, test.FixtureTypeName); Assert.AreEqual (expectedName, test.Name); } + + /// <summary> + /// Bug 701330: DTS: When adding Unit Test into the application, the application will crash with a stack trace that seems to try to recursively add unit test over 85,000 times + /// </summary> + [Test] + public void TestVSTS701330 () + { + var grp = new VsTestNamespaceTestGroup (null, null, null, "Test"); + var uri = new Uri ("/test/Test.cs"); + grp.AddTest (new MyVsTestUnitTest ("Test", "Test", "TestCase1")); + grp.AddTest (new MyVsTestUnitTest ("Test", "Test.Test", "TestCase1")); + } + class MyVsTestUnitTest : VsTestUnitTest + { + public MyVsTestUnitTest (string displayName, string fixtureTypeNamespace, string fixtureTypeName) : base(displayName) + { + FixtureTypeNamespace = fixtureTypeNamespace; + FixtureTypeName = fixtureTypeName; + } + } } } diff --git a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestNamespaceTestGroup.cs b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestNamespaceTestGroup.cs index 3aa4f5e069..c0de605ff3 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestNamespaceTestGroup.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestNamespaceTestGroup.cs @@ -62,7 +62,7 @@ namespace MonoDevelop.UnitTesting.VsTest } } - void AddTest (VsTestUnitTest VsTestTest) + internal void AddTest (VsTestUnitTest VsTestTest) { string childNamespace = VsTestTest.GetChildNamespace (FixtureTypeNamespace); if (string.IsNullOrEmpty (childNamespace)) { @@ -71,7 +71,7 @@ namespace MonoDevelop.UnitTesting.VsTest Tests.Add (currentClass); } currentClass.Tests.Add (VsTestTest); - } else if (currentNamespace.Name == childNamespace) { + } else if (currentNamespace != this && currentNamespace.Name == childNamespace) { currentNamespace.AddTest (VsTestTest); } else { currentNamespace = new VsTestNamespaceTestGroup (testRunner, currentNamespace, Project, childNamespace); diff --git a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestUnitTest.cs b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestUnitTest.cs index 0e414065a2..e78a0a9903 100644 --- a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestUnitTest.cs +++ b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.VsTest/VsTestUnitTest.cs @@ -44,6 +44,9 @@ namespace MonoDevelop.UnitTesting.VsTest string name; SourceCodeLocation sourceCodeLocation; + protected VsTestUnitTest(string displayName) : base (displayName) + { } + public VsTestUnitTest (IVsTestTestRunner testRunner, TestCase test, Project project) : base (test.DisplayName) { |