Browse Source

Fix new directory project items being added as file tree nodes in Projects window.

pull/28/head
Matt Ward 14 years ago
parent
commit
09acd5dddd
  1. 11
      src/AddIns/Misc/PackageManagement/Project/Src/UpdateProjectBrowserFileNodesVisitor.cs
  2. 79
      src/AddIns/Misc/PackageManagement/Test/Src/ProjectBrowserUpdaterTests.cs

11
src/AddIns/Misc/PackageManagement/Project/Src/UpdateProjectBrowserFileNodesVisitor.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.PackageManagement @@ -48,7 +48,7 @@ namespace ICSharpCode.PackageManagement
return null;
if (IsImmediateParentForNewFile(directoryNode)) {
AddFileNodeTo(directoryNode);
AddFileOrDirectoryNodeTo(directoryNode);
} else if (IsChildDirectoryNodeMissingForNewFile(directoryNode)) {
AddChildDirectoryNodeForNewFileTo(directoryNode);
} else {
@ -111,6 +111,15 @@ namespace ICSharpCode.PackageManagement @@ -111,6 +111,15 @@ namespace ICSharpCode.PackageManagement
directoryNode.InsertSorted(parentNode);
}
void AddFileOrDirectoryNodeTo(DirectoryNode directoryNode)
{
if (newFileAddedToProject.ItemType == ItemType.Folder) {
AddDirectoryNodeTo(directoryNode, newFileAddedToProject.FileName);
} else {
AddFileNodeTo(directoryNode);
}
}
void AddFileNodeTo(TreeNode node)
{
var fileNode = new FileNode(newFileAddedToProject.FileName, FileNodeStatus.InProject);

79
src/AddIns/Misc/PackageManagement/Test/Src/ProjectBrowserUpdaterTests.cs

@ -82,6 +82,13 @@ namespace PackageManagement.Tests @@ -82,6 +82,13 @@ namespace PackageManagement.Tests
ProjectService.AddProjectItem(unknownProject, fileProjectItem);
}
void AddDirectoryToProject(string directory)
{
var fileProjectItem = new FileProjectItem(project, ItemType.Folder);
fileProjectItem.FileName = directory;
AddProjectItemToProject(fileProjectItem);
}
void CreateProjectBrowserUpdater()
{
CreateProjectBrowserControl();
@ -137,9 +144,9 @@ namespace PackageManagement.Tests @@ -137,9 +144,9 @@ namespace PackageManagement.Tests
return parentNode.AllNodes.OfType<T>();
}
DirectoryNode GetDirectoryChildNodeAtIndex(ProjectNode projectNode, int index)
DirectoryNode GetDirectoryChildNodeAtIndex(DirectoryNode directoryNode, int index)
{
return GetChildNodesOfType<DirectoryNode>(projectNode).ElementAt(index);
return GetChildNodesOfType<DirectoryNode>(directoryNode).ElementAt(index);
}
[Test]
@ -431,5 +438,73 @@ namespace PackageManagement.Tests @@ -431,5 +438,73 @@ namespace PackageManagement.Tests
Assert.AreEqual(1, secondDirectoryNode.Nodes.Count);
Assert.AreEqual(@"d:\projects\MyProject\b\b.cs", fileNode.FileName);
}
[Test]
public void Constructor_ProjectWithNoFilesAndDirectoryAddedToProject_DirectoryNodeAddedToProjectNode()
{
CreateProjectBrowserUpdater();
ProjectNode projectNode = AddProjectToProjectBrowser(@"d:\projects\MyProject\MyProject.csproj");
projectNode.Expanding();
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder");
DirectoryNode directoryNode = GetFirstDirectoryChildNode(projectNode);
Assert.AreEqual(@"d:\projects\MyProject\Subfolder", directoryNode.Directory);
Assert.AreEqual("Subfolder", directoryNode.Text);
Assert.AreEqual(FileNodeStatus.InProject, directoryNode.FileNodeStatus);
}
[Test]
public void Constructor_ProjectWithOneDirectoryAndSubDirectoryAddedToProject_DirectoryNodeAddedToParentNode()
{
CreateProjectBrowserControl();
ProjectNode projectNode = AddProjectToProjectBrowser(@"d:\projects\MyProject\MyProject.csproj");
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder1");
CreateProjectBrowserUpdater(projectBrowser);
projectNode.Expanding();
DirectoryNode directoryNode = GetFirstDirectoryChildNode(projectNode);
directoryNode.Expanding();
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder1\Subfolder2");
DirectoryNode childDirectoryNode = GetFirstDirectoryChildNode(directoryNode);
Assert.AreEqual(@"d:\projects\MyProject\Subfolder1\Subfolder2", childDirectoryNode.Directory);
Assert.AreEqual(FileNodeStatus.InProject, childDirectoryNode.FileNodeStatus);
}
[Test]
public void Constructor_ProjectWithTwoDirectoriesAndDirectoryAddedToProject_DirectoryNodeAddedToProjectInAlphabeticalOrder()
{
CreateProjectBrowserControl();
ProjectNode projectNode = AddProjectToProjectBrowser(@"d:\projects\MyProject\MyProject.csproj");
AddDirectoryToProject(@"d:\projects\MyProject\a");
AddDirectoryToProject(@"d:\projects\MyProject\c");
CreateProjectBrowserUpdater(projectBrowser);
projectNode.Expanding();
AddDirectoryToProject(@"d:\projects\MyProject\b");
DirectoryNode childDirectoryNode = GetDirectoryChildNodeAtIndex(projectNode, 1);
Assert.AreEqual(@"d:\projects\MyProject\b", childDirectoryNode.Directory);
}
[Test]
public void Constructor_ProjectWithOneSubDirectoryWithTwoChildDirectoriesAndNewSubChildDirectoryAddedToProject_DirectoryNodeAddedInAlphabeticalOrder()
{
CreateProjectBrowserControl();
ProjectNode projectNode = AddProjectToProjectBrowser(@"d:\projects\MyProject\MyProject.csproj");
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder1");
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder1\a");
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder1\c");
CreateProjectBrowserUpdater(projectBrowser);
projectNode.Expanding();
DirectoryNode directoryNode = GetFirstDirectoryChildNode(projectNode);
directoryNode.Expanding();
AddDirectoryToProject(@"d:\projects\MyProject\Subfolder1\b");
DirectoryNode childDirectoryNode = GetDirectoryChildNodeAtIndex(directoryNode, 1);
Assert.AreEqual(@"d:\projects\MyProject\Subfolder1\b", childDirectoryNode.Directory);
}
}
}

Loading…
Cancel
Save