diff --git a/src/AddIns/Misc/UnitTesting/Src/TestTreeView.cs b/src/AddIns/Misc/UnitTesting/Src/TestTreeView.cs
index 1828d4c184..9e195c1ea6 100644
--- a/src/AddIns/Misc/UnitTesting/Src/TestTreeView.cs
+++ b/src/AddIns/Misc/UnitTesting/Src/TestTreeView.cs
@@ -83,12 +83,15 @@ namespace ICSharpCode.UnitTesting
if (TestProject.IsTestProject(project)) {
if (GetProjectTreeNode(project) == null) {
// Add a new tree node.
- TestProject testProject = new TestProject(project, GetProjectContent(project));
- TestProjectTreeNode node = new TestProjectTreeNode(testProject);
- node.AddTo(this);
-
- // Sort the nodes.
- SortNodes(Nodes, true);
+ IProjectContent projectContent = GetProjectContent(project);
+ if (projectContent != null) {
+ TestProject testProject = new TestProject(project, projectContent);
+ TestProjectTreeNode node = new TestProjectTreeNode(testProject);
+ node.AddTo(this);
+
+ // Sort the nodes.
+ SortNodes(Nodes, true);
+ }
}
}
}
diff --git a/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs b/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs
index 0c7474bc60..386ab2fc00 100644
--- a/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs
+++ b/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs
@@ -115,7 +115,11 @@ namespace ICSharpCode.UnitTesting
///
protected void SolutionLoaded(Solution solution)
{
- treeView.AddSolution(solution);
+ if (solution != null) {
+ treeView.AddSolution(solution);
+ } else {
+ treeView.Clear();
+ }
}
///
diff --git a/src/AddIns/Misc/UnitTesting/Test/Tree/ClassWithNoRootNamespaceTestFixture.cs b/src/AddIns/Misc/UnitTesting/Test/Tree/ClassWithNoRootNamespaceTestFixture.cs
index fb9d43dd10..e38de59608 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Tree/ClassWithNoRootNamespaceTestFixture.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Tree/ClassWithNoRootNamespaceTestFixture.cs
@@ -58,7 +58,7 @@ namespace UnitTesting.Tests.Tree
// Init mock project content to be returned.
dummyTreeView = new DummyParserServiceTestTreeView();
- dummyTreeView.AddProjectContentForProject(projectContent);
+ dummyTreeView.ProjectContentForProject = projectContent;
// Load the projects into the test tree view.
treeView = dummyTreeView as TestTreeView;
diff --git a/src/AddIns/Misc/UnitTesting/Test/Tree/GetProjectsTestFixture.cs b/src/AddIns/Misc/UnitTesting/Test/Tree/GetProjectsTestFixture.cs
index 8f7cf716bb..930987751d 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Tree/GetProjectsTestFixture.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Tree/GetProjectsTestFixture.cs
@@ -49,7 +49,7 @@ namespace UnitTesting.Tests.Tree
projectContent.Project = project1;
treeView = new DummyParserServiceTestTreeView();
- treeView.AddProjectContentForProject(projectContent);
+ treeView.ProjectContentForProject = projectContent;
treeView.AddSolution(solution);
projects = treeView.GetProjects();
}
diff --git a/src/AddIns/Misc/UnitTesting/Test/Tree/OneTestClassTestFixture.cs b/src/AddIns/Misc/UnitTesting/Test/Tree/OneTestClassTestFixture.cs
index 606ac473e7..1f99e296a3 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Tree/OneTestClassTestFixture.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Tree/OneTestClassTestFixture.cs
@@ -81,7 +81,7 @@ namespace UnitTesting.Tests.Tree
// Init mock project content to be returned.
dummyTreeView = new DummyParserServiceTestTreeView();
- dummyTreeView.AddProjectContentForProject(projectContent);
+ dummyTreeView.ProjectContentForProject = projectContent;
// Load the projects into the test tree view.
treeView = dummyTreeView as TestTreeView;
diff --git a/src/AddIns/Misc/UnitTesting/Test/Tree/SolutionOpenedTestFixture.cs b/src/AddIns/Misc/UnitTesting/Test/Tree/SolutionOpenedTestFixture.cs
index 659c1e5280..2aee58a97b 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Tree/SolutionOpenedTestFixture.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Tree/SolutionOpenedTestFixture.cs
@@ -26,6 +26,7 @@ namespace UnitTesting.Tests.Tree
DerivedUnitTestsPad pad;
Solution solution;
MSBuildBasedProject project;
+ MockProjectContent projectContent;
[TestFixtureSetUp]
public void SetUpFixture()
@@ -36,9 +37,10 @@ namespace UnitTesting.Tests.Tree
[SetUp]
public void Init()
{
+ projectContent = new MockProjectContent();
+ pad.ProjectContent = projectContent;
solution = new Solution();
project = new MockCSharpProject();
- MockProjectContent projectContent = pad.ProjectContent;
projectContent.Project = project;
projectContent.Language = LanguageProperties.None;
ReferenceProjectItem refProjectItem = new ReferenceProjectItem(project);
@@ -340,5 +342,33 @@ namespace UnitTesting.Tests.Tree
{
Assert.IsTrue(pad.GetOpenSolutionCalled);
}
+
+ ///
+ /// Tests that a null solution clears the test tree.
+ ///
+ [Test]
+ public void NullSolution()
+ {
+ pad.CallSolutionLoaded(null);
+ Assert.AreEqual(0, pad.TestTreeView.Nodes.Count);
+ }
+
+ ///
+ /// If the user opens another solution before the parser thread
+ /// has finished we can sometimes get into a state where the
+ /// first solution is being loaded into the test tree view but
+ /// its project content has been removed since the parser is working
+ /// on the next solution that was opened. In this case the test
+ /// tree view should ignore any project's that have null project
+ /// contents.
+ ///
+ [Test]
+ public void NullProjectContent()
+ {
+ DummyParserServiceTestTreeView tree = (DummyParserServiceTestTreeView)pad.TestTreeView;
+ tree.ProjectContentForProject = null;
+
+ pad.CallSolutionLoaded(solution);
+ }
}
}
diff --git a/src/AddIns/Misc/UnitTesting/Test/Tree/TwoTestClassesInDifferentNamespacesTestFixture.cs b/src/AddIns/Misc/UnitTesting/Test/Tree/TwoTestClassesInDifferentNamespacesTestFixture.cs
index cc194a0070..6ac3ccd51d 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Tree/TwoTestClassesInDifferentNamespacesTestFixture.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Tree/TwoTestClassesInDifferentNamespacesTestFixture.cs
@@ -65,7 +65,7 @@ namespace UnitTesting.Tests.Tree
// Init mock project content to be returned.
dummyTreeView = new DummyParserServiceTestTreeView();
- dummyTreeView.AddProjectContentForProject(projectContent);
+ dummyTreeView.ProjectContentForProject = projectContent;
// Load the projects into the test tree view.
treeView = dummyTreeView as TestTreeView;
diff --git a/src/AddIns/Misc/UnitTesting/Test/Utils/DerivedUnitTestsPad.cs b/src/AddIns/Misc/UnitTesting/Test/Utils/DerivedUnitTestsPad.cs
index 20899cff5e..57d2ceb250 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Utils/DerivedUnitTestsPad.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Utils/DerivedUnitTestsPad.cs
@@ -26,6 +26,7 @@ namespace UnitTesting.Tests.Utils
Solution openSolution;
bool loadSolutionProjectsThreadEndedHandled;
bool addedLoadSolutionProjectsThreadEndedHandler;
+ DummyParserServiceTestTreeView treeView = new DummyParserServiceTestTreeView();
public DerivedUnitTestsPad(Solution openSolution)
{
@@ -44,6 +45,10 @@ namespace UnitTesting.Tests.Utils
get {
return projectContent;
}
+ set {
+ projectContent = value;
+ treeView.ProjectContentForProject = projectContent;
+ }
}
public bool GetOpenSolutionCalled {
@@ -130,8 +135,6 @@ namespace UnitTesting.Tests.Utils
///
protected override TestTreeView CreateTestTreeView()
{
- DummyParserServiceTestTreeView treeView = new DummyParserServiceTestTreeView();
- treeView.AddProjectContentForProject(projectContent);
return treeView;
}
diff --git a/src/AddIns/Misc/UnitTesting/Test/Utils/DummyParserServiceTestTreeView.cs b/src/AddIns/Misc/UnitTesting/Test/Utils/DummyParserServiceTestTreeView.cs
index 388144f250..39f5544c88 100644
--- a/src/AddIns/Misc/UnitTesting/Test/Utils/DummyParserServiceTestTreeView.cs
+++ b/src/AddIns/Misc/UnitTesting/Test/Utils/DummyParserServiceTestTreeView.cs
@@ -20,9 +20,17 @@ namespace UnitTesting.Tests.Utils
{
IProjectContent projectContent;
- public void AddProjectContentForProject(IProjectContent projectContent)
- {
- this.projectContent = projectContent;
+ ///
+ /// Gets or sets the project content that will be returned from the
+ /// GetProjectContent method.
+ ///
+ public IProjectContent ProjectContentForProject {
+ get {
+ return projectContent;
+ }
+ set {
+ projectContent = value;
+ }
}
public override IProjectContent GetProjectContent(IProject project)