diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDescriptor.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDescriptor.cs index 49a497e294..0277617acc 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDescriptor.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDescriptor.cs @@ -25,6 +25,10 @@ namespace ICSharpCode.Core get { if (binding == null) { binding = (ILanguageBinding)codon.AddIn.CreateObject(codon.Properties["class"]); + if (binding != null) { + if (binding.Language != this.Language) + throw new InvalidOperationException("The Language property of the language binding must be equal to the id of the LanguageBinding codon!"); + } } return binding; } diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs index 91950dcb70..d77f8fda46 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs @@ -23,6 +23,14 @@ namespace ICSharpCode.Core bindings = AddInTree.BuildItems("/SharpDevelop/Workbench/LanguageBindings", null, false); } + /// + /// Overwrites the list of used bindings. Used for unit tests. + /// + public static void SetBindings(IList bindings) + { + LanguageBindingService.bindings = bindings; + } + public static string GetProjectFileExtension(string languageName) { LanguageBindingDescriptor descriptor = GetCodonPerLanguageName(languageName); @@ -50,7 +58,7 @@ namespace ICSharpCode.Core public static LanguageBindingDescriptor GetCodonPerLanguageName(string languagename) { foreach (LanguageBindingDescriptor binding in bindings) { - if (binding.Binding.Language == languagename) { + if (binding.Language == languagename) { return binding; } } diff --git a/src/Main/Base/Test/WebReferences/ProjectHasExistingWebRefFolderTest.cs b/src/Main/Base/Test/WebReferences/ProjectHasExistingWebRefFolderTest.cs index 65f620df74..d4757c5430 100644 --- a/src/Main/Base/Test/WebReferences/ProjectHasExistingWebRefFolderTest.cs +++ b/src/Main/Base/Test/WebReferences/ProjectHasExistingWebRefFolderTest.cs @@ -54,6 +54,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); webReferencesProjectItem = WebReferenceTestHelper.GetProjectItem(webReference.Items, "Web References\\", ItemType.WebReferences); } diff --git a/src/Main/Base/Test/WebReferences/RenamedWebReferencesFolderTest.cs b/src/Main/Base/Test/WebReferences/RenamedWebReferencesFolderTest.cs index cb17a907c3..91002d3a59 100644 --- a/src/Main/Base/Test/WebReferences/RenamedWebReferencesFolderTest.cs +++ b/src/Main/Base/Test/WebReferences/RenamedWebReferencesFolderTest.cs @@ -45,6 +45,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences protocol = new DiscoveryClientProtocol(); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); webReferenceUrl = (WebReferenceUrl)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.WebReferenceUrl); } diff --git a/src/Main/Base/Test/WebReferences/UnsupportedLanguageTest.cs b/src/Main/Base/Test/WebReferences/UnsupportedLanguageTest.cs index 98acdcf7a0..eb12019870 100644 --- a/src/Main/Base/Test/WebReferences/UnsupportedLanguageTest.cs +++ b/src/Main/Base/Test/WebReferences/UnsupportedLanguageTest.cs @@ -52,6 +52,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); proxyFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\Reference.vb", ItemType.Compile); diff --git a/src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs b/src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs index 34a16463d9..66d4d93680 100644 --- a/src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs +++ b/src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs @@ -51,6 +51,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); proxyFileProjectItem = WebReferenceTestHelper.GetFileProjectItem(webReference.Items, "Web References\\localhost\\Reference.vb", ItemType.Compile); diff --git a/src/Main/Base/Test/WebReferences/WebReferenceChangesTest.cs b/src/Main/Base/Test/WebReferences/WebReferenceChangesTest.cs index 38671e85e8..56e3d91bbd 100644 --- a/src/Main/Base/Test/WebReferences/WebReferenceChangesTest.cs +++ b/src/Main/Base/Test/WebReferences/WebReferenceChangesTest.cs @@ -78,6 +78,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + SD.WebReference webReference = new SD.WebReference(project, "http://localhost/new.asmx", "localhost", "ProxyNamespace", protocol); changes = webReference.GetChanges(project); } diff --git a/src/Main/Base/Test/WebReferences/WebReferenceFolderAlreadyExistsTest.cs b/src/Main/Base/Test/WebReferences/WebReferenceFolderAlreadyExistsTest.cs index 87cc8155cd..2d8898c361 100644 --- a/src/Main/Base/Test/WebReferences/WebReferenceFolderAlreadyExistsTest.cs +++ b/src/Main/Base/Test/WebReferences/WebReferenceFolderAlreadyExistsTest.cs @@ -61,6 +61,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, oldName, proxyNamespace, protocol); // Force generation of items. diff --git a/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsCachedTest.cs b/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsCachedTest.cs index c8d1eb8fb6..70c1dc1d47 100644 --- a/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsCachedTest.cs +++ b/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsCachedTest.cs @@ -53,6 +53,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); foreach (ProjectItem item in webReference.Items) { diff --git a/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs b/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs index 0454da1eb9..fb9acac99b 100644 --- a/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs +++ b/src/Main/Base/Test/WebReferences/WebReferenceProjectItemsTest.cs @@ -57,6 +57,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); webReferenceUrl = webReference.WebReferenceUrl; diff --git a/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs b/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs index 9023f1174e..7952e3f1ec 100644 --- a/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs +++ b/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs @@ -5,6 +5,7 @@ // $Revision$ // +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; using System; using System.Collections.Generic; @@ -14,10 +15,24 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences /// /// Helper methods used when testing web references /// - public class WebReferenceTestHelper + public static class WebReferenceTestHelper { - WebReferenceTestHelper() + public static void InitializeLanguageBindings() { + Properties prop = new Properties(); + prop["id"] = "C#"; + prop["supportedextensions"] = ".cs"; + prop["projectfileextension"] = ".csproj"; + Codon codon1 = new Codon(null, "LanguageBinding", prop, new Condition[0]); + prop = new Properties(); + prop["id"] = "VBNet"; + prop["supportedextensions"] = ".vb"; + prop["projectfileextension"] = ".vbproj"; + Codon codon2 = new Codon(null, "LanguageBinding", prop, new Condition[0]); + LanguageBindingService.SetBindings(new LanguageBindingDescriptor[] { + new LanguageBindingDescriptor(codon1), + new LanguageBindingDescriptor(codon2) + }); } public static ProjectItem GetProjectItem(List items, string include, ItemType itemType) { diff --git a/src/Main/Base/Test/WebReferences/WebServicesReferenceExistsTests.cs b/src/Main/Base/Test/WebReferences/WebServicesReferenceExistsTests.cs index 7f8779ce35..d65c20bd61 100644 --- a/src/Main/Base/Test/WebReferences/WebServicesReferenceExistsTests.cs +++ b/src/Main/Base/Test/WebReferences/WebServicesReferenceExistsTests.cs @@ -55,6 +55,8 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences contractRef.ClientProtocol.Documents.Add(contractRef.Url, desc); protocol.References.Add(contractRef); + WebReferenceTestHelper.InitializeLanguageBindings(); + webReference = new SD.WebReference(project, updateFromUrl, name, proxyNamespace, protocol); webServicesReferenceProjectItem = (ReferenceProjectItem)WebReferenceTestHelper.GetProjectItem(webReference.Items, ItemType.Reference); }