Browse Source

Move check for web reference folder out of DirectoryNode.

pull/22/head
Matt Ward 14 years ago
parent
commit
adb253e5cc
  1. 33
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  2. 38
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs
  3. 19
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs
  4. 29
      src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs
  5. 4
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  6. 29
      src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs
  7. 2
      src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs
  8. 42
      src/Main/Base/Test/WebReferences/IsWebReferencesFolderTests.cs
  9. 2
      src/Main/Base/Test/WebReferences/WebReferenceTests.cs
  10. 53
      src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs

33
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -215,18 +215,27 @@ namespace ICSharpCode.SharpDevelop.Project
canLabelEdit = true; canLabelEdit = true;
} }
public DirectoryNode(string directory) : this(directory, FileNodeStatus.None) public DirectoryNode(string directory)
: this(directory, FileNodeStatus.None)
{ {
sortOrder = 1; sortOrder = 1;
canLabelEdit = true; canLabelEdit = true;
} }
CustomNode removeMe = null;
public DirectoryNode(string directory, FileNodeStatus fileNodeStatus) public DirectoryNode(string directory, FileNodeStatus fileNodeStatus)
: this(directory, fileNodeStatus, null)
{
}
CustomNode removeMe = null;
public DirectoryNode(string directory, FileNodeStatus fileNodeStatus, ProjectItem projectItem)
{ {
sortOrder = 1; sortOrder = 1;
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode"; ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FolderNode";
this.Directory = directory; this.Directory = directory.Trim('\\', '/');
this.fileNodeStatus = fileNodeStatus; this.fileNodeStatus = fileNodeStatus;
this.ProjectItem = projectItem;
removeMe = new CustomNode(); removeMe = new CustomNode();
removeMe.AddTo(this); removeMe.AddTo(this);
@ -235,24 +244,6 @@ namespace ICSharpCode.SharpDevelop.Project
canLabelEdit = true; canLabelEdit = true;
} }
/// <summary>
/// Determines if the specified <paramref name="folder"/> is a
/// web reference folder in the specified <paramref name="project"/>.
/// </summary>
/// <param name="project">The project.</param>
/// <param name="folder">The full folder path.</param>
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() public void RecreateSubNodes()
{ {
invisibleNodes.Clear(); invisibleNodes.Clear();

38
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) public static DirectoryNode CreateDirectoryNode(TreeNode parent, IProject project, string directory)
{ {
DirectoryNode node = new DirectoryNode(directory); if (IsAppDesignerFolder(project, directory)) {
if (!string.IsNullOrEmpty(project.AppDesignerFolder) return new DirectoryNode(directory) { SpecialFolder = SpecialFolder.AppDesigner };
&& directory == Path.Combine(project.Directory, project.AppDesignerFolder)) } else if (WebReferencesProjectItem.IsWebReferencesFolder(project, directory)) {
{ return new WebReferencesFolderNode(directory);
node.SpecialFolder = SpecialFolder.AppDesigner; } else if (parent is WebReferencesFolderNode) {
} else if (DirectoryNode.IsWebReferencesFolder(project, directory)) { return new WebReferenceNode(directory);
node = new WebReferencesFolderNode(directory);
} else if (parent != null && parent is WebReferencesFolderNode) {
node = new WebReferenceNode(directory);
} else if (ServiceReferencesProjectItem.IsServiceReferencesFolder(project, directory)) { } else if (ServiceReferencesProjectItem.IsServiceReferencesFolder(project, directory)) {
node = new ServiceReferencesFolderNode(directory); return new ServiceReferencesFolderNode(directory);
} else if (parent is ServiceReferencesFolderNode) { } 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) public static DirectoryNode CreateDirectoryNode(ProjectItem item, FileNodeStatus status)
{ {
DirectoryNode node;
if (item is WebReferencesProjectItem) { if (item is WebReferencesProjectItem) {
node = new WebReferencesFolderNode((WebReferencesProjectItem)item); return new WebReferencesFolderNode((WebReferencesProjectItem)item, status);
node.FileNodeStatus = status;
} else if (item is ServiceReferencesProjectItem) { } else if (item is ServiceReferencesProjectItem) {
node = new ServiceReferencesFolderNode(item, status); return new ServiceReferencesFolderNode(item, status);
} else {
node = new DirectoryNode(item.FileName.Trim('\\', '/'), status);
node.ProjectItem = item;
} }
return node; return new DirectoryNode(item.FileName, status, item);
} }
} }
} }

19
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs

@ -7,16 +7,29 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
public class WebReferencesFolderNode : DirectoryNode 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; 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; sortOrder = 0;
SpecialFolder = SpecialFolder.WebReferencesFolder; SpecialFolder = SpecialFolder.WebReferencesFolder;
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferencesFolderNode";
} }
} }
} }

29
src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs

@ -5,11 +5,14 @@ using System;
using System.ComponentModel; using System.ComponentModel;
using System.IO; using System.IO;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project namespace ICSharpCode.SharpDevelop.Project
{ {
public sealed class WebReferencesProjectItem : FileProjectItem 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)] [Browsable(false)]
public string Directory { public string Directory {
get { get { return Path.Combine(Project.Directory, Include).Trim('\\', '/'); }
return Path.Combine(Project.Directory, Include).Trim('\\', '/'); }
/// <summary>
/// Determines if the specified <paramref name="folder"/> is a
/// web reference folder in the specified <paramref name="project"/>.
/// </summary>
/// <param name="project">The project.</param>
/// <param name="folder">The full folder path.</param>
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);
} }
} }
} }

4
src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj

@ -118,14 +118,14 @@
<Compile Include="VBExpressionFinderTests.cs" /> <Compile Include="VBExpressionFinderTests.cs" />
<Compile Include="WebReferences\ValidReferenceNameTests.cs" /> <Compile Include="WebReferences\ValidReferenceNameTests.cs" />
<Compile Include="WebReferences\ValidWebReferenceNamespaceTests.cs" /> <Compile Include="WebReferences\ValidWebReferenceNamespaceTests.cs" />
<Compile Include="WebReferences\WebReferenceProjectItemsTest.cs" /> <Compile Include="WebReferences\WebReferenceTests.cs" />
<Compile Include="WebReferences\ProjectHasExistingWebRefFolderTest.cs" /> <Compile Include="WebReferences\ProjectHasExistingWebRefFolderTest.cs" />
<Compile Include="WebReferences\VBNetWebReferenceTest.cs" /> <Compile Include="WebReferences\VBNetWebReferenceTest.cs" />
<Compile Include="WebReferences\WebReferenceTestHelper.cs" /> <Compile Include="WebReferences\WebReferenceTestHelper.cs" />
<Compile Include="WebReferences\UnsupportedLanguageTest.cs" /> <Compile Include="WebReferences\UnsupportedLanguageTest.cs" />
<Compile Include="WebReferences\WebReferenceFolderAlreadyExistsTest.cs" /> <Compile Include="WebReferences\WebReferenceFolderAlreadyExistsTest.cs" />
<Compile Include="WebReferences\RenamedWebReferencesFolderTest.cs" /> <Compile Include="WebReferences\RenamedWebReferencesFolderTest.cs" />
<Compile Include="WebReferences\IsWebReferencesFolderTests.cs" /> <Compile Include="WebReferences\WebReferencesProjectItemTests.cs" />
<Compile Include="WebReferences\WebReferenceProjectItemsCachedTest.cs" /> <Compile Include="WebReferences\WebReferenceProjectItemsCachedTest.cs" />
<Compile Include="WebReferences\DirectoryNodeFactoryTests.cs" /> <Compile Include="WebReferences\DirectoryNodeFactoryTests.cs" />
<Compile Include="WebReferences\WebReferenceUrlTests.cs" /> <Compile Include="WebReferences\WebReferenceUrlTests.cs" />

29
src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs

@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
return projectItem; return projectItem;
} }
FileProjectItem CreateFileProjectItem(string include)
{
return new FileProjectItem(project, ItemType.None, include);
}
[Test] [Test]
public void CreateDirectoryNode_WCFMetadataProjectItem_CreatesServiceReferencesFolderNode() public void CreateDirectoryNode_WCFMetadataProjectItem_CreatesServiceReferencesFolderNode()
{ {
@ -91,5 +96,29 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual(directory, referencesNode.Directory); 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);
}
} }
} }

2
src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs

@ -91,7 +91,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
[Test] [Test]
public void WebReferencesFolderNodeDirectory() public void WebReferencesFolderNodeDirectory()
{ {
Assert.AreEqual(Path.Combine(projectDirectory, "Web References\\"), webReferencesFolderNode.Directory); Assert.AreEqual(Path.Combine(projectDirectory, "Web References"), webReferencesFolderNode.Directory);
} }
[Test] [Test]

42
src/Main/Base/Test/WebReferences/IsWebReferencesFolderTests.cs

@ -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
{
/// <summary>
/// Tests the DirectoryNode.IsWebReferencesFolder method.
/// </summary>
[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"));
}
}
}

2
src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs → 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. /// Tests the generated project items for a web reference.
/// </summary> /// </summary>
[TestFixture] [TestFixture]
public class WebReferenceProjectItemsTest public class WebReferenceTests
{ {
SD.WebReference webReference; SD.WebReference webReference;
DiscoveryClientProtocol protocol; DiscoveryClientProtocol protocol;

53
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);
}
}
}
Loading…
Cancel
Save