Browse Source

Added support for web references.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@955 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 20 years ago
parent
commit
533efc470c
  1. 68
      AddIns/ICSharpCode.SharpDevelop.addin
  2. BIN
      data/resources/StringResources.cn-big.resources
  3. BIN
      data/resources/StringResources.cz.resources
  4. BIN
      data/resources/StringResources.de.resources
  5. BIN
      data/resources/StringResources.dk.resources
  6. BIN
      data/resources/StringResources.fi.resources
  7. BIN
      data/resources/StringResources.fr.resources
  8. BIN
      data/resources/StringResources.hu.resources
  9. BIN
      data/resources/StringResources.it.resources
  10. BIN
      data/resources/StringResources.pl.resources
  11. BIN
      data/resources/StringResources.pt-br.resources
  12. BIN
      data/resources/StringResources.pt.resources
  13. BIN
      data/resources/StringResources.ro.resources
  14. BIN
      data/resources/StringResources.tr.resources
  15. 9
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
  16. 2
      src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml
  17. 2
      src/Libraries/ICSharpCode.TextEditor/Project/Resources/XML-Mode.xshd
  18. 8
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  19. 1339
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AddWebReferenceDialog.cs
  20. 735
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs
  21. 54
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReferenceChanges.cs
  22. 265
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebServicesView.cs
  23. 165
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs
  24. 40
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/NodeBuilder/WebReferenceNodeBuilder.cs
  25. 78
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  26. 26
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferenceNode.cs
  27. 26
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferencesFolderNode.cs
  28. 4
      src/Main/Base/Project/Src/Project/Items/ProjectItemFactory.cs
  29. 17
      src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs
  30. 27
      src/Main/Base/Project/Src/Project/Items/WebReferencesProjectItem.cs
  31. 52
      src/Main/Base/Project/Src/Project/WebReferenceUrl.cs
  32. 16
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  33. 168
      src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs
  34. 46
      src/Main/Base/Test/WebReferences/IsWebReferencesFolderTests.cs
  35. 73
      src/Main/Base/Test/WebReferences/ProjectHasExistingWebRefFolderTest.cs
  36. 94
      src/Main/Base/Test/WebReferences/ProjectWebReferenceItemsTests.cs
  37. 64
      src/Main/Base/Test/WebReferences/RenamedWebReferencesFolderTest.cs
  38. 60
      src/Main/Base/Test/WebReferences/UnsupportedLanguageTest.cs
  39. 65
      src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs
  40. 127
      src/Main/Base/Test/WebReferences/WebReferenceChangesTest.cs
  41. 127
      src/Main/Base/Test/WebReferences/WebReferenceFolderAlreadyExistsTest.cs
  42. 70
      src/Main/Base/Test/WebReferences/WebReferenceProjectItemsCachedTest.cs
  43. 209
      src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs
  44. 85
      src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs
  45. 59
      src/Main/Base/Test/WebReferences/WebReferenceUrlTests.cs
  46. 98
      src/Main/Base/Test/WebReferences/WebServicesReferenceExistsTests.cs
  47. BIN
      src/Main/StartUp/Project/Resources/StringResources.resources
  48. 2
      src/SharpDevelop.Tests.sln

68
AddIns/ICSharpCode.SharpDevelop.addin

@ -283,6 +283,9 @@ @@ -283,6 +283,9 @@
<MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/>
<MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
<MenuItem id = "AddSeparator" type = "Separator"/>
<Include id = "ProjectActions" path="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectActions"/>
<MenuItem id = "Separator2" type = "Separator"/>
@ -334,6 +337,9 @@ @@ -334,6 +337,9 @@
<MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/>
<MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
</Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/FileNode">
@ -506,6 +512,68 @@ @@ -506,6 +512,68 @@
</ComplexCondition>
</Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferencesFolderNode">
<Condition name = "Ownerstate" ownerstate = "Missing">
<MenuItem id = "RemoveMissing"
label = "${res:Global.RemoveButtonText}"
type = "Item"
icon = "Icons.16x16.DeleteIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
</Condition>
<ComplexCondition>
<Not>
<Condition name = "Ownerstate" ownerstate = "Missing"/>
</Not>
<MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
<MenuItem id = "AddSeparator" type = "Separator"/>
<MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}"
type = "Item"
icon = "Icons.16x16.DeleteIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
<MenuItem id = "Rename"
label = "${res:ProjectComponent.ContextMenu.Rename}"
shortcut = "F2"
class = "ICSharpCode.SharpDevelop.Project.Commands.RenameEntryEvent"/>
</ComplexCondition>
</Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferenceNode">
<Condition name = "Ownerstate" ownerstate = "Missing">
<MenuItem id = "RemoveMissing"
label = "${res:Global.RemoveButtonText}"
type = "Item"
icon = "Icons.16x16.DeleteIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
</Condition>
<ComplexCondition>
<Not>
<Condition name = "Ownerstate" ownerstate = "Missing"/>
</Not>
<MenuItem id = "Refresh"
label = "${res:ProjectComponent.ContextMenu.RefreshWebReference}"
type = "Item"
class = "ICSharpCode.SharpDevelop.Project.Commands.RefreshWebReference"/>
<MenuItem id = "RefreshSeparator" type = "Separator" />
<MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}"
type = "Item"
icon = "Icons.16x16.DeleteIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
<MenuItem id = "Rename"
label = "${res:ProjectComponent.ContextMenu.Rename}"
shortcut = "F2"
class = "ICSharpCode.SharpDevelop.Project.Commands.RenameEntryEvent"/>
<MenuItem id = "PropertiesSeparator" type = "Separator" />
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
</ComplexCondition>
</Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ReferenceNode">
<MenuItem id = "OpenFile"
label = "${res:ProjectComponent.ContextMenu.Open}"

BIN
data/resources/StringResources.cn-big.resources

Binary file not shown.

BIN
data/resources/StringResources.cz.resources

Binary file not shown.

BIN
data/resources/StringResources.de.resources

Binary file not shown.

BIN
data/resources/StringResources.dk.resources

Binary file not shown.

BIN
data/resources/StringResources.fi.resources

Binary file not shown.

BIN
data/resources/StringResources.fr.resources

Binary file not shown.

BIN
data/resources/StringResources.hu.resources

Binary file not shown.

BIN
data/resources/StringResources.it.resources

Binary file not shown.

BIN
data/resources/StringResources.pl.resources

Binary file not shown.

BIN
data/resources/StringResources.pt-br.resources

Binary file not shown.

BIN
data/resources/StringResources.pt.resources

Binary file not shown.

BIN
data/resources/StringResources.ro.resources

Binary file not shown.

BIN
data/resources/StringResources.tr.resources

Binary file not shown.

9
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin

@ -25,10 +25,17 @@ @@ -25,10 +25,17 @@
<!-- Xml parser used to initiate the folding update -->
<Path name = "/Workspace/Parser">
<Parser id = "XmlFoldingParser"
supportedextensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xaml;.xpt;.xft"
supportedextensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco"
class = "ICSharpCode.XmlEditor.Parser"/>
</Path>
<!-- Extra project browser icons -->
<Path name = "/Workspace/Icons">
<Icon id = "ExtraXmlFileIcon"
extensions = ".manifest;.config;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco"
resource = "FileIcons.XmlIcon" />
</Path>
<!-- Xml file filter -->
<Path name = "/SharpDevelop/Workbench/FileFilter">
<FileFilter id = "Xml"

2
src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml

@ -49,5 +49,5 @@ @@ -49,5 +49,5 @@
<Mode file = "XML-Mode.xshd"
name = "XML"
extensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft"/>
extensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco"/>
</SyntaxModes>

2
src/Libraries/ICSharpCode.TextEditor/Project/Resources/XML-Mode.xshd

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<?xml version="1.0" ?>
<!-- syntaxdefinition for XML 2000 by Mike Krueger -->
<SyntaxDefinition name="XML" extensions=".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft">
<SyntaxDefinition name="XML" extensions=".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco">
<Properties>
<Property name="BlockCommentBegin" value="&lt;!--"/>

8
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -235,7 +235,6 @@ @@ -235,7 +235,6 @@
<Compile Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\SelectStylePanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\AddWebReferenceDialog.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\AssemblyReferencePanel.cs">
<SubType>Component</SubType>
</Compile>
@ -734,6 +733,13 @@ @@ -734,6 +733,13 @@
<Compile Include="Src\Gui\Pads\TaskList\TaskListPad.cs" />
<Compile Include="Src\Project\MSBuildFile.cs" />
<Compile Include="Src\Gui\FormLocationHelper.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\AddWebReferenceDialog.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\WebServicesView.cs" />
<Compile Include="Src\Project\Items\WebReferencesProjectItem.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\NodeBuilder\WebReferenceNodeBuilder.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\WebReferencesFolderNode.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\WebReferenceNode.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\WebReferenceChanges.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\CodeGenerationForm.cs" />
</ItemGroup>
<ItemGroup>

1339
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AddWebReferenceDialog.cs

File diff suppressed because it is too large Load Diff

735
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs

@ -1,287 +1,448 @@ @@ -1,287 +1,448 @@
//// created on 10/11/2002 at 2:08 PM
//
//using System;
//using System.Collections;
//using System.IO;
//using System.Text;
//using System.Runtime.InteropServices;
//using System.Diagnostics;
//using System.Xml;
//using System.Net;
//using System.Web.Services.Description;
//using System.CodeDom;
//using System.CodeDom.Compiler;
//using System.Reflection;
//
//using ICSharpCode.SharpDevelop.Project;
//using ICSharpCode.Core;
//
//namespace ICSharpCode.SharpDevelop.Gui
//{
// /// <summary>
// /// Summary description for WebReference.
// /// </summary>
// public class WebReference
// {
// ///
// /// <summary>Creates a ServiceDescription object from a valid URI</summary>
// ///
// public static ServiceDescription ReadServiceDescription(string uri) {
// ServiceDescription desc = null;
//
// try {
// HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
// WebResponse response = request.GetResponse();
//
// desc = ServiceDescription.Read(response.GetResponseStream());
// response.Close();
// desc.RetrievalUrl = uri;
// } catch (Exception) {
// // possibly error reading WSDL?
// return null;
// }
// if(desc.Services.Count == 0)
// return null;
//
// return desc;
// }
//
// ///
// /// <summary>Generates a valid directory from a URI</summary>
// ///
// public static string GetDirectoryFromUri(string uri) {
// // TODO: construct the namespace using th URL in the WSDL
// string tmp = uri;
// if(uri.IndexOf("://") > -1) {
// tmp = uri.Substring(uri.IndexOf("://") + 3);
// }
// tmp = tmp.Substring(0, tmp.LastIndexOf("/"));
// string[] dirs = tmp.Split(new Char[] {'/'});
//
// StringBuilder savedir = new StringBuilder();
// savedir.Append(dirs[0]);
//
// return savedir.ToString();
// }
//
// ///
// /// <summary>Generates a valid Namespace from a URI</summary>
// ///
// public static string GetNamespaceFromUri(string uri) {
// // TODO: construct the namespace using th URL in the WSDL
// string tmp = uri;
// if(uri.IndexOf("://") > -1) {
// tmp = uri.Substring(uri.IndexOf("://") + 3);
// }
// tmp = tmp.Substring(0, tmp.LastIndexOf("/"));
// string[] dirs = tmp.Split(new Char[] {'/'});
//
// return(dirs[0]);
// }
//
//// public static ProjectReference GenerateWebProxyDLL(IProject project, ServiceDescription desc) {
//// ProjectReference refInfo = null;
////
//// string serviceName = String.Empty;
//// if(desc.Services.Count > 0) {
//// serviceName = desc.Services[0].Name;
//// } else {
//// serviceName = "UnknownService";
//// }
////
//// string nmspace = GetNamespaceFromUri(desc.RetrievalUrl);
////
//// StringBuilder savedir = new StringBuilder();
//// savedir.Append(project.BaseDirectory);
//// savedir.Append(Path.DirectorySeparatorChar);
//// savedir.Append("WebReferences");
//// // second, create the path if it doesn't exist
//// DirectoryInfo di;
//// if(!Directory.Exists(savedir.ToString()))
//// {
//// di = Directory.CreateDirectory(savedir.ToString());
//// }
////
//// // generate the assembly
//// ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
//// importer.AddServiceDescription(desc, null, null);
////
//// CodeNamespace codeNamespace = new CodeNamespace(nmspace);
//// CodeCompileUnit codeUnit = new CodeCompileUnit();
//// codeUnit.Namespaces.Add(codeNamespace);
//// ServiceDescriptionImportWarnings warnings = importer.Import(codeNamespace, codeUnit);
////
//// CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
//// System.CodeDom.Compiler.ICodeCompiler compiler;
////
////
//// if(provider != null) {
//// compiler = provider.CreateCompiler();
//// CompilerParameters parms = new CompilerParameters();
//// parms.ReferencedAssemblies.Add("System.Dll");
//// parms.ReferencedAssemblies.Add("System.Xml.Dll");
//// parms.ReferencedAssemblies.Add("System.Web.Services.Dll");
//// parms.OutputAssembly = project.BaseDirectory + Path.DirectorySeparatorChar + "WebReferences" + Path.DirectorySeparatorChar + nmspace + ".Reference.Dll";
//// CompilerResults results = compiler.CompileAssemblyFromDom(parms, codeUnit);
//// Assembly assembly = results.CompiledAssembly;
////
//// if(assembly != null) {
//// refInfo = new ProjectReference();
//// refInfo.ReferenceType = ReferenceType.Assembly;
//// refInfo.Reference = parms.OutputAssembly;
//// }
//// }
////
//// return refInfo;
//// }
////
//// ///
//// /// <summary>Generates a Web Service proxy DLL from a URI</summary>
//// ///
//// public static ProjectReference GenerateWebProxyDLL(IProject project, string url) {
////
//// ServiceDescription desc = ReadServiceDescription(url);
//// return GenerateWebProxyDLL(project, desc);
////
//// }
////
//// public static ArrayList GenerateWebProxyCode(IProject project, ServiceDescription desc)
//// {
//// ArrayList fileList = null;
////
////
//// string serviceName = String.Empty;
//// if(desc.Services.Count > 0) {
//// serviceName = desc.Services[0].Name;
//// } else {
//// serviceName = "UnknownService";
//// }
////
//// string webRefFolder = "Web References";
//// string nmspace = GetNamespaceFromUri(desc.RetrievalUrl);
////
//// StringBuilder savedir = new StringBuilder();
//// savedir.Append(project.BaseDirectory);
//// savedir.Append(Path.DirectorySeparatorChar);
//// savedir.Append(webRefFolder);
//// savedir.Append(Path.DirectorySeparatorChar);
//// savedir.Append(GetDirectoryFromUri(desc.RetrievalUrl) + Path.DirectorySeparatorChar + serviceName);
////
//// // second, create the path if it doesn't exist
//// DirectoryInfo di;
//// if(!Directory.Exists(savedir.ToString()))
//// {
//// di = Directory.CreateDirectory(savedir.ToString());
//// }
////
//// // generate the assembly
//// ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
//// importer.AddServiceDescription(desc, null, null);
////
//// CodeNamespace codeNamespace = new CodeNamespace(nmspace);
//// CodeCompileUnit codeUnit = new CodeCompileUnit();
//// codeUnit.Namespaces.Add(codeNamespace);
//// ServiceDescriptionImportWarnings warnings = importer.Import(codeNamespace, codeUnit);
////
//// CodeDomProvider provider;
//// System.CodeDom.Compiler.ICodeGenerator generator;
////
//// String ext = String.Empty;
//// switch(project.ProjectType) {
//// case "C#":
//// provider = new Microsoft.CSharp.CSharpCodeProvider();
//// ext = "cs";
//// break;
//// case "VBNET":
//// provider = new Microsoft.VisualBasic.VBCodeProvider();
//// ext = "vb";
//// break;
////
//// default:
//// // project type not supported error
//// provider = null;
//// break;
//// }
////
//// string filename = savedir.ToString() + Path.DirectorySeparatorChar + serviceName + "WebProxy." + ext;
//// string wsdlfilename = savedir.ToString() + Path.DirectorySeparatorChar + serviceName + ".wsdl";
////
//// if(provider != null) {
//// StreamWriter sw = new StreamWriter(filename);
////
//// generator = provider.CreateGenerator();
//// CodeGeneratorOptions options = new CodeGeneratorOptions();
//// options.BracingStyle = "C";
//// generator.GenerateCodeFromCompileUnit(codeUnit, sw, options);
//// sw.Close();
////
//// if(File.Exists(filename))
//// {
//// fileList = new ArrayList();
////
//// // add project files to the list
//// ProjectFile pfile = new ProjectFile();
////
//// pfile.Name = project.BaseDirectory + Path.DirectorySeparatorChar + webRefFolder;
//// pfile.BuildAction = BuildAction.Nothing;
//// pfile.Subtype = Subtype.WebReferences;
//// pfile.DependsOn = String.Empty;
//// pfile.Data = String.Empty;
//// fileList.Add(pfile);
////
//// /*
//// pfile = new ProjectFile();
//// pfile.Name = project.BaseDirectory + @"\Web References\" + nmspace;
//// pfile.BuildAction = BuildAction.Nothing;
//// pfile.Subtype = Subtype.Directory;
//// pfile.DependsOn = project.BaseDirectory + @"\Web References\";
//// pfile.WebReferenceUrl = String.Empty;
//// fileList.Add(pfile);
//// */
//// /*
//// pfile = new ProjectFile();
//// pfile.Name = project.BaseDirectory + @"\Web References\" + nmspace + @"\" + serviceName;
//// pfile.BuildAction = BuildAction.Nothing;
//// pfile.Subtype = Subtype.Directory;
//// pfile.DependsOn = project.BaseDirectory + @"\Web References\" + nmspace + @"\";
//// pfile.WebReferenceUrl = desc.RetrievalUrl;
//// fileList.Add(pfile);
//// */
//// // the Web Reference Proxy
//// pfile = new ProjectFile();
//// pfile.Name = filename;
//// pfile.BuildAction = BuildAction.Compile;
//// pfile.Subtype = Subtype.Code;
//// pfile.DependsOn = project.BaseDirectory + Path.DirectorySeparatorChar + webRefFolder;
//// pfile.Data = desc.RetrievalUrl;
//// fileList.Add(pfile);
////
//// // the WSDL File used to generate the Proxy
//// desc.Write(wsdlfilename);
//// pfile = new ProjectFile();
//// pfile.Name = wsdlfilename;
//// pfile.BuildAction = BuildAction.Nothing;
//// pfile.Subtype = Subtype.Code;
//// pfile.DependsOn = project.BaseDirectory + Path.DirectorySeparatorChar + webRefFolder;
//// pfile.Data = desc.RetrievalUrl;
//// fileList.Add(pfile);
//// }
//// }
////
//// return fileList;
//// }
////
//// ///
//// /// <summary>Generates a Web Service proxy class from a URI</summary>
//// ///
//// public static ArrayList GenerateWebProxyCode(IProject project, string url) {
////
////
//// ServiceDescription desc = ReadServiceDescription(url);
////
//// return GenerateWebProxyCode(project, desc);
////
////
//// }
// }
//}
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace ICSharpCode.SharpDevelop.Gui
{
public class WebReference
{
List<ProjectItem> items;
string url = String.Empty;
string relativePath = String.Empty;
DiscoveryClientProtocol protocol;
IProject project;
string webReferencesDirectory = String.Empty;
string proxyNamespace = String.Empty;
string name = String.Empty;
WebReferenceUrl webReferenceUrl;
public WebReference(IProject project, string url, string name, string proxyNamespace, DiscoveryClientProtocol protocol)
{
this.project = project;
this.url = url;
this.protocol = protocol;
this.proxyNamespace = proxyNamespace;
this.name = name;
GetRelativePath();
}
public static bool ProjectContainsWebReferencesFolder(IProject project)
{
return GetWebReferencesProjectItem(project) != null;
}
/// <summary>
/// Checks that the project has the System.Web.Services assembly referenced.
/// </summary>
/// <param name="project"></param>
/// <returns></returns>
public static bool ProjectContainsWebServicesReference(IProject project)
{
foreach (ProjectItem item in project.Items) {
if (item.ItemType == ItemType.Reference && item.Include != null) {
if (item.Include.Trim().StartsWith("System.Web.Services", StringComparison.InvariantCultureIgnoreCase)) {
return true;
}
}
}
return false;
}
public static WebReferencesProjectItem GetWebReferencesProjectItem(IProject project)
{
return GetWebReferencesProjectItem(project.Items);
}
/// <summary>
/// Returns the reference name. If the folder that will contain the
/// web reference already exists this method looks for a new folder by
/// adding a digit to the end of the reference name.
/// </summary>
public static string GetReferenceName(string webReferenceFolder, string name)
{
// If it is already in the project, or it does exists we get a new name.
int count = 1;
string referenceName = name;
string folder = Path.Combine(webReferenceFolder, name);
while (System.IO.Directory.Exists(folder)) {
referenceName = String.Concat(name, count.ToString());
folder = Path.Combine(webReferenceFolder, referenceName);
++count;
}
return referenceName;
}
/// <summary>
/// Gets all the file items that belong to the named web reference in
/// the specified project.
/// </summary>
/// <param name="name">The name of the web reference to look for. This is
/// not the full path of the web reference, just the last folder's name.</param>
/// <remarks>
/// This method does not return the WebReferenceUrl project item only the
/// files that are part of the web reference.
/// </remarks>
public static List<ProjectItem> GetFileItems(IProject project, string name)
{
List<ProjectItem> items = new List<ProjectItem>();
// Find web references folder.
WebReferencesProjectItem webReferencesProjectItem = GetWebReferencesProjectItem(project);
if (webReferencesProjectItem != null) {
// Look for files that are in the web reference folder.
string webReferenceDirectory = Path.Combine(Path.Combine(project.Directory, webReferencesProjectItem.Include), name);
foreach (ProjectItem item in project.Items) {
FileProjectItem fileItem = item as FileProjectItem;
if (fileItem != null) {
if (FileUtility.IsBaseDirectory(webReferenceDirectory, fileItem.FileName)) {
items.Add(fileItem);
}
}
}
}
return items;
}
public WebReferencesProjectItem WebReferencesProjectItem {
get {
return GetWebReferencesProjectItem(Items);
}
}
public WebReferenceUrl WebReferenceUrl {
get {
if (webReferenceUrl == null) {
items = CreateProjectItems();
}
return webReferenceUrl;
}
}
/// <summary>
/// Gets the web references directory which is the parent folder for
/// this web reference.
/// </summary>
public string WebReferencesDirectory {
get {
return webReferencesDirectory;
}
}
/// <summary>
/// Gets the directory where the web reference files will be saved.
/// </summary>
public string Directory {
get {
return Path.Combine(project.Directory, relativePath);
}
}
/// <summary>
/// Gets or sets the name of the web reference.
/// </summary>
/// <remarks>
/// Changing the name will also change the directory where the
/// web reference files are saved.
/// </remarks>
public string Name {
get {
return name;
}
set {
name = value;
OnNameChanged();
}
}
public List<ProjectItem> Items {
get {
if (items == null) {
items = CreateProjectItems();
}
return items;
}
}
public string WebProxyFileName {
get {
return GetFullProxyFileName();
}
}
/// <summary>
/// Gets the changes that this web reference has undergone after being
/// refreshed.
/// </summary>
public WebReferenceChanges GetChanges(IProject project)
{
WebReferenceChanges changes = new WebReferenceChanges();
List<ProjectItem> existingItems = GetFileItems(project, name);
// Check for new items.
changes.NewItems.AddRange(GetNewItems(existingItems));
// Check for removed items.
changes.ItemsRemoved.AddRange(GetRemovedItems(existingItems));
return changes;
}
public void Save()
{
System.IO.Directory.CreateDirectory(Directory);
GenerateWebProxy();
protocol.WriteAll(Directory, "Reference.map");
}
ServiceDescriptionCollection GetServiceDescriptionCollection(DiscoveryClientProtocol protocol)
{
ServiceDescriptionCollection services = new ServiceDescriptionCollection();
foreach (DictionaryEntry entry in protocol.References) {
ContractReference contractRef = entry.Value as ContractReference;
DiscoveryDocumentReference discoveryRef = entry.Value as DiscoveryDocumentReference;
if (contractRef != null) {
services.Add(contractRef.Contract);
}
}
return services;
}
XmlSchemas GetXmlSchemas(DiscoveryClientProtocol protocol)
{
XmlSchemas schemas = new XmlSchemas();
foreach (DictionaryEntry entry in protocol.References) {
SchemaReference schemaRef = entry.Value as SchemaReference;
if (schemaRef != null) {
schemas.Add(schemaRef.Schema);
}
}
return schemas;
}
void GenerateWebProxy()
{
GenerateWebProxy(proxyNamespace, GetFullProxyFileName(), GetServiceDescriptionCollection(protocol), GetXmlSchemas(protocol));
}
static void GenerateWebProxy(string proxyNamespace, string fileName, ServiceDescriptionCollection serviceDescriptions, XmlSchemas schemas)
{
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
foreach (ServiceDescription description in serviceDescriptions) {
importer.AddServiceDescription(description, null, null);
}
foreach (XmlSchema schema in schemas) {
importer.Schemas.Add(schema);
}
CodeNamespace codeNamespace = new CodeNamespace(proxyNamespace);
CodeCompileUnit codeUnit = new CodeCompileUnit();
codeUnit.Namespaces.Add(codeNamespace);
ServiceDescriptionImportWarnings warnings = importer.Import(codeNamespace, codeUnit);
CodeDomProvider provider;
switch(Path.GetExtension(fileName).ToLower()) {
case ".cs":
provider = new Microsoft.CSharp.CSharpCodeProvider();
break;
case ".vb":
provider = new Microsoft.VisualBasic.VBCodeProvider();
break;
default:
// extension not supported
provider = null;
break;
}
if(provider != null) {
StreamWriter sw = new StreamWriter(fileName);
CodeGeneratorOptions options = new CodeGeneratorOptions();
options.BracingStyle = "C";
provider.GenerateCodeFromCompileUnit(codeUnit, sw, options);
sw.Close();
}
}
string GetFullProxyFileName()
{
return Path.Combine(project.Directory, GetProxyFileName());
}
string GetProxyFileName()
{
string fileName = String.Concat("Reference", GetProxyFileNameExtension(project.Language));
return Path.Combine(relativePath, fileName);
}
string GetProxyFileNameExtension(string language)
{
switch (language) {
case "C#":
return ".cs";
case "VBNet":
return ".vb";
default:
throw new NotImplementedException(String.Concat("Unhandled language: ", language));
}
}
static WebReferencesProjectItem GetWebReferencesProjectItem(List<ProjectItem> items)
{
foreach (ProjectItem item in items) {
if (item.ItemType == ItemType.WebReferences) {
return (WebReferencesProjectItem)item;
}
}
return null;
}
/// <summary>
/// Updates the various relative paths due to the change in the web
/// reference name.
/// </summary>
void OnNameChanged()
{
GetRelativePath();
if (items != null) {
items = CreateProjectItems();
}
}
/// <summary>
/// Gets the web references relative path.
/// </summary>
void GetRelativePath()
{
ProjectItem webReferencesProjectItem = GetWebReferencesProjectItem(project);
string webReferencesDirectoryName;
if (webReferencesProjectItem != null) {
webReferencesDirectoryName = webReferencesProjectItem.Include.Trim('\\', '/');
} else {
webReferencesDirectoryName = "Web References";
}
webReferencesDirectory = Path.Combine(project.Directory, webReferencesDirectoryName);
relativePath = Path.Combine(webReferencesDirectoryName, name);
}
List<ProjectItem> CreateProjectItems()
{
List<ProjectItem> items = new List<ProjectItem>();
// Web references item.
if (!ProjectContainsWebReferencesFolder(project)) {
WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);
webReferencesItem.Include = "Web References\\";
items.Add(webReferencesItem);
}
// Web reference url.
webReferenceUrl = new WebReferenceUrl(project);
webReferenceUrl.Include = url;
webReferenceUrl.UpdateFromURL = url;
webReferenceUrl.RelPath = relativePath;
items.Add(webReferenceUrl);
// References.
foreach (DictionaryEntry entry in protocol.References) {
DiscoveryReference discoveryRef = entry.Value as DiscoveryReference;
if (discoveryRef != null) {
FileProjectItem item = new FileProjectItem(project, ItemType.None);
item.Include = Path.Combine(relativePath, discoveryRef.DefaultFilename);
items.Add(item);
}
}
// Proxy
FileProjectItem proxyItem = new FileProjectItem(project, ItemType.Compile);
proxyItem.Include = GetProxyFileName();
proxyItem.Properties.Set("AutoGen", "True");
proxyItem.Properties.Set("DesignTime", "True");
proxyItem.DependentUpon = "Reference.map";
items.Add(proxyItem);
// Reference map.
FileProjectItem mapItem = new FileProjectItem(project, ItemType.None);
mapItem.Include = Path.Combine(relativePath, "Reference.map");
mapItem.Properties.Set("Generator", "MSDiscoCodeGenerator");
mapItem.Properties.Set("LastGenOutput", "Reference.cs");
items.Add(mapItem);
// System.Web.Services reference.
if (!ProjectContainsWebServicesReference(project)) {
ReferenceProjectItem webServicesReferenceItem = new ReferenceProjectItem(project, "System.Web.Services");
items.Add(webServicesReferenceItem);
}
return items;
}
/// <summary>
/// Checks the file project items against the file items this web reference
/// has and adds any items that do not exist in the project.
/// </summary>
List<ProjectItem> GetNewItems(List<ProjectItem> projectWebReferenceItems)
{
List<ProjectItem> newItems = new List<ProjectItem>();
foreach (ProjectItem item in Items) {
if (item is WebReferenceUrl) {
// Ignore.
} else if (!ContainsFileName(projectWebReferenceItems, item.FileName)) {
newItems.Add(item);
}
}
return newItems;
}
/// <summary>
/// Checks the file project items against the file items this web reference
/// has and adds any items that have been removed but still exist in the
/// project.
/// </summary>
List<ProjectItem> GetRemovedItems(List<ProjectItem> projectWebReferenceItems)
{
List<ProjectItem> removedItems = new List<ProjectItem>();
foreach (ProjectItem item in projectWebReferenceItems) {
if (!ContainsFileName(Items, item.FileName)) {
removedItems.Add(item);
}
}
return removedItems;
}
static bool ContainsFileName(List<ProjectItem> items, string fileName)
{
foreach (ProjectItem item in items) {
if (FileUtility.IsEqualFileName(item.FileName, fileName)) {
return true;
}
}
return false;
}
}
}

54
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReferenceChanges.cs

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Project;
using System;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// Contains the changes that a WebReference has undergone after being
/// refreshed.
/// </summary>
public class WebReferenceChanges
{
List<ProjectItem> newItems = new List<ProjectItem>();
List<ProjectItem> itemsRemoved = new List<ProjectItem>();
public WebReferenceChanges()
{
}
/// <summary>
/// Items that are new and need to be added to the project.
/// </summary>
public List<ProjectItem> NewItems {
get {
return newItems;
}
}
/// <summary>
/// Items that are missing and need to be removed from the project.
/// </summary>
public List<ProjectItem> ItemsRemoved {
get {
return itemsRemoved;
}
}
/// <summary>
/// Returns whether there are any changes.
/// </summary>
public bool Changed {
get {
return itemsRemoved.Count > 0 || newItems.Count > 0;
}
}
}
}

265
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebServicesView.cs

@ -0,0 +1,265 @@ @@ -0,0 +1,265 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using System;
using System.Web.Services.Description;
using System.Windows.Forms;
namespace ICSharpCode.SharpDevelop.Gui
{
public class WebServicesView : System.Windows.Forms.UserControl
{
const int ServiceDescriptionImageIndex = 0;
const int ServiceImageIndex = 1;
const int PortImageIndex = 2;
const int OperationImageIndex = 3;
public WebServicesView()
{
InitializeComponent();
AddImages();
AddStringResources();
}
/// <summary>
/// Removes all web services currently on display.
/// </summary>
public void Clear()
{
webServicesListView.Items.Clear();
webServicesTreeView.Nodes.Clear();
}
public void Add(ServiceDescriptionCollection serviceDescriptions)
{
if (serviceDescriptions.Count == 0) {
return;
}
webServicesListView.BeginUpdate();
try {
foreach (ServiceDescription description in serviceDescriptions) {
Add(description);
}
} finally {
webServicesListView.EndUpdate();
}
}
#region Windows Forms Designer generated code
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.splitContainer = new System.Windows.Forms.SplitContainer();
this.webServicesTreeView = new System.Windows.Forms.TreeView();
this.webServicesListView = new System.Windows.Forms.ListView();
this.propertyColumnHeader = new System.Windows.Forms.ColumnHeader();
this.valueColumnHeader = new System.Windows.Forms.ColumnHeader();
this.splitContainer.Panel1.SuspendLayout();
this.splitContainer.Panel2.SuspendLayout();
this.splitContainer.SuspendLayout();
this.SuspendLayout();
//
// splitContainer
//
this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer.Location = new System.Drawing.Point(0, 0);
this.splitContainer.Name = "splitContainer";
//
// splitContainer.Panel1
//
this.splitContainer.Panel1.Controls.Add(this.webServicesTreeView);
//
// splitContainer.Panel2
//
this.splitContainer.Panel2.Controls.Add(this.webServicesListView);
this.splitContainer.Size = new System.Drawing.Size(471, 305);
this.splitContainer.SplitterDistance = 156;
this.splitContainer.TabIndex = 1;
//
// webServicesTreeView
//
this.webServicesTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
this.webServicesTreeView.Location = new System.Drawing.Point(0, 0);
this.webServicesTreeView.Name = "webServicesTreeView";
this.webServicesTreeView.Size = new System.Drawing.Size(156, 305);
this.webServicesTreeView.TabIndex = 0;
this.webServicesTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.WebServicesTreeViewAfterSelect);
//
// webServicesListView
//
this.webServicesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.propertyColumnHeader,
this.valueColumnHeader});
this.webServicesListView.Dock = System.Windows.Forms.DockStyle.Fill;
this.webServicesListView.Location = new System.Drawing.Point(0, 0);
this.webServicesListView.Name = "webServicesListView";
this.webServicesListView.Size = new System.Drawing.Size(311, 305);
this.webServicesListView.TabIndex = 2;
this.webServicesListView.UseCompatibleStateImageBehavior = false;
this.webServicesListView.View = System.Windows.Forms.View.Details;
//
// propertyColumnHeader
//
this.propertyColumnHeader.Text = "Property";
this.propertyColumnHeader.Width = 120;
//
// valueColumnHeader
//
this.valueColumnHeader.Text = "Value";
this.valueColumnHeader.Width = 191;
//
// WebServicesView
//
this.Controls.Add(this.splitContainer);
this.Name = "WebServicesView";
this.Size = new System.Drawing.Size(471, 305);
this.splitContainer.Panel1.ResumeLayout(false);
this.splitContainer.Panel2.ResumeLayout(false);
this.splitContainer.ResumeLayout(false);
this.ResumeLayout(false);
}
private System.Windows.Forms.ColumnHeader propertyColumnHeader;
private System.Windows.Forms.ColumnHeader valueColumnHeader;
private System.Windows.Forms.TreeView webServicesTreeView;
private System.Windows.Forms.ListView webServicesListView;
private System.Windows.Forms.SplitContainer splitContainer;
#endregion
void WebServicesTreeViewAfterSelect(object sender, TreeViewEventArgs e)
{
ListViewItem item;
webServicesListView.Items.Clear();
if(e.Node.Tag is ServiceDescription) {
ServiceDescription desc = (ServiceDescription)e.Node.Tag;
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.RetrievalUriProperty}");
item.SubItems.Add(desc.RetrievalUrl);
webServicesListView.Items.Add(item);
}
else if(e.Node.Tag is Service) {
Service service = (Service)e.Node.Tag;
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.DocumentationProperty}");
item.SubItems.Add(service.Documentation);
webServicesListView.Items.Add(item);
}
else if(e.Node.Tag is Port) {
Port port = (Port)e.Node.Tag;
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.DocumentationProperty}");
item.SubItems.Add(port.Documentation);
webServicesListView.Items.Add(item);
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.BindingProperty}");
item.SubItems.Add(port.Binding.Name);
webServicesListView.Items.Add(item);
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.ServiceNameProperty}");
item.SubItems.Add(port.Service.Name);
webServicesListView.Items.Add(item);
}
else if(e.Node.Tag is Operation) {
Operation operation = (Operation)e.Node.Tag;
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.DocumentationProperty}");
item.SubItems.Add(operation.Documentation);
webServicesListView.Items.Add(item);
item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.ParametersProperty}");
item.SubItems.Add(operation.ParameterOrderString);
webServicesListView.Items.Add(item);
}
}
void Add(ServiceDescription description)
{
TreeNode rootNode = new TreeNode(GetName(description));
rootNode.Tag = description;
rootNode.ImageIndex = ServiceDescriptionImageIndex;
rootNode.SelectedImageIndex = ServiceDescriptionImageIndex;
webServicesTreeView.Nodes.Add(rootNode);
foreach(Service service in description.Services) {
// Add a Service node
TreeNode serviceNode = new TreeNode(service.Name);
serviceNode.Tag = service;
serviceNode.ImageIndex = ServiceImageIndex;
serviceNode.SelectedImageIndex = ServiceImageIndex;
rootNode.Nodes.Add(serviceNode);
foreach(Port port in service.Ports) {
TreeNode portNode = new TreeNode(port.Name);
portNode.Tag = port;
portNode.ImageIndex = PortImageIndex;
portNode.SelectedImageIndex = PortImageIndex;
serviceNode.Nodes.Add(portNode);
// Get the operations
System.Web.Services.Description.Binding binding = description.Bindings[port.Binding.Name];
if (binding != null) {
PortType portType = description.PortTypes[binding.Type.Name];
if (portType != null) {
foreach(Operation operation in portType.Operations) {
TreeNode operationNode = new TreeNode(operation.Name);
operationNode.Tag = operation;
operationNode.ImageIndex = OperationImageIndex;
operationNode.SelectedImageIndex = OperationImageIndex;
portNode.Nodes.Add(operationNode);
}
}
}
}
}
webServicesTreeView.ExpandAll();
}
string GetName(ServiceDescription description)
{
if (description.Name != null) {
return description.Name;
} else if (description.RetrievalUrl != null) {
Uri uri = new Uri(description.RetrievalUrl);
if (uri.Segments.Length > 0) {
return uri.Segments[uri.Segments.Length - 1];
} else {
return uri.Host;
}
}
return String.Empty;
}
void AddImages()
{
ImageList imageList = new ImageList();
imageList.Images.Add(ResourceService.GetBitmap("Icons.16x16.Library"));
imageList.Images.Add(ResourceService.GetBitmap("Icons.16x16.Interface"));
imageList.Images.Add(ResourceService.GetBitmap("Icons.16x16.Class"));
imageList.Images.Add(ResourceService.GetBitmap("Icons.16x16.Method"));
webServicesTreeView.ImageList = imageList;
}
void AddStringResources()
{
valueColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.ValueColumnHeader}");
propertyColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.PropertyColumnHeader}");
}
}
}

165
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs

@ -14,9 +14,12 @@ using System.Collections; @@ -14,9 +14,12 @@ using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
using System.Net;
using System.Web.Services.Discovery;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Project.Commands
{
@ -41,78 +44,118 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -41,78 +44,118 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
/*
public class RefreshWebReference : AbstractMenuCommand
{
public override void Run()
{
ProjectBrowserView browser = (ProjectBrowserView)Owner;
ReferenceNode node = browser.SelectedNode as ReferenceNode;
if (node != null) {
IProject project = node.Project; //((ProjectBrowserNode)node.Parent.Parent).Project;
ParserService ParserService = (ParserService)ICSharpCode.Core.ServiceManager.Services.GetService(typeof(ParserService));
ProjectReference refInfo = (ProjectWebReference)node.UserData;
WebReference.GenerateWebProxy(project, refInfo.HRef);
ParserService.AddReferenceToCompletionLookup(project, refInfo);
WebReferenceNode node = Owner as WebReferenceNode;
if (node != null && node.Project != null && node.ProjectItem != null) {
WebReferenceUrl url = (WebReferenceUrl)node.ProjectItem;
try {
// Discover web services at url.
DiscoveryClientProtocol protocol = new DiscoveryClientProtocol();
protocol.DiscoverAny(url.UpdateFromURL);
protocol.ResolveOneLevel();
// Save web services.
WebReference webReference = new WebReference(url.Project, url.UpdateFromURL, node.Text, url.Project.RootNamespace, protocol);
webReference.Save();
// Update project.
WebReferenceChanges changes = webReference.GetChanges(url.Project);
if (changes.Changed) {
foreach (ProjectItem itemRemoved in changes.ItemsRemoved) {
ProjectService.RemoveProjectItem(url.Project, itemRemoved);
FileService.RemoveFile(itemRemoved.FileName, false);
}
foreach (ProjectItem newItem in changes.NewItems) {
ProjectService.AddProjectItem(url.Project, newItem);
FileNode fileNode = new FileNode(newItem.FileName, FileNodeStatus.InProject);
fileNode.AddTo(node);
}
ProjectBrowserPad.Instance.ProjectBrowserControl.TreeView.Sort();
url.Project.Save();
}
// Update code completion.
ParserService.ParseFile(webReference.WebProxyFileName);
} catch (WebException ex) {
MessageService.ShowError(ex, String.Format(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.ProjectBrowser.RefreshWebReference.ReadServiceDescriptionError}"), url.UpdateFromURL));
}
}
}
}*/
}
public class AddWebReferenceToProject : AbstractMenuCommand
{
public override void Run()
{
// ProjectBrowserView browser = (ProjectBrowserView)Owner;
// AbstractBrowserNode node = browser.SelectedNode as AbstractBrowserNode;
// AbstractBrowserNode projectNode = DefaultDotNetNodeBuilder.GetProjectNode(node);
// bool bInitReferences = false;
//
// if (node != null) {
// IProject project = ((ProjectBrowserNode)node.Parent).Project;
//
//
// ParserService ParserService = (ParserService)ICSharpCode.Core.ServiceManager.Services.GetService(typeof(ParserService));
//
// using (AddWebReferenceDialog refDialog = new AddWebReferenceDialog(project)) {
// if (refDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
// foreach(object objReference in refDialog.ReferenceInformations) {
// if(objReference is ProjectReference) {
// ProjectReference refInfo = (ProjectReference)objReference;
// project.ProjectReferences.Add(refInfo);
// if(refInfo.ReferenceType == ReferenceType.Assembly) {
// ParserService.AddReferenceToCompletionLookup(project, refInfo);
// bInitReferences = true;
// }
// } else if(objReference is ProjectFile) {
// ProjectFile projectFile = (ProjectFile) objReference;
// //HACK: fix later
// if(projectFile.Subtype == Subtype.WebReferences || projectFile.Subtype == Subtype.Directory) {
// AbstractBrowserNode checkNode = DefaultDotNetNodeBuilder.GetPath(FileUtility.GetRelativePath(project.BaseDirectory,projectFile.Name + Path.DirectorySeparatorChar), projectNode, false);
// if(checkNode != null) {
// continue;
// }
// }
// // add to the project browser
// DefaultDotNetNodeBuilder.AddProjectFileNode(project, projectNode, projectFile);
//
// // add to the project
// ProjectService.AddFileToProject(project, projectFile);
//
// // add to code completion
// if(projectFile.Subtype == Subtype.Code ) {
// ParserService.ParseFile(projectFile.Name);
// }
//
// }
// }
// if(bInitReferences) {
// DefaultDotNetNodeBuilder.InitializeReferences(node, project);
// }
// ProjectService.SaveCombine();
// }
// }
// }
AbstractProjectBrowserTreeNode node = Owner as AbstractProjectBrowserTreeNode;
if (node != null && node.Project != null) {
using (AddWebReferenceDialog refDialog = new AddWebReferenceDialog(node.Project)) {
refDialog.NamespacePrefix = node.Project.RootNamespace;
if (refDialog.ShowDialog() == DialogResult.OK) {
// Do not overwrite existing web references.
refDialog.WebReference.Name = WebReference.GetReferenceName(refDialog.WebReference.WebReferencesDirectory, refDialog.WebReference.Name);
refDialog.WebReference.Save();
foreach (ProjectItem item in refDialog.WebReference.Items) {
ProjectService.AddProjectItem(node.Project, item);
}
AddWebReferenceToProjectBrowser(node, refDialog.WebReference);
// Add proxy to code completion.
ParserService.ParseFile(refDialog.WebReference.WebProxyFileName);
node.Project.Save();
}
}
}
}
void AddWebReferenceToProjectBrowser(AbstractProjectBrowserTreeNode node, WebReference webReference)
{
TreeNode webReferencesNode = null;
if (node is ProjectNode) {
webReferencesNode = AddWebReferenceToProjectNode((ProjectNode)node, webReference);
} else if (node is WebReferencesFolderNode) {
webReferencesNode = node;
WebReferenceNodeBuilder.AddWebReference((WebReferencesFolderNode)webReferencesNode, webReference);
} else if (node is ReferenceFolder && node.Parent != null && node.Parent is ProjectNode) {
webReferencesNode = AddWebReferenceToProjectNode((ProjectNode)node.Parent, webReference);
} else {
LoggingService.Error("AddWebReferenceToProjectBrowser: Selected node type is not handled.");
}
if (webReferencesNode != null) {
ProjectBrowserPad.Instance.ProjectBrowserControl.TreeView.Sort();
webReferencesNode.Expand();
webReferencesNode.EnsureVisible();
}
}
TreeNode GetWebReferencesFolderNode(ProjectNode projectNode)
{
foreach (TreeNode node in projectNode.Nodes) {
WebReferencesFolderNode webReferencesNode = node as WebReferencesFolderNode;
if (webReferencesNode != null) {
return webReferencesNode;
}
}
return null;
}
TreeNode AddWebReferenceToProjectNode(ProjectNode node, WebReference webReference)
{
TreeNode webReferencesNode = WebReferenceNodeBuilder.AddWebReferencesFolderNode(node, webReference);
if (webReferencesNode == null) {
webReferencesNode = GetWebReferencesFolderNode((ProjectNode)node);
if (webReferencesNode != null) {
WebReferenceNodeBuilder.AddWebReference((WebReferencesFolderNode)webReferencesNode, webReference);
}
}
return webReferencesNode;
}
}
}

40
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/NodeBuilder/WebReferenceNodeBuilder.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using System;
using System.Windows.Forms;
namespace ICSharpCode.SharpDevelop.Project
{
public class WebReferenceNodeBuilder
{
WebReferenceNodeBuilder()
{
}
public static TreeNode AddWebReferencesFolderNode(ProjectNode projectNode, WebReference webReference)
{
if (webReference.WebReferencesProjectItem != null) {
WebReferencesFolderNode webReferencesFolderNode = new WebReferencesFolderNode(webReference.WebReferencesProjectItem);
webReferencesFolderNode.FileNodeStatus = FileNodeStatus.InProject;
webReferencesFolderNode.AddTo(projectNode);
return webReferencesFolderNode;
}
return null;
}
public static TreeNode AddWebReference(WebReferencesFolderNode webReferencesFolderNode, WebReference webReference)
{
WebReferenceNode node = new WebReferenceNode(webReference);
node.FileNodeStatus = FileNodeStatus.InProject;
node.AddTo(webReferencesFolderNode);
return node;
}
}
}

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

@ -60,7 +60,40 @@ namespace ICSharpCode.SharpDevelop.Project @@ -60,7 +60,40 @@ namespace ICSharpCode.SharpDevelop.Project
None,
AppDesigner,
WebReference,
WebReferenceFolder
WebReferencesFolder
}
public class DirectoryNodeFactory
{
DirectoryNodeFactory()
{
}
public static DirectoryNode CreateDirectoryNode(TreeNode parent, IProject project, string directory)
{
DirectoryNode node = new DirectoryNode(directory);
if (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);
}
return node;
}
public static DirectoryNode CreateDirectoryNode(ProjectItem item, FileNodeStatus status)
{
DirectoryNode node;
if (item is WebReferencesProjectItem) {
node = new WebReferencesFolderNode((WebReferencesProjectItem)item);
node.FileNodeStatus = status;
} else {
node = new DirectoryNode(item.FileName.Trim('\\', '/'), status);
node.ProjectItem = item;
}
return node;
}
}
public class DirectoryNode : AbstractProjectBrowserTreeNode, IOwnerState
@ -79,9 +112,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -79,9 +112,6 @@ namespace ICSharpCode.SharpDevelop.Project
public SpecialFolder SpecialFolder {
get {
if (Parent is DirectoryNode && ((DirectoryNode)Parent).SpecialFolder == SpecialFolder.WebReferenceFolder) {
return SpecialFolder.WebReference;
}
return specialFolder;
}
set {
@ -110,6 +140,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -110,6 +140,9 @@ namespace ICSharpCode.SharpDevelop.Project
}
set {
projectItem = value;
if (projectItem != null && projectItem.ItemType == ItemType.WebReferenceUrl) {
Tag = projectItem;
}
}
}
@ -174,7 +207,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -174,7 +207,7 @@ namespace ICSharpCode.SharpDevelop.Project
OpenedImage = "ProjectBrowser.PropertyFolder.Open";
ClosedImage = "ProjectBrowser.PropertyFolder.Closed";
break;
case SpecialFolder.WebReferenceFolder:
case SpecialFolder.WebReferencesFolder:
OpenedImage = "ProjectBrowser.WebReferenceFolder.Open";
ClosedImage = "ProjectBrowser.WebReferenceFolder.Closed";
break;
@ -231,6 +264,23 @@ namespace ICSharpCode.SharpDevelop.Project @@ -231,6 +264,23 @@ namespace ICSharpCode.SharpDevelop.Project
SetIcon();
}
/// <summary>
/// Determines if the specified <paramref name="folder"/> is a
/// web reference folder in the specified <paramref name="project"/>.
/// </summary>
/// <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;
}
void RecreateSubNodes()
{
if (autoClearNodes) {
@ -267,10 +317,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -267,10 +317,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (System.IO.Directory.Exists(Directory)) {
foreach (string subDirectory in System.IO.Directory.GetDirectories(Directory)) {
if (Path.GetFileName(subDirectory) != ".svn") {
DirectoryNode newDirectoryNode = new DirectoryNode(subDirectory);
if (subDirectory == Path.Combine(Project.Directory, Project.AppDesignerFolder)) {
newDirectoryNode.SpecialFolder = SpecialFolder.AppDesigner;
}
DirectoryNode newDirectoryNode = DirectoryNodeFactory.CreateDirectoryNode(this, Project, subDirectory);
newDirectoryNode.AddTo(this);
directoryNodeList[Path.GetFileName(subDirectory)] = newDirectoryNode;
}
@ -293,6 +340,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -293,6 +340,16 @@ namespace ICSharpCode.SharpDevelop.Project
// Add project items
foreach (ProjectItem item in Project.Items) {
if (item.ItemType == ItemType.WebReferenceUrl) {
DirectoryNode node;
if (directoryNodeList.TryGetValue(Path.GetFileName(item.FileName), out node)) {
if (node.FileNodeStatus == FileNodeStatus.None) {
node.FileNodeStatus = FileNodeStatus.InProject;
}
node.ProjectItem = item;
}
continue;
}
FileProjectItem fileItem = item as FileProjectItem;
if (fileItem == null)
continue;
@ -311,8 +368,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -311,8 +368,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (node.FileNodeStatus == FileNodeStatus.None) {
node.FileNodeStatus = FileNodeStatus.InProject;
}
node.ProjectItem = item;
} else {
node = new DirectoryNode(item.FileName.Trim('\\', '/'), FileNodeStatus.Missing);
node = DirectoryNodeFactory.CreateDirectoryNode(item, FileNodeStatus.Missing);
node.AddTo(this);
directoryNodeList[fileName] = node;
}

26
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/WebReferenceNode.cs

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Gui;
using System;
namespace ICSharpCode.SharpDevelop.Project
{
public class WebReferenceNode : DirectoryNode
{
public WebReferenceNode(WebReference webReference) : this(webReference.Directory)
{
ProjectItem = webReference.WebReferenceUrl;
}
public WebReferenceNode(string directory) : base(directory)
{
SpecialFolder = SpecialFolder.WebReference;
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferenceNode";
}
}
}

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

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Project
{
public class WebReferencesFolderNode : DirectoryNode
{
public WebReferencesFolderNode(WebReferencesProjectItem projectItem) : this(projectItem.Directory)
{
ProjectItem = projectItem;
}
public WebReferencesFolderNode(string directory) : base(directory)
{
sortOrder = 0;
SpecialFolder = SpecialFolder.WebReferencesFolder;
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/WebReferencesFolderNode";
}
}
}

4
src/Main/Base/Project/Src/Project/Items/ProjectItemFactory.cs

@ -31,7 +31,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -31,7 +31,6 @@ namespace ICSharpCode.SharpDevelop.Project
case "EmbeddedResource":
case "Resource":
case "Content":
case "WebReferences":
case "Folder":
case "BootstrapperFile":
case "ApplicationDefinition":
@ -41,6 +40,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -41,6 +40,9 @@ namespace ICSharpCode.SharpDevelop.Project
case "WebReferenceUrl":
return new WebReferenceUrl(project);
case "WebReferences":
return new WebReferencesProjectItem(project);
default:
return new UnknownProjectItem(project, itemType);
}

17
src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs

@ -36,8 +36,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -36,8 +36,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
[DefaultValue(false)]
[LocalizedProperty("Specific Version",
Description = "Indicates if this reference is bound to a specific version of the assembly.")]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.SpecificVersion}",
Description = "${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.SpecificVersion.Description}")]
public bool SpecificVersion {
get {
return Properties.Get("SpecificVersion", true);
@ -60,7 +60,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -60,7 +60,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
[ReadOnly(true)]
[LocalizedProperty("(Name)", Description="The reference name")]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Name}",
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Name.Description}")]
public string Name {
get {
AssemblyName assemblyName = GetAssemblyName(Include);
@ -72,8 +73,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -72,8 +73,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
[ReadOnly(true)]
[LocalizedProperty("Version",
Description="The major, minor, revision and build numbers of the reference.")]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Version}",
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Version.Description}")]
public Version Version {
get {
AssemblyName assemblyName = GetAssemblyName(Include);
@ -85,7 +86,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -85,7 +86,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
[ReadOnly(true)]
[LocalizedProperty("Culture", Description="The culture supported by the reference")]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Culture}",
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Culture.Description}")]
public string Culture {
get {
AssemblyName assemblyName = GetAssemblyName(Include);
@ -97,7 +99,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -97,7 +99,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
[ReadOnly(true)]
[LocalizedProperty("Public Key Token", Description="The public key token")]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.PublicKeyToken}",
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.PublicKeyToken.Description}")]
public string PublicKeyToken {
get {
AssemblyName assemblyName = GetAssemblyName(Include);

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

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.ComponentModel;
using System.IO;
namespace ICSharpCode.SharpDevelop.Project
{
public class WebReferencesProjectItem : FileProjectItem
{
public WebReferencesProjectItem(IProject project) : base(project, ItemType.WebReferences)
{
}
[Browsable(false)]
public string Directory {
get {
return Path.Combine(Project.Directory, Include).Trim('\\', '/');
}
}
}
}

52
src/Main/Base/Project/Src/Project/WebReferenceUrl.cs

@ -5,7 +5,10 @@ @@ -5,7 +5,10 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using System;
using System.ComponentModel;
using System.IO;
using System.Reflection;
using System.Net;
@ -21,6 +24,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -21,6 +24,9 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[ReadOnly(true)]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.UrlBehaviour}",
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.UrlBehaviour.Description}")]
public string UrlBehavior {
get {
return base.Properties["UrlBehavior"];
@ -30,6 +36,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -30,6 +36,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public string RelPath {
get {
return base.Properties["RelPath"];
@ -39,6 +46,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -39,6 +46,9 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[ReadOnly(true)]
[LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.WebReferenceUrl}",
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.WebReferenceUrl.Description}")]
public string UpdateFromURL {
get {
return base.Properties["UpdateFromURL"];
@ -48,6 +58,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -48,6 +58,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public string ServiceLocationURL {
get {
return base.Properties["ServiceLocationURL"];
@ -57,6 +68,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -57,6 +68,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public string CachedDynamicPropName {
get {
return base.Properties["CachedDynamicPropName"];
@ -66,6 +78,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -66,6 +78,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public string CachedAppSettingsObjectName {
get {
return base.Properties["CachedAppSettingsObjectName"];
@ -75,6 +88,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -75,6 +88,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public string CachedSettingsPropName {
get {
return base.Properties["CachedSettingsPropName"];
@ -84,33 +98,23 @@ namespace ICSharpCode.SharpDevelop.Project @@ -84,33 +98,23 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public WebReferenceUrl(IProject project) : base(project)
{
public override string FileName {
get {
if (Project != null && RelPath != null) {
return Path.Combine(Project.Directory, RelPath.Trim('\\'));
}
return null;
}
set {
if (Project != null) {
RelPath = FileUtility.GetRelativePath(Project.Directory, value);
}
}
}
/// <summary>
/// Creates a ServiceDescription object from a valid URI
/// </summary>
public static ServiceDescription ReadServiceDescription(string uri)
public WebReferenceUrl(IProject project) : base(project)
{
ServiceDescription desc = null;
try {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
WebResponse response = request.GetResponse();
desc = ServiceDescription.Read(response.GetResponseStream());
response.Close();
desc.RetrievalUrl = uri;
} catch (Exception) {
// possibly error reading WSDL?
return null;
}
if(desc.Services.Count == 0)
return null;
return desc;
UrlBehavior = "Static";
}
}
}

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

@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
@ -48,6 +49,20 @@ @@ -48,6 +49,20 @@
<Compile Include="OverloadFinding.cs" />
<Compile Include="SearchGenericClassTests.cs" />
<Compile Include="MemberLookupHelperTests.cs" />
<Compile Include="WebReferences\WebReferenceProjectItemsTest.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\WebReferenceProjectItemsCachedTest.cs" />
<Compile Include="WebReferences\DirectoryNodeFactoryTests.cs" />
<Compile Include="WebReferences\WebReferenceUrlTests.cs" />
<Compile Include="WebReferences\WebServicesReferenceExistsTests.cs" />
<Compile Include="WebReferences\ProjectWebReferenceItemsTests.cs" />
<Compile Include="WebReferences\WebReferenceChangesTest.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Project\ICSharpCode.SharpDevelop.csproj">
@ -87,6 +102,7 @@ @@ -87,6 +102,7 @@
<Link>ICSharpCode.TextEditor.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Folder Include="WebReferences" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>

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

@ -0,0 +1,168 @@ @@ -0,0 +1,168 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using NUnit.Framework;
using System;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
[TestFixture]
public class DirectoryNodeFactoryTests
{
DirectoryNode appDesignerFolderNode;
DirectoryNode ordinaryFolderNode;
DirectoryNode webReferencesFolderNode;
DirectoryNode missingWebReferencesFolderNode;
DirectoryNode missingOrdinaryFolderNode;
DirectoryNode webReferenceNode;
string projectDirectory = "c:\\projects\\test";
[TestFixtureSetUp]
public void SetUpFixture()
{
MSBuildProject project = new MSBuildProject();
project.Language = "C#";
project.FileName = Path.Combine(projectDirectory, "foo.csproj");
project.AppDesignerFolder = "Properties";
WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);
webReferencesItem.Include = "Web References\\";
project.Items.Add(webReferencesItem);
FileProjectItem fileItem = new FileProjectItem(project, ItemType.Folder);
fileItem.Include = "MissingFolder\\";
project.Items.Add(fileItem);
ProjectNode projectNode = new ProjectNode(project);
appDesignerFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(projectDirectory, "Properties"));
ordinaryFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(project.Directory, "Test"));
webReferencesFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(project.Directory, webReferencesItem.Include));
webReferenceNode = DirectoryNodeFactory.CreateDirectoryNode(webReferencesFolderNode, project, Path.Combine(Path.Combine(project.Directory, webReferencesItem.Include), "localhost"));
missingWebReferencesFolderNode = DirectoryNodeFactory.CreateDirectoryNode(webReferencesItem, FileNodeStatus.Missing);
missingOrdinaryFolderNode = DirectoryNodeFactory.CreateDirectoryNode(fileItem, FileNodeStatus.Missing);
}
[Test]
public void AppDesignerFolderNodeIsSpecialAppDesignerFolder()
{
Assert.AreEqual(SpecialFolder.AppDesigner, appDesignerFolderNode.SpecialFolder);
}
[Test]
public void AppDesignerFolderNodeDirectory()
{
Assert.AreEqual(Path.Combine(projectDirectory, "Properties"), appDesignerFolderNode.Directory);
}
[Test]
public void OrdinaryFolderNodeIsNotSpecialFolder()
{
Assert.AreEqual(SpecialFolder.None, ordinaryFolderNode.SpecialFolder);
}
[Test]
public void OrdinaryFolderNodeDirectory()
{
Assert.AreEqual(Path.Combine(projectDirectory, "Test"), ordinaryFolderNode.Directory);
}
[Test]
public void OrdinaryFolderNodeType()
{
Assert.IsTrue(ordinaryFolderNode is DirectoryNode);
}
[Test]
public void WebReferencesFolderNodeIsSpecialWebReferencesFolder()
{
Assert.AreEqual(SpecialFolder.WebReferencesFolder, webReferencesFolderNode.SpecialFolder);
}
[Test]
public void WebReferencesFolderNodeType()
{
Assert.IsTrue(webReferencesFolderNode is WebReferencesFolderNode);
}
[Test]
public void WebReferencesFolderNodeDirectory()
{
Assert.AreEqual(Path.Combine(projectDirectory, "Web References\\"), webReferencesFolderNode.Directory);
}
[Test]
public void WebReferenceNodeIsSpecialWebReferencesFolder()
{
Assert.AreEqual(SpecialFolder.WebReference, webReferenceNode.SpecialFolder);
}
[Test]
public void WebReferenceNodeType()
{
Assert.IsTrue(webReferenceNode is WebReferenceNode);
}
[Test]
public void WebReferenceNodeDirectory()
{
Assert.AreEqual(Path.Combine(projectDirectory, "Web References\\localhost"), webReferenceNode.Directory);
}
[Test]
public void MissingWebReferencesFolderNodeIsMissing()
{
Assert.AreEqual(FileNodeStatus.Missing, missingWebReferencesFolderNode.FileNodeStatus);
}
[Test]
public void MissingWebReferencesFolderNodeIsSpecialWebReferencesFolder()
{
Assert.AreEqual(SpecialFolder.WebReferencesFolder, missingWebReferencesFolderNode.SpecialFolder);
}
[Test]
public void MissingWebReferencesFolderNodeType()
{
Assert.IsTrue(missingWebReferencesFolderNode is WebReferencesFolderNode);
}
[Test]
public void MissingOrdinaryFolderNodeIsMissing()
{
Assert.AreEqual(FileNodeStatus.Missing, missingOrdinaryFolderNode.FileNodeStatus);
}
[Test]
public void MissingOrdinaryFolderNodeIsNotSpecialFolder()
{
Assert.AreEqual(SpecialFolder.None, missingOrdinaryFolderNode.SpecialFolder);
}
[Test]
public void MissingOrdinaryFolderNodeType()
{
Assert.IsTrue(missingOrdinaryFolderNode is DirectoryNode);
}
[Test]
public void MissingOrdinaryFolderName()
{
Assert.AreEqual("c:\\projects\\test\\MissingFolder", missingOrdinaryFolderNode.Directory);
}
[Test]
public void MissingOrdinaryFolderProjectItemExists()
{
Assert.IsNotNull(missingOrdinaryFolderNode.ProjectItem);
}
}
}

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

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
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()
{
MSBuildProject p = new MSBuildProject();
p.FileName = "C:\\projects\\test\\foo.csproj";
WebReferencesProjectItem item = new WebReferencesProjectItem(p);
item.Include = "Web References\\";
p.Items.Add(item);
Assert.IsTrue(DirectoryNode.IsWebReferencesFolder(p, "C:\\projects\\test\\Web References"));
}
[Test]
public void IsNotWebReferencesFolder1()
{
MSBuildProject p = new MSBuildProject();
p.FileName = "C:\\projects\\test\\foo.csproj";
WebReferencesProjectItem item = new WebReferencesProjectItem(p);
item.Include = "Web References\\";
p.Items.Add(item);
Assert.IsFalse(DirectoryNode.IsWebReferencesFolder(p, "C:\\projects\\test\\foo"));
}
}
}

73
src/Main/Base/Test/WebReferences/ProjectHasExistingWebRefFolderTest.cs

@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests that a new web reference does not generate a WebReferencesProjectItem
/// if the project already contains a web reference folder.
/// </summary>
[TestFixture]
public class ProjectHasExistingWebRefFolderTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
ProjectItem webReferencesProjectItem;
MSBuildProject project;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetUpFixture()
{
project = new MSBuildProject();
project.Language = "C#";
WebReferencesProjectItem item = new WebReferencesProjectItem(project);
item.Include = "Web References\\";
project.Items.Add(item);
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
webReferencesProjectItem = WebReferenceTestHelper.GetProjectItem(webReference.Items, "Web References\\", ItemType.WebReferences);
}
[Test]
public void ProjectItemContainsWebReferencesFolder()
{
Assert.IsTrue(SD.WebReference.ProjectContainsWebReferencesFolder(project));
}
[Test]
public void WebReferencesProjectItemDoesNotExist()
{
Assert.IsNull(webReferencesProjectItem);
}
}
}

94
src/Main/Base/Test/WebReferences/ProjectWebReferenceItemsTests.cs

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests the WebReference.GetProjectItems method returns the
/// correct project items from a project.
/// </summary>
[TestFixture]
public class ProjectWebReferenceItemsTests
{
List<ProjectItem> projectItems;
[TestFixtureSetUp]
public void SetUpFixture()
{
MSBuildProject project = new MSBuildProject();
project.Language = "C#";
project.FileName = "c:\\projects\\test\\foo.csproj";
// Web references item.
WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);
webReferencesItem.Include = "Web References\\";
project.Items.Add(webReferencesItem);
// Web reference url.
WebReferenceUrl webReferenceUrl = new WebReferenceUrl(project);
webReferenceUrl.Include = "http://localhost/test.asmx";
webReferenceUrl.UpdateFromURL = "http://localhost/test.asmx";
webReferenceUrl.RelPath = "Web References\\localhost";
project.Items.Add(webReferenceUrl);
FileProjectItem discoFileItem = new FileProjectItem(project, ItemType.None);
discoFileItem.Include = "Web References\\localhost\\test.disco";
project.Items.Add(discoFileItem);
FileProjectItem wsdlFileItem = new FileProjectItem(project, ItemType.None);
wsdlFileItem.Include = "Web References\\localhost\\test.wsdl";
project.Items.Add(wsdlFileItem);
// Proxy
FileProjectItem proxyItem = new FileProjectItem(project, ItemType.Compile);
proxyItem.Include = "Web References\\localhost\\Reference.cs";
proxyItem.DependentUpon = "Reference.map";
project.Items.Add(proxyItem);
// Reference map.
FileProjectItem mapItem = new FileProjectItem(project, ItemType.None);
mapItem.Include = "Web References\\localhost\\Reference.map";
project.Items.Add(mapItem);
// System.Web.Services reference.
ReferenceProjectItem webServicesReferenceItem = new ReferenceProjectItem(project, "System.Web.Services");
project.Items.Add(webServicesReferenceItem);
projectItems = WebReference.GetFileItems(project, "localhost");
}
[Test]
public void ReferenceMapFileItemFound()
{
Assert.IsNotNull(WebReferenceTestHelper.GetProjectItem(projectItems, "Web References\\localhost\\Reference.map", ItemType.None));
}
[Test]
public void ProxyFileItemFound()
{
Assert.IsNotNull(WebReferenceTestHelper.GetProjectItem(projectItems, "Web References\\localhost\\Reference.cs", ItemType.Compile));
}
[Test]
public void WsdlFileItemFound()
{
Assert.IsNotNull(WebReferenceTestHelper.GetProjectItem(projectItems, "Web References\\localhost\\test.wsdl", ItemType.None));
}
[Test]
public void DiscoFileItemFound()
{
Assert.IsNotNull(WebReferenceTestHelper.GetProjectItem(projectItems, "Web References\\localhost\\test.disco", ItemType.None));
}
}
}

64
src/Main/Base/Test/WebReferences/RenamedWebReferencesFolderTest.cs

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Non-standard web references folder name.
/// </summary>
[TestFixture]
public class RenamedWebReferencesFolderTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
MSBuildProject project;
WebReferenceUrl webReferenceUrl;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetupFixture()
{
project = new MSBuildProject();
project.FileName = "C:\\Projects\\Web.csproj";
project.Language = "C#";
WebReferencesProjectItem item = new WebReferencesProjectItem(project);
item.Include = "Foo\\";
project.Items.Add(item);
protocol = new DiscoveryClientProtocol();
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
webReferenceUrl = (WebReferenceUrl)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.WebReferenceUrl);
}
[Test]
public void WebReferenceRelativePath()
{
Assert.AreEqual("Foo\\localhost", webReferenceUrl.RelPath);
}
[Test]
public void WebReferencesFolder()
{
Assert.AreEqual("C:\\Projects\\Foo", webReference.WebReferencesDirectory);
}
}
}

60
src/Main/Base/Test/WebReferences/UnsupportedLanguageTest.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests that an exception is thrown if an unsupported project language
/// is used with the web reference
/// </summary>
[TestFixture]
public class UnsupportedLanguageTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
FileProjectItem proxyFileProjectItem;
MSBuildProject project;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[Test]
[ExpectedException(typeof(NotImplementedException))]
public void NotSupportedProjectLanguage()
{
project = new MSBuildProject();
project.Language = "Foo";
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
proxyFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\Reference.vb", ItemType.Compile);
}
}
}

65
src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests that the generated filename ends with .vb if the project is
/// a vb project.
/// </summary>
[TestFixture]
public class VBNetWebReferenceTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
FileProjectItem proxyFileProjectItem;
MSBuildProject project;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetUpFixture()
{
project = new MSBuildProject();
project.Language = "VBNet";
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
proxyFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\Reference.vb", ItemType.Compile);
}
[Test]
public void VBProxyFileExists()
{
Assert.IsNotNull(proxyFileProjectItem);
}
}
}

127
src/Main/Base/Test/WebReferences/WebReferenceChangesTest.cs

@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests the WebReferenceChanges class.
/// </summary>
[TestFixture]
public class WebReferenceChangesTest
{
SD.WebReferenceChanges changes;
[TestFixtureSetUp]
public void SetUpFixture()
{
// Set up the project.
MSBuildProject project = new MSBuildProject();
project.Language = "C#";
project.FileName = "c:\\projects\\test\\foo.csproj";
// Web references item.
WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);
webReferencesItem.Include = "Web References\\";
project.Items.Add(webReferencesItem);
// Web reference url.
WebReferenceUrl webReferenceUrl = new WebReferenceUrl(project);
webReferenceUrl.Include = "http://localhost/test.asmx";
webReferenceUrl.UpdateFromURL = "http://localhost/test.asmx";
webReferenceUrl.RelPath = "Web References\\localhost";
project.Items.Add(webReferenceUrl);
FileProjectItem discoFileItem = new FileProjectItem(project, ItemType.None);
discoFileItem.Include = "Web References\\localhost\\test.disco";
project.Items.Add(discoFileItem);
FileProjectItem wsdlFileItem = new FileProjectItem(project, ItemType.None);
wsdlFileItem.Include = "Web References\\localhost\\test.wsdl";
project.Items.Add(wsdlFileItem);
// Proxy
FileProjectItem proxyItem = new FileProjectItem(project, ItemType.Compile);
proxyItem.Include = "Web References\\localhost\\Reference.cs";
proxyItem.DependentUpon = "Reference.map";
project.Items.Add(proxyItem);
// Reference map.
FileProjectItem mapItem = new FileProjectItem(project, ItemType.None);
mapItem.Include = "Web References\\localhost\\Reference.map";
project.Items.Add(mapItem);
// System.Web.Services reference.
ReferenceProjectItem webServicesReferenceItem = new ReferenceProjectItem(project, "System.Web.Services");
project.Items.Add(webServicesReferenceItem);
// Set up the web reference.
DiscoveryClientProtocol protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = "http://localhost/new.asmx";
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/new.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
SD.WebReference webReference = new SD.WebReference(project, "http://localhost/new.asmx", "localhost", "ProxyNamespace", protocol);
changes = webReference.GetChanges(project);
}
[Test]
public void HasChanged()
{
Assert.IsTrue(changes.Changed);
}
[Test]
public void HasNewWsdlFile()
{
Assert.IsNotNull(WebReferenceTestHelper.GetFileProjectItem(changes.NewItems, "Web References\\localhost\\new.wsdl", ItemType.None));
}
[Test]
public void HasNewDiscoFile()
{
Assert.IsNotNull(WebReferenceTestHelper.GetFileProjectItem(changes.NewItems, "Web References\\localhost\\new.disco", ItemType.None));
}
[Test]
public void OldWsdlFileRemoved()
{
Assert.IsNotNull(WebReferenceTestHelper.GetFileProjectItem(changes.ItemsRemoved, "Web References\\localhost\\test.wsdl", ItemType.None));
}
[Test]
public void OldDiscoFileRemoved()
{
Assert.IsNotNull(WebReferenceTestHelper.GetFileProjectItem(changes.ItemsRemoved, "Web References\\localhost\\test.disco", ItemType.None));
}
[Test]
public void WebReferenceUrlNotConsideredNewItem()
{
Assert.IsNull(WebReferenceTestHelper.GetProjectItem(changes.NewItems, ItemType.WebReferenceUrl));
}
[Test]
public void WebReferenceUrlNotConsideredRemoved()
{
Assert.IsNull(WebReferenceTestHelper.GetProjectItem(changes.ItemsRemoved, ItemType.WebReferenceUrl));
}
}
}

127
src/Main/Base/Test/WebReferences/WebReferenceFolderAlreadyExistsTest.cs

@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Checks that the web reference folder name is changed if
/// one exists with the same name.
/// </summary>
[TestFixture]
public class WebReferenceFolderAlreadyExistsTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
MSBuildProject project;
WebReferenceUrl webReferenceUrl;
FileProjectItem discoFileProjectItem;
FileProjectItem referenceMapFileProjectItem;
FileProjectItem wsdlFileProjectItem;
FileProjectItem proxyFileProjectItem;
string oldName = "localhost";
string name = "localhost1";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetupFixture()
{
project = new MSBuildProject();
project.FileName = "C:\\Projects\\Web.csproj";
project.Language = "C#";
WebReferencesProjectItem item = new WebReferencesProjectItem(project);
item.Include = "Web References\\";
project.Items.Add(item);
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, oldName, proxyNamespace, protocol);
// Force generation of items.
List<ProjectItem> items = webReference.Items;
// Change the web reference name.
webReference.Name = name;
webReferenceUrl = (WebReferenceUrl)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.WebReferenceUrl);
discoFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost1\\test.disco", ItemType.None);
referenceMapFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost1\\Reference.map", ItemType.None);
wsdlFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost1\\test.wsdl", ItemType.None);
proxyFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost1\\Reference.cs", ItemType.Compile);
}
[Test]
public void WebReferenceRelativePath()
{
Assert.AreEqual("Web References\\localhost1", webReferenceUrl.RelPath);
}
[Test]
public void WebReferenceName()
{
Assert.AreEqual(name, webReference.Name);
}
[Test]
public void WebReferenceDirectory()
{
Assert.AreEqual(Path.Combine(project.Directory, "Web References\\localhost1"), webReference.Directory);
}
[Test]
public void ProxyFileName()
{
Assert.AreEqual("C:\\Projects\\Web References\\localhost1\\Reference.cs", webReference.WebProxyFileName);
}
[Test]
public void DiscoFileItemExists()
{
Assert.IsNotNull(discoFileProjectItem);
}
[Test]
public void WsdlFileItemExists()
{
Assert.IsNotNull(wsdlFileProjectItem);
}
[Test]
public void ReferenceMapFileItemExists()
{
Assert.IsNotNull(referenceMapFileProjectItem);
}
[Test]
public void ProxyFileItemExists()
{
Assert.IsNotNull(proxyFileProjectItem);
}
}
}

70
src/Main/Base/Test/WebReferences/WebReferenceProjectItemsCachedTest.cs

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests the generated items are not changed if the items have been
/// added to the project. Previously a WebReferencesProjectItem would be
/// missing after the items have been added to the project.
/// </summary>
[TestFixture]
public class WebReferenceProjectItemsCachedTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
WebReferencesProjectItem webReferencesProjectItem;
MSBuildProject project;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetUpFixture()
{
project = new MSBuildProject();
project.FileName = "C:\\projects\\test\\foo.csproj";
project.Language = "C#";
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
foreach (ProjectItem item in webReference.Items) {
project.Items.Add(item);
}
webReferencesProjectItem = webReference.WebReferencesProjectItem;
}
[Test]
public void WebReferencesProjectItemExists()
{
Assert.IsNotNull(webReferencesProjectItem);
}
}
}

209
src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs

@ -0,0 +1,209 @@ @@ -0,0 +1,209 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests the generated project items for a web reference.
/// </summary>
[TestFixture]
public class WebReferenceProjectItemsTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
WebReferenceUrl webReferenceUrl;
FileProjectItem discoFileProjectItem;
FileProjectItem referenceMapFileProjectItem;
FileProjectItem wsdlFileProjectItem;
FileProjectItem proxyFileProjectItem;
WebReferencesProjectItem webReferencesProjectItem;
ReferenceProjectItem webServicesReferenceProjectItem;
MSBuildProject project;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetUpFixture()
{
project = new MSBuildProject();
project.FileName = "C:\\projects\\test\\foo.csproj";
project.Language = "C#";
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
webReferenceUrl = webReference.WebReferenceUrl;
discoFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\test.disco", ItemType.None);
referenceMapFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\Reference.map", ItemType.None);
wsdlFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\test.wsdl", ItemType.None);
proxyFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\Reference.cs", ItemType.Compile);
webReferencesProjectItem = (WebReferencesProjectItem)WebReferenceTestHelper.GetProjectItem(webReference.Items, "Web References\\", ItemType.WebReferences);
webServicesReferenceProjectItem = (ReferenceProjectItem)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.Reference);
}
[Test]
public void WebReferenceInProjectItems()
{
Assert.IsNotNull((WebReferenceUrl)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.WebReferenceUrl));
}
[Test]
public void WebReferenceInclude()
{
Assert.AreEqual(updateFromUrl, webReferenceUrl.Include);
}
[Test]
public void WebReferenceHasProject()
{
Assert.IsNotNull(webReferenceUrl.Project);
}
[Test]
public void WebReferenceHasWebReferencesProjectItem()
{
Assert.IsNotNull(webReference.WebReferencesProjectItem);
}
[Test]
public void WebReferencesDirectory()
{
Assert.AreEqual("C:\\projects\\test\\Web References", webReferencesProjectItem.Directory);
}
[Test]
public void WebReferenceUpdateFromUrl()
{
Assert.AreEqual(updateFromUrl, webReferenceUrl.UpdateFromURL);
}
[Test]
public void WebReferenceUrlBehaviour()
{
Assert.AreEqual("Static", webReferenceUrl.UrlBehavior);
}
[Test]
public void WebReferenceRelPath()
{
Assert.AreEqual("Web References\\localhost", webReferenceUrl.RelPath);
}
[Test]
public void WebReferenceDirectory()
{
Assert.AreEqual("C:\\projects\\test\\Web References\\localhost", webReference.Directory);
}
[Test]
public void DiscoFileItemExists()
{
Assert.IsNotNull(discoFileProjectItem);
}
[Test]
public void WsdlFileItemHasProject()
{
Assert.IsNotNull(wsdlFileProjectItem.Project);
}
[Test]
public void ReferenceMapFileItemGeneratorProperty()
{
Assert.AreEqual("MSDiscoCodeGenerator", referenceMapFileProjectItem.Properties["Generator"]);
}
[Test]
public void ReferenceMapFileItemLastGenOutputProperty()
{
Assert.AreEqual("Reference.cs", referenceMapFileProjectItem.Properties["LastGenOutput"]);
}
[Test]
public void ReferenceMapFileItemHasProject()
{
Assert.IsNotNull(referenceMapFileProjectItem.Project);
}
[Test]
public void ProxyFileItemAutoGenProperty()
{
Assert.AreEqual("True", proxyFileProjectItem.Properties["AutoGen"]);
}
[Test]
public void ProxyFileItemDesignTimeProperty()
{
Assert.AreEqual("True", proxyFileProjectItem.Properties["DesignTime"]);
}
[Test]
public void ProxyFileName()
{
Assert.AreEqual("C:\\projects\\test\\Web References\\localhost\\Reference.cs", webReference.WebProxyFileName);
}
[Test]
public void ProxyFileItemDependentUpon()
{
Assert.AreEqual("Reference.map", proxyFileProjectItem.DependentUpon);
}
[Test]
public void ProxyFileItemHasProject()
{
Assert.IsNotNull(proxyFileProjectItem.Project);
}
[Test]
public void WebReferencesItemHasProject()
{
Assert.IsNotNull(webReferencesProjectItem.Project);
}
[Test]
public void WebServicesReferenceItemHasProject()
{
Assert.IsNotNull(webServicesReferenceProjectItem.Project);
}
[Test]
public void WebServicesReferenceItemInclude()
{
Assert.AreEqual("System.Web.Services", webServicesReferenceProjectItem.Include);
}
[Test]
public void WebReferencesFolder()
{
Assert.AreEqual("C:\\projects\\test\\Web References", webReference.WebReferencesDirectory);
}
}
}

85
src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs

@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Project;
using System;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Helper methods used when testing web references
/// </summary>
public class WebReferenceTestHelper
{
WebReferenceTestHelper()
{
}
public static ProjectItem GetProjectItem(List<ProjectItem> items, string include, ItemType itemType) {
foreach (ProjectItem item in items) {
if (item.ItemType == itemType) {
if (item.Include == include) {
return item;
}
}
}
return null;
}
public static FileProjectItem GetFileProjectItem(List<ProjectItem> items, string include, ItemType itemType) {
foreach (ProjectItem item in items) {
if (item.ItemType == itemType) {
if (item.Include == include) {
return (FileProjectItem)item;
}
}
}
return null;
}
public static ProjectItem GetProjectItem(List<ProjectItem> items, ItemType itemType)
{
foreach (ProjectItem item in items) {
if (item.ItemType == itemType) {
return item;
}
}
return null;
}
public static WebReferencesFolderNode GetWebReferencesFolderNode(ProjectNode projectNode)
{
foreach (AbstractProjectBrowserTreeNode node in projectNode.Nodes) {
if (node is WebReferencesFolderNode) {
return (WebReferencesFolderNode)node;
}
}
return null;
}
public static WebReferenceNode GetWebReferenceNode(WebReferencesFolderNode webReferencesFolderNode) {
foreach (AbstractProjectBrowserTreeNode node in webReferencesFolderNode.Nodes) {
if (node is WebReferenceNode) {
return (WebReferenceNode)node;
}
}
return null;
}
public static FileNode GetFileNode(AbstractProjectBrowserTreeNode parent, string fileName)
{
foreach (AbstractProjectBrowserTreeNode node in parent.Nodes) {
FileNode fileNode = node as FileNode;
if (fileNode != null && fileNode.FileName == fileName) {
return fileNode;
}
}
return null;
}
}
}

59
src/Main/Base/Test/WebReferences/WebReferenceUrlTests.cs

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
[TestFixture]
public class WebReferenceUrlTests
{
[Test]
public void FileName()
{
MSBuildProject project = new MSBuildProject();
project.FileName = "c:\\projects\\test\\foo.csproj";
WebReferenceUrl url = new WebReferenceUrl(project);
url.RelPath = "Web References\\localhost";
url.Include = "http://localhost/test.asmx";
Assert.AreEqual(Path.Combine(project.Directory, url.RelPath), url.FileName);
}
[Test]
public void RelPathEndsWithSlash()
{
MSBuildProject project = new MSBuildProject();
project.FileName = "c:\\projects\\test\\foo.csproj";
WebReferenceUrl url = new WebReferenceUrl(project);
url.RelPath = "Web References\\localhost\\";
url.Include = "http://localhost/test.asmx";
Assert.AreEqual(Path.Combine(project.Directory, url.RelPath.Trim('\\')), url.FileName);
}
[Test]
public void ChangeFileName()
{
MSBuildProject project = new MSBuildProject();
project.FileName = "c:\\projects\\test\\foo.csproj";
WebReferenceUrl url = new WebReferenceUrl(project);
url.RelPath = "Web References\\localhost";
url.Include = "http://localhost/test.asmx";
// Change filename - simulate a folder rename.
url.FileName = "c:\\projects\\test\\Web References\\mywebservice";
Assert.AreEqual("http://localhost/test.asmx", url.Include);
Assert.AreEqual("Web References\\mywebservice", url.RelPath);
}
}
}

98
src/Main/Base/Test/WebReferences/WebServicesReferenceExistsTests.cs

@ -0,0 +1,98 @@ @@ -0,0 +1,98 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using SD = ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Collections.Generic;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.WebReferences
{
/// <summary>
/// Tests that the generated project items for a web reference do not include
/// a reference to System.Web.Services if one already exists in the project.
/// </summary>
[TestFixture]
public class WebServicesReferenceExistsTest
{
SD.WebReference webReference;
DiscoveryClientProtocol protocol;
ReferenceProjectItem webServicesReferenceProjectItem;
MSBuildProject project;
string name = "localhost";
string proxyNamespace = "WebReferenceNamespace";
string updateFromUrl = "http://localhost/test.asmx";
[TestFixtureSetUp]
public void SetUpFixture()
{
project = new MSBuildProject();
project.FileName = "C:\\projects\\test\\foo.csproj";
project.Language = "C#";
ReferenceProjectItem referenceItem = new ReferenceProjectItem(project, "System.Web.Services");
project.Items.Add(referenceItem);
protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();
discoveryRef.Url = updateFromUrl;
protocol.References.Add(discoveryRef);
ContractReference contractRef = new ContractReference();
contractRef.Url = "http://localhost/test.asmx?wsdl";
contractRef.ClientProtocol = new DiscoveryClientProtocol();
ServiceDescription desc = new ServiceDescription();
contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc);
protocol.References.Add(contractRef);
webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol);
webServicesReferenceProjectItem = (ReferenceProjectItem)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.Reference);
}
[Test]
public void WebServicesReferenceItemDoesNotExist()
{
Assert.IsNull(webServicesReferenceProjectItem);
}
[Test]
public void WebServicesReferenceDoesNotExist1()
{
MSBuildProject project = new MSBuildProject();
ReferenceProjectItem referenceItem = new ReferenceProjectItem(project, "System.Windows.Forms");
project.Items.Add(referenceItem);
Assert.IsFalse(SD.WebReference.ProjectContainsWebServicesReference(project));
}
[Test]
public void WebServicesReferenceExists1()
{
MSBuildProject project = new MSBuildProject();
ReferenceProjectItem referenceItem = new ReferenceProjectItem(project, "system.web.services");
project.Items.Add(referenceItem);
Assert.IsTrue(SD.WebReference.ProjectContainsWebServicesReference(project));
}
[Test]
public void WebServicesReferenceExists2()
{
MSBuildProject project = new MSBuildProject();
ReferenceProjectItem referenceItem = new ReferenceProjectItem(project, "System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
project.Items.Add(referenceItem);
Assert.IsTrue(SD.WebReference.ProjectContainsWebServicesReference(project));
}
}
}

BIN
src/Main/StartUp/Project/Resources/StringResources.resources

Binary file not shown.

2
src/SharpDevelop.Tests.sln

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.885
# SharpDevelop 2.0.0.936
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection

Loading…
Cancel
Save