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 @@ -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 @@ -235,24 +244,6 @@ namespace ICSharpCode.SharpDevelop.Project
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()
{
invisibleNodes.Clear();

38
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs

@ -18,36 +18,34 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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 new DirectoryNode(directory);
}
return node;
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);
}
}
}

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

@ -7,16 +7,29 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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";
}
}
}

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

@ -5,11 +5,14 @@ using System; @@ -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 @@ -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('\\', '/'); }
}
/// <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 @@ @@ -118,14 +118,14 @@
<Compile Include="VBExpressionFinderTests.cs" />
<Compile Include="WebReferences\ValidReferenceNameTests.cs" />
<Compile Include="WebReferences\ValidWebReferenceNamespaceTests.cs" />
<Compile Include="WebReferences\WebReferenceProjectItemsTest.cs" />
<Compile Include="WebReferences\WebReferenceTests.cs" />
<Compile Include="WebReferences\ProjectHasExistingWebRefFolderTest.cs" />
<Compile Include="WebReferences\VBNetWebReferenceTest.cs" />
<Compile Include="WebReferences\WebReferenceTestHelper.cs" />
<Compile Include="WebReferences\UnsupportedLanguageTest.cs" />
<Compile Include="WebReferences\WebReferenceFolderAlreadyExistsTest.cs" />
<Compile Include="WebReferences\RenamedWebReferencesFolderTest.cs" />
<Compile Include="WebReferences\IsWebReferencesFolderTests.cs" />
<Compile Include="WebReferences\WebReferencesProjectItemTests.cs" />
<Compile Include="WebReferences\WebReferenceProjectItemsCachedTest.cs" />
<Compile Include="WebReferences\DirectoryNodeFactoryTests.cs" />
<Compile Include="WebReferences\WebReferenceUrlTests.cs" />

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

@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -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 @@ -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);
}
}
}

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

@ -91,7 +91,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences @@ -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]

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

@ -1,42 +0,0 @@ @@ -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 @@ -17,7 +17,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
/// Tests the generated project items for a web reference.
/// </summary>
[TestFixture]
public class WebReferenceProjectItemsTest
public class WebReferenceTests
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;

53
src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs

@ -0,0 +1,53 @@ @@ -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