diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
index bc348eef6f..a968c2bd96 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
@@ -215,18 +215,27 @@ namespace ICSharpCode.SharpDevelop.Project
canLabelEdit = true;
}
- public DirectoryNode(string directory) : this(directory, FileNodeStatus.None)
+ public DirectoryNode(string directory)
+ : this(directory, FileNodeStatus.None)
{
sortOrder = 1;
canLabelEdit = true;
}
- CustomNode removeMe = null;
+
public DirectoryNode(string directory, FileNodeStatus fileNodeStatus)
+ : this(directory, fileNodeStatus, null)
+ {
+ }
+
+ CustomNode removeMe = null;
+
+ public DirectoryNode(string directory, FileNodeStatus fileNodeStatus, ProjectItem projectItem)
{
sortOrder = 1;
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode";
- this.Directory = directory;
+ this.Directory = directory.Trim('\\', '/');
this.fileNodeStatus = fileNodeStatus;
+ this.ProjectItem = projectItem;
removeMe = new CustomNode();
removeMe.AddTo(this);
@@ -235,24 +244,6 @@ namespace ICSharpCode.SharpDevelop.Project
canLabelEdit = true;
}
- ///
- /// Determines if the specified is a
- /// web reference folder in the specified .
- ///
- /// The project.
- /// The full folder path.
- public static bool IsWebReferencesFolder(IProject project, string folder)
- {
- foreach (ProjectItem item in project.Items) {
- if (item.ItemType == ItemType.WebReferences) {
- if (FileUtility.IsEqualFileName(Path.Combine(project.Directory, item.Include), folder)) {
- return true;
- }
- }
- }
- return false;
- }
-
public void RecreateSubNodes()
{
invisibleNodes.Clear();
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs
index 19dc2939db..a811d33c94 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs
@@ -18,36 +18,34 @@ namespace ICSharpCode.SharpDevelop.Project
{
public static DirectoryNode CreateDirectoryNode(TreeNode parent, IProject project, string directory)
{
- DirectoryNode node = new DirectoryNode(directory);
- if (!string.IsNullOrEmpty(project.AppDesignerFolder)
- && directory == Path.Combine(project.Directory, project.AppDesignerFolder))
- {
- node.SpecialFolder = SpecialFolder.AppDesigner;
- } else if (DirectoryNode.IsWebReferencesFolder(project, directory)) {
- node = new WebReferencesFolderNode(directory);
- } else if (parent != null && parent is WebReferencesFolderNode) {
- node = new WebReferenceNode(directory);
+ if (IsAppDesignerFolder(project, directory)) {
+ return new DirectoryNode(directory) { SpecialFolder = SpecialFolder.AppDesigner };
+ } else if (WebReferencesProjectItem.IsWebReferencesFolder(project, directory)) {
+ return new WebReferencesFolderNode(directory);
+ } else if (parent is WebReferencesFolderNode) {
+ return new WebReferenceNode(directory);
} else if (ServiceReferencesProjectItem.IsServiceReferencesFolder(project, directory)) {
- node = new ServiceReferencesFolderNode(directory);
+ return new ServiceReferencesFolderNode(directory);
} else if (parent is ServiceReferencesFolderNode) {
- node = new ServiceReferenceNode(directory);
+ return new ServiceReferenceNode(directory);
}
- return node;
+ return new DirectoryNode(directory);
+ }
+
+ static bool IsAppDesignerFolder(IProject project, string directory)
+ {
+ return !String.IsNullOrEmpty(project.AppDesignerFolder) &&
+ directory == Path.Combine(project.Directory, project.AppDesignerFolder);
}
public static DirectoryNode CreateDirectoryNode(ProjectItem item, FileNodeStatus status)
{
- DirectoryNode node;
if (item is WebReferencesProjectItem) {
- node = new WebReferencesFolderNode((WebReferencesProjectItem)item);
- node.FileNodeStatus = status;
+ return new WebReferencesFolderNode((WebReferencesProjectItem)item, status);
} else if (item is ServiceReferencesProjectItem) {
- node = new ServiceReferencesFolderNode(item, status);
- } else {
- node = new DirectoryNode(item.FileName.Trim('\\', '/'), status);
- node.ProjectItem = item;
+ return new ServiceReferencesFolderNode(item, status);
}
- return node;
+ return new DirectoryNode(item.FileName, status, item);
}
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs
index 5b5966aa39..cd8ddead0f 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs
@@ -7,16 +7,29 @@ namespace ICSharpCode.SharpDevelop.Project
{
public class WebReferencesFolderNode : DirectoryNode
{
- public WebReferencesFolderNode(WebReferencesProjectItem projectItem) : this(projectItem.Directory)
+ public WebReferencesFolderNode(WebReferencesProjectItem projectItem)
+ : this(projectItem, FileNodeStatus.None)
+ {
+ }
+
+ public WebReferencesFolderNode(WebReferencesProjectItem projectItem, FileNodeStatus status)
+ : this(projectItem.Directory, status)
{
ProjectItem = projectItem;
}
- public WebReferencesFolderNode(string directory) : base(directory)
+ public WebReferencesFolderNode(string directory)
+ : this(directory, FileNodeStatus.None)
+ {
+ }
+
+ public WebReferencesFolderNode(string directory, FileNodeStatus status)
+ : base(directory)
{
+ ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferencesFolderNode";
+ FileNodeStatus = status;
sortOrder = 0;
SpecialFolder = SpecialFolder.WebReferencesFolder;
- ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferencesFolderNode";
}
}
}
diff --git a/src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs
index 82b3cc4472..60570be9d2 100644
--- a/src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs
+++ b/src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs
@@ -5,11 +5,14 @@ using System;
using System.ComponentModel;
using System.IO;
+using ICSharpCode.Core;
+
namespace ICSharpCode.SharpDevelop.Project
{
public sealed class WebReferencesProjectItem : FileProjectItem
{
- public WebReferencesProjectItem(IProject project) : base(project, ItemType.WebReferences)
+ public WebReferencesProjectItem(IProject project)
+ : base(project, ItemType.WebReferences)
{
}
@@ -20,9 +23,29 @@ namespace ICSharpCode.SharpDevelop.Project
[Browsable(false)]
public string Directory {
- get {
- return Path.Combine(Project.Directory, Include).Trim('\\', '/');
+ get { return Path.Combine(Project.Directory, Include).Trim('\\', '/'); }
+ }
+
+ ///
+ /// Determines if the specified is a
+ /// web reference folder in the specified .
+ ///
+ /// The project.
+ /// The full folder path.
+ public static bool IsWebReferencesFolder(IProject project, string folder)
+ {
+ foreach (ProjectItem item in project.GetItemsOfType(ItemType.WebReferences)) {
+ var webReference = item as WebReferencesProjectItem;
+ if (webReference.IsDirectoryMatch(folder)) {
+ return true;
+ }
}
+ return false;
+ }
+
+ public bool IsDirectoryMatch(string directory)
+ {
+ return FileUtility.IsEqualFileName(this.Directory, directory);
}
}
}
diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
index 6d1e1eeb0d..1b4da9d50d 100644
--- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
+++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
@@ -118,14 +118,14 @@
-
+
-
+
diff --git a/src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs b/src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs
index 558c78a193..dfb79287b4 100644
--- a/src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs
@@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
return projectItem;
}
+ FileProjectItem CreateFileProjectItem(string include)
+ {
+ return new FileProjectItem(project, ItemType.None, include);
+ }
+
[Test]
public void CreateDirectoryNode_WCFMetadataProjectItem_CreatesServiceReferencesFolderNode()
{
@@ -91,5 +96,29 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual(directory, referencesNode.Directory);
}
+
+ [Test]
+ public void CreateDirectoryNode_FileProjectItemThatEndsWithForwardSlash_DirectoryNodeCreatedWithForwardSlashRemoved()
+ {
+ CreateProject();
+ project.FileName = @"d:\projects\MyProject\MyProject.csproj";
+ FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder/");
+
+ DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None);
+
+ Assert.AreEqual(@"d:\projects\MyProject\MyFolder", node.Directory);
+ }
+
+ [Test]
+ public void CreateDirectoryNode_FileProjectItemThatEndsWithBackSlash_DirectoryNodeCreatedWithBackSlashRemoved()
+ {
+ CreateProject();
+ project.FileName = @"d:\projects\MyProject\MyProject.csproj";
+ FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder\");
+
+ DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None);
+
+ Assert.AreEqual(@"d:\projects\MyProject\MyFolder", node.Directory);
+ }
}
}
diff --git a/src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs b/src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs
index 2810dcb442..1edb1b5e0b 100644
--- a/src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs
+++ b/src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs
@@ -91,7 +91,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
[Test]
public void WebReferencesFolderNodeDirectory()
{
- Assert.AreEqual(Path.Combine(projectDirectory, "Web References\\"), webReferencesFolderNode.Directory);
+ Assert.AreEqual(Path.Combine(projectDirectory, "Web References"), webReferencesFolderNode.Directory);
}
[Test]
diff --git a/src/Main/Base/Test/WebReferences/IsWebReferencesFolderTests.cs b/src/Main/Base/Test/WebReferences/IsWebReferencesFolderTests.cs
deleted file mode 100644
index 514e8cb0a6..0000000000
--- a/src/Main/Base/Test/WebReferences/IsWebReferencesFolderTests.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
-// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
-
-using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Project;
-using NUnit.Framework;
-using System;
-
-namespace ICSharpCode.SharpDevelop.Tests.WebReferences
-{
- ///
- /// Tests the DirectoryNode.IsWebReferencesFolder method.
- ///
- [TestFixture]
- public class IsWebReferencesFolderTests
- {
- [Test]
- public void IsWebReferencesFolder1()
- {
- MSBuildBasedProject p = WebReferenceTestHelper.CreateTestProject("C#");
- p.FileName = "C:\\projects\\test\\foo.csproj";
- WebReferencesProjectItem item = new WebReferencesProjectItem(p);
- item.Include = "Web References\\";
- ProjectService.AddProjectItem(p, item);
-
- Assert.IsTrue(DirectoryNode.IsWebReferencesFolder(p, "C:\\projects\\test\\Web References"));
- }
-
- [Test]
- public void IsNotWebReferencesFolder1()
- {
- MSBuildBasedProject p = WebReferenceTestHelper.CreateTestProject("C#");
- p.FileName = "C:\\projects\\test\\foo.csproj";
- WebReferencesProjectItem item = new WebReferencesProjectItem(p);
- item.Include = "Web References\\";
- ProjectService.AddProjectItem(p, item);
-
- Assert.IsFalse(DirectoryNode.IsWebReferencesFolder(p, "C:\\projects\\test\\foo"));
- }
-
- }
-}
diff --git a/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs b/src/Main/Base/Test/WebReferences/WebReferenceTests.cs
similarity index 99%
rename from src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs
rename to src/Main/Base/Test/WebReferences/WebReferenceTests.cs
index b3d7f24d38..0525b71424 100644
--- a/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs
+++ b/src/Main/Base/Test/WebReferences/WebReferenceTests.cs
@@ -17,7 +17,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
/// Tests the generated project items for a web reference.
///
[TestFixture]
- public class WebReferenceProjectItemsTest
+ public class WebReferenceTests
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
diff --git a/src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs b/src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs
new file mode 100644
index 0000000000..928ccbb9a6
--- /dev/null
+++ b/src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs
@@ -0,0 +1,53 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.SharpDevelop.Project;
+using NUnit.Framework;
+using System;
+
+namespace ICSharpCode.SharpDevelop.Tests.WebReferences
+{
+ [TestFixture]
+ public class WebReferencesProjectItemTests
+ {
+ MSBuildBasedProject project;
+
+ void CreateProject()
+ {
+ project = WebReferenceTestHelper.CreateTestProject("C#");
+ }
+
+ WebReferencesProjectItem AddWebReferencesToProject(string include)
+ {
+ var item = new WebReferencesProjectItem(project);
+ item.Include = @"Web References\";
+ ProjectService.AddProjectItem(project, item);
+ return item;
+ }
+
+ [Test]
+ public void IsWebReferencesFolder_FolderMatchesWebReferencesProjectItemFolder_ReturnsTrue()
+ {
+ CreateProject();
+ project.FileName = @"C:\projects\test\foo.csproj";
+ AddWebReferencesToProject(@"Web References\");
+
+ bool result = WebReferencesProjectItem.IsWebReferencesFolder(project, @"C:\projects\test\Web References");
+
+ Assert.IsTrue(result);
+ }
+
+ [Test]
+ public void IsWebReferencesFolder_FolderDoesNotMatchWebReferencesProjectItemFolder_ReturnsFalse()
+ {
+ CreateProject();
+ project.FileName = @"C:\projects\test\foo.csproj";
+ AddWebReferencesToProject(@"Web References\");
+
+ bool result = WebReferencesProjectItem.IsWebReferencesFolder(project, @"C:\projects\test\foo");
+
+ Assert.IsFalse(result);
+ }
+ }
+}