Browse Source

Add IParser.CreateCompilationForSingleFile to improve editing files outside of projects.

Fix build errors in unit tests.
newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
654b09a84d
  1. 17
      SharpDevelop.Tests.sln
  2. 22
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs
  3. 4
      src/AddIns/BackendBindings/CSharpBinding/Tests/CSharpBinding.Tests.csproj
  4. 16
      src/AddIns/BackendBindings/CSharpBinding/Tests/MockTextEditor.cs
  5. 14
      src/AddIns/BackendBindings/CSharpBinding/Tests/OverrideCompletionTests.cs
  6. 6
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlParser.cs
  7. BIN
      src/Libraries/Mono.Cecil/Test/libs/nunit-2.5.10/nunit.framework.dll
  8. 7
      src/Main/Base/Project/Src/Services/ParserService/IParser.cs
  9. 45
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  10. 13
      src/Main/Base/Test/CodeConverterTests.cs
  11. 2
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  12. 443
      src/Main/Base/Test/MemberLookupHelperTests.cs
  13. 2900
      src/Main/Base/Test/NRefactoryResolverTests.cs
  14. 18
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  15. 6
      src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs

17
SharpDevelop.Tests.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.2.0.8679-Beta 2
# SharpDevelop 4.2.0.8695-Beta 2
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -132,6 +132,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharpBinding", "src\AddIns @@ -132,6 +132,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharpBinding", "src\AddIns
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CppBinding", "src\AddIns\BackendBindings\CppBinding\CppBinding\CppBinding.csproj", "{70966F84-74C9-4067-A379-0C674A929233}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding.Tests", "src\AddIns\BackendBindings\CSharpBinding\Tests\CSharpBinding.Tests.csproj", "{52006F3F-3156-45DE-89D8-C4813694FBA4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -459,6 +461,18 @@ Global @@ -459,6 +461,18 @@ Global
{63D3B27A-D966-4902-90B3-30290E1692F1}.Release|Win32.ActiveCfg = Release|Any CPU
{63D3B27A-D966-4902-90B3-30290E1692F1}.Release|x86.Build.0 = Release|x86
{63D3B27A-D966-4902-90B3-30290E1692F1}.Release|x86.ActiveCfg = Release|x86
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Win32.Build.0 = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Win32.ActiveCfg = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|x86.Build.0 = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|x86.ActiveCfg = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Any CPU.Build.0 = Release|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Win32.Build.0 = Release|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Win32.ActiveCfg = Release|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|x86.Build.0 = Release|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -495,6 +509,7 @@ Global @@ -495,6 +509,7 @@ Global
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94}
{E954F3CB-A446-492F-A664-2B376EBC86E8} = {E0646C25-36F2-4524-969F-FA621353AB94}
{70966F84-74C9-4067-A379-0C674A929233} = {E0646C25-36F2-4524-969F-FA621353AB94}
{52006F3F-3156-45DE-89D8-C4813694FBA4} = {E0646C25-36F2-4524-969F-FA621353AB94}
{80F76D10-0B44-4D55-B4BD-DAEB5464090C} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}

22
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs

@ -5,6 +5,7 @@ using System; @@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.Core;
@ -15,6 +16,7 @@ using ICSharpCode.NRefactory.CSharp.TypeSystem; @@ -15,6 +16,7 @@ using ICSharpCode.NRefactory.CSharp.TypeSystem;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.Search;
@ -92,7 +94,7 @@ namespace CSharpBinding.Parser @@ -92,7 +94,7 @@ namespace CSharpBinding.Parser
AddCommentTags(cu, parseInfo.TagComments, fileContent);
return parseInfo;
return parseInfo;
}
void AddCommentTags(CompilationUnit cu, IList<TagComment> tagComments, ITextSource fileContent)
@ -155,5 +157,23 @@ namespace CSharpBinding.Parser @@ -155,5 +157,23 @@ namespace CSharpBinding.Parser
callback(new Reference(region, result, offset, length, builder));
}, cancellationToken);
}
static readonly Lazy<IAssemblyReference[]> defaultReferences = new Lazy<IAssemblyReference[]>(
delegate {
Assembly[] assemblies = {
typeof(object).Assembly,
typeof(Uri).Assembly,
typeof(Enumerable).Assembly
};
return assemblies.Select(asm => new CecilLoader().LoadAssemblyFile(asm.Location)).ToArray();
});
public ICompilation CreateCompilationForSingleFile(FileName fileName, IParsedFile parsedFile)
{
return new CSharpProjectContent()
.AddAssemblyReferences(defaultReferences.Value)
.UpdateProjectContent(null, parsedFile)
.CreateCompilation();
}
}
}

4
src/AddIns/BackendBindings/CSharpBinding/Tests/CSharpBinding.Tests.csproj

@ -83,12 +83,12 @@ @@ -83,12 +83,12 @@
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj">
<Project>{53DCA265-3C3C-42F9-B647-F72BA678122B}</Project>
<Name>ICSharpCode.NRefactory.CSharp</Name>
<Private>False</Private>
<Private>True</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
<Name>ICSharpCode.NRefactory</Name>
<Private>False</Private>
<Private>True</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>

16
src/AddIns/BackendBindings/CSharpBinding/Tests/MockTextEditor.cs

@ -6,11 +6,13 @@ using System; @@ -6,11 +6,13 @@ using System;
using System.Collections.Generic;
using ICSharpCode.AvalonEdit;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using ICSharpCode.SharpDevelop.Parser;
namespace CSharpBinding.Tests
{
@ -22,17 +24,10 @@ namespace CSharpBinding.Tests @@ -22,17 +24,10 @@ namespace CSharpBinding.Tests
/// </summary>
public class MockTextEditor : AvalonEditTextEditorAdapter
{
DefaultProjectContent pc;
public MockTextEditor()
: base(new TextEditor())
{
PropertyService.InitializeServiceForUnitTests();
pc = new DefaultProjectContent();
pc.ReferencedContents.Add(AssemblyParserService.DefaultProjectContentRegistry.Mscorlib);
this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
this.TextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
}
public override FileName FileName {
@ -42,9 +37,8 @@ namespace CSharpBinding.Tests @@ -42,9 +37,8 @@ namespace CSharpBinding.Tests
public void CreateParseInformation()
{
var parser = new CSharpBinding.Parser.TParser();
var cu = parser.Parse(pc, this.FileName, this.Document);
ParserService.RegisterParseInformation(this.FileName, cu);
pc.UpdateCompilationUnit(null, cu, this.FileName);
var parseInfo = parser.Parse(this.FileName, this.Document, true);
ParserService.RegisterParseInformation(parseInfo.FileName, parseInfo, parser);
}
ICompletionItemList lastCompletionItemList;

14
src/AddIns/BackendBindings/CSharpBinding/Tests/OverrideCompletionTests.cs

@ -1,11 +1,14 @@ @@ -1,11 +1,14 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using CSharpBinding.Completion;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using System;
using System.Linq;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
using Rhino.Mocks;
namespace CSharpBinding.Tests
{
@ -13,6 +16,7 @@ namespace CSharpBinding.Tests @@ -13,6 +16,7 @@ namespace CSharpBinding.Tests
/// Tests code completion after the 'override' keyword
/// </summary>
[TestFixture]
[Ignore("Override completion is not yet implemented")]
public class OverrideCompletionTests
{
string programStart = @"using System;
@ -34,23 +38,23 @@ class DerivedClass : BaseClass { @@ -34,23 +38,23 @@ class DerivedClass : BaseClass {
string programEnd = "\n}";
MockTextEditor textEditor;
CodeCompletionKeyPressResult keyPressResult;
bool keyPressResult;
[SetUp]
public void SetUp()
{
textEditor = new MockTextEditor();
textEditor.Document.Text = programStart + "override" + programEnd;
textEditor.Caret.Offset = programStart.Length + "override".Length;
textEditor.Document.Text = programStart + "override " + programEnd;
textEditor.Caret.Offset = programStart.Length + "override ".Length;
textEditor.CreateParseInformation();
CSharpCompletionBinding completion = new CSharpCompletionBinding();
keyPressResult = completion.HandleKeyPress(textEditor, ' ');
keyPressResult = completion.HandleKeyPressed(textEditor, ' ');
}
[Test]
public void CheckKeyPressResult()
{
Assert.AreEqual(CodeCompletionKeyPressResult.Completed, keyPressResult);
Assert.IsTrue(keyPressResult);
}
[Test]

6
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlParser.cs

@ -180,5 +180,11 @@ namespace ICSharpCode.XamlBinding @@ -180,5 +180,11 @@ namespace ICSharpCode.XamlBinding
{
throw new NotImplementedException();
}
public ICompilation CreateCompilationForSingleFile(FileName fileName, IParsedFile parsedFile)
{
// TODO: create a simple compilation with WPF references?
return null;
}
}
}

BIN
src/Libraries/Mono.Cecil/Test/libs/nunit-2.5.10/nunit.framework.dll

Binary file not shown.

7
src/Main/Base/Project/Src/Services/ParserService/IParser.cs

@ -55,5 +55,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -55,5 +55,12 @@ namespace ICSharpCode.SharpDevelop.Project
ResolveResult Resolve(ParseInformation parseInfo, TextLocation location, ICompilation compilation, CancellationToken cancellationToken);
void FindLocalReferences(ParseInformation parseInfo, ITextSource fileContent, IVariable variable, ICompilation compilation, Action<Reference> callback, CancellationToken cancellationToken);
/// <summary>
/// Creates a compilation for a single file that does not belong to any project.
/// Used by <see cref="ParserService.GetCompilationForFile"/>.
/// May return null if this operation is not supported.
/// </summary>
ICompilation CreateCompilationForSingleFile(FileName fileName, IParsedFile parsedFile);
}
}

45
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -49,7 +49,20 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -49,7 +49,20 @@ namespace ICSharpCode.SharpDevelop.Parser
public static ICompilation GetCompilationForFile(FileName fileName)
{
Solution solution = ProjectService.OpenSolution;
return GetCurrentSolutionSnapshot().GetCompilation(solution != null ? solution.FindProjectContainingFile(fileName) : null);
IProject project = solution != null ? solution.FindProjectContainingFile(fileName) : null;
if (project != null)
return GetCompilation(project);
var entry = GetFileEntry(fileName, false);
if (entry != null && entry.parser != null) {
var parsedFile = entry.GetExistingParsedFile();
if (parsedFile != null) {
ICompilation compilation = entry.parser.CreateCompilationForSingleFile(fileName, parsedFile);
if (compilation != null)
return compilation;
}
}
return MinimalCorlib.Instance.CreateCompilation();
}
// Use a WeakReference for caching the solution snapshot - it can require
@ -275,6 +288,15 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -275,6 +288,15 @@ namespace ICSharpCode.SharpDevelop.Parser
this.parser = CreateParser(fileName);
}
public FileEntry(FileName fileName, ParseInformation parseInfo, IParser parser)
{
this.fileName = fileName;
this.parser = parser;
this.mainParsedFile = parseInfo != null ? parseInfo.ParsedFile : null;
if (parseInfo != null && parseInfo.IsFullParseInformation)
this.cachedParseInformation = parseInfo;
}
public void AddParsedFileListener(ParsedFileListener listener, bool startAsyncParse)
{
bool isNewEntry;
@ -307,20 +329,6 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -307,20 +329,6 @@ namespace ICSharpCode.SharpDevelop.Parser
}
}
/// <summary>
/// Intended for unit tests only
/// </summary>
public void RegisterParseInformation(ParseInformation parseInfo)
{
lock (this) {
this.mainParsedFile = (parseInfo != null) ? parseInfo.ParsedFile : null;
if (parseInfo != null && parseInfo.IsFullParseInformation)
this.cachedParseInformation = parseInfo;
else
this.cachedParseInformation = null;
}
}
public ParseInformation GetCachedParseInformation()
{
return cachedParseInformation; // read volatile
@ -839,10 +847,11 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -839,10 +847,11 @@ namespace ICSharpCode.SharpDevelop.Parser
/// Registers a compilation unit in the parser service.
/// Does not fire the OnParseInformationUpdated event, please use this for unit tests only!
/// </summary>
public static void RegisterParseInformation(ParseInformation parseInfo)
public static void RegisterParseInformation(FileName fileName, ParseInformation parseInfo, IParser parser = null)
{
FileEntry entry = GetFileEntry(parseInfo.FileName, true);
entry.RegisterParseInformation(parseInfo);
lock (syncLock) {
fileEntryDict[fileName] = new FileEntry(fileName, parseInfo, parser);
}
}
/// <summary>

13
src/Main/Base/Test/CodeConverterTests.cs

@ -6,11 +6,7 @@ using System.IO; @@ -6,11 +6,7 @@ using System.IO;
using System.Text;
using System.Diagnostics;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.PrettyPrinter;
using ICSharpCode.NRefactory.Visitors;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
namespace ICSharpCode.SharpDevelop.Tests
{
@ -21,18 +17,17 @@ namespace ICSharpCode.SharpDevelop.Tests @@ -21,18 +17,17 @@ namespace ICSharpCode.SharpDevelop.Tests
public class CodeConverterTests
{
#region TestProgram (converting code)
ProjectContentRegistry projectContentRegistry = AssemblyParserService.DefaultProjectContentRegistry;
void TestProgramCS2VB(string sourceCode, string expectedOutput)
{
TestProgram(SupportedLanguage.CSharp, sourceCode, expectedOutput);
Assert.Ignore("Code converter is not implemented");
}
void TestProgramVB2CS(string sourceCode, string expectedOutput)
{
TestProgram(SupportedLanguage.VBNet, sourceCode, expectedOutput);
Assert.Ignore("Code converter is not implemented");
}
/*
void TestProgram(SupportedLanguage sourceLanguage, string sourceCode, string expectedOutput)
{
DefaultProjectContent pc = new DefaultProjectContent();
@ -80,7 +75,7 @@ namespace ICSharpCode.SharpDevelop.Tests @@ -80,7 +75,7 @@ namespace ICSharpCode.SharpDevelop.Tests
}
Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
Assert.AreEqual(expectedOutput.Replace("\r", ""), outputVisitor.Text.Trim().Replace("\r", ""));
}
}*/
#endregion
#region TestMember/TestStatement/TestExpression

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

@ -80,7 +80,6 @@ @@ -80,7 +80,6 @@
<Compile Include="GetElementByReflectionNameTests.cs" />
<Compile Include="Highlighting\AddInHighlightingResourceTests.cs" />
<Compile Include="Highlighting\SyntaxDoozerAddsHighlightingToHighlightingManagerTestFixture.cs" />
<Compile Include="NRefactoryResolverTests.cs" />
<Compile Include="CollectionClassOverridesTestFixture.cs" />
<Compile Include="OutputTextLineParserTests.cs" />
<Compile Include="OverridableMethodsTestFixture.cs" />
@ -94,7 +93,6 @@ @@ -94,7 +93,6 @@
<Compile Include="SearchClassTests.cs" />
<Compile Include="OverloadFinding.cs" />
<Compile Include="SearchGenericClassTests.cs" />
<Compile Include="MemberLookupHelperTests.cs" />
<Compile Include="ServiceReferences\DirectoryNodeFactoryTests.cs" />
<Compile Include="ServiceReferences\ItemTypeTests.cs" />
<Compile Include="ServiceReferences\MSBuildBasedProjectTests.cs" />

443
src/Main/Base/Test/MemberLookupHelperTests.cs

@ -1,443 +0,0 @@ @@ -1,443 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests
{
[TestFixture]
public class MemberLookupHelperTests
{
IProjectContent msc; // = ProjectContentRegistry.Mscorlib;
IProjectContent swf; // = ProjectContentRegistry.GetProjectContentForReference("System.Windows.Forms", "System.Windows.Forms");
DefaultClass dummyClass;
IMethod methodForGenericCalls;
[TestFixtureSetUp]
public void FixtureSetup()
{
ProjectContentRegistry r = new ProjectContentRegistry();
msc = r.Mscorlib;
swf = r.GetProjectContentForReference("System.Windows.Forms", typeof(System.Windows.Forms.Form).Module.FullyQualifiedName);
DefaultProjectContent dpc = new DefaultProjectContent();
dpc.ReferencedContents.Add(msc);
DefaultCompilationUnit cu = new DefaultCompilationUnit(dpc);
dummyClass = new DefaultClass(cu, "DummyClass");
cu.Classes.Add(dummyClass);
methodForGenericCalls = new DefaultMethod(dummyClass, "DummyMethod");
dummyClass.Methods.Add(methodForGenericCalls);
}
IReturnType DictionaryRT {
get {
return new GetClassReturnType(msc, "System.Collections.Generic.Dictionary", 2);
}
}
IClass EnumerableClass {
get {
return msc.GetClass("System.Collections.Generic.IEnumerable", 1);
}
}
ConstructedReturnType EnumerableOf(IReturnType element)
{
return new ConstructedReturnType(EnumerableClass.DefaultReturnType, new IReturnType[] { element });
}
ConstructedReturnType IListOf(IReturnType element)
{
return new ConstructedReturnType(msc.GetClass("System.Collections.Generic.IList", 1).DefaultReturnType, new IReturnType[] { element });
}
ConstructedReturnType ListOf(IReturnType element)
{
return new ConstructedReturnType(msc.GetClass("System.Collections.Generic.List", 1).DefaultReturnType, new IReturnType[] { element });
}
[Test]
public void TypeParameterPassedToBaseClassTestDictionary()
{
IReturnType[] stringInt = { msc.SystemTypes.String, msc.SystemTypes.Int32 };
IReturnType rrt = new ConstructedReturnType(DictionaryRT, stringInt);
IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(rrt, EnumerableClass, 0);
Assert.AreEqual("System.Collections.Generic.KeyValuePair", res.FullyQualifiedName);
ConstructedReturnType resc = res.CastToConstructedReturnType();
Assert.AreEqual("System.String", resc.TypeArguments[0].FullyQualifiedName);
Assert.AreEqual("System.Int32", resc.TypeArguments[1].FullyQualifiedName);
}
[Test]
public void TypeParameterPassedToBaseClassTestString()
{
IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(msc.SystemTypes.String, EnumerableClass, 0);
Assert.AreEqual("System.Char", res.FullyQualifiedName);
}
DefaultClass CreateClassDerivingFromListOfString()
{
DefaultProjectContent dpc = new DefaultProjectContent();
dpc.ReferencedContents.Add(msc);
DefaultCompilationUnit cu = new DefaultCompilationUnit(dpc);
cu.UsingScope.Usings.Add(new DefaultUsing(dpc, new DomRegion(1,1, 5,5)));
cu.UsingScope.Usings[0].Usings.Add("System.Collections.Generic");
DefaultClass listDerivingClass = new DefaultClass(cu, "DerivesFromList");
cu.Classes.Add(listDerivingClass);
listDerivingClass.BaseTypes.Add(new ConstructedReturnType(new SearchClassReturnType(dpc, listDerivingClass, 3, 1,
"List", 1),
new IReturnType[] {
new GetClassReturnType(dpc, "System.String", 0)
}));
return listDerivingClass;
}
DefaultClass CreateGenericClassDerivingFromList()
{
DefaultProjectContent dpc = new DefaultProjectContent();
dpc.ReferencedContents.Add(msc);
DefaultCompilationUnit cu = new DefaultCompilationUnit(dpc);
cu.UsingScope.Usings.Add(new DefaultUsing(dpc, new DomRegion(1,1, 5,5)));
cu.UsingScope.Usings[0].Usings.Add("System.Collections.Generic");
DefaultClass listDerivingClass = new DefaultClass(cu, "DerivesFromList");
cu.Classes.Add(listDerivingClass);
listDerivingClass.TypeParameters.Add(new DefaultTypeParameter(listDerivingClass, "T", 0));
listDerivingClass.BaseTypes.Add(new ConstructedReturnType(new SearchClassReturnType(dpc, listDerivingClass, 3, 1,
"List", 1),
new IReturnType[] {
new GenericReturnType(listDerivingClass.TypeParameters[0])
}));
return listDerivingClass;
}
[Test]
public void TypeParameterPassedToBaseClassTestClassDerivingFromList()
{
DefaultClass listDerivingClass = CreateClassDerivingFromListOfString();
IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(listDerivingClass.DefaultReturnType,
EnumerableClass, 0);
Assert.AreEqual("System.String", res.FullyQualifiedName);
}
[Test]
public void TypeParameterPassedToBaseClassTestGenericClassDerivingFromList()
{
DefaultClass listDerivingClass = CreateGenericClassDerivingFromList();
ConstructedReturnType testType = new ConstructedReturnType(listDerivingClass.DefaultReturnType,
new IReturnType[] { msc.SystemTypes.String });
IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(testType,
EnumerableClass, 0);
Assert.AreEqual("System.String", res.FullyQualifiedName);
}
[Test]
public void TypeParameterPassedToBaseClassSameClass()
{
IReturnType[] stringArr = { msc.SystemTypes.String };
IReturnType rrt = new ConstructedReturnType(EnumerableClass.DefaultReturnType, stringArr);
IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(rrt, EnumerableClass, 0);
Assert.AreEqual("System.String", res.FullyQualifiedName);
}
[Test]
public void GetCommonType()
{
IReturnType res = MemberLookupHelper.GetCommonType(msc,
swf.GetClass("System.Windows.Forms.ToolStripButton", 0).DefaultReturnType,
swf.GetClass("System.Windows.Forms.ToolStripSeparator", 0).DefaultReturnType);
Assert.AreEqual("System.Windows.Forms.ToolStripItem", res.FullyQualifiedName);
}
[Test]
public void GetCommonTypeOfStringAndNull()
{
IReturnType res = MemberLookupHelper.GetCommonType(msc,
msc.GetClass("System.String", 0).DefaultReturnType,
NullReturnType.Instance);
Assert.AreEqual("System.String", res.FullyQualifiedName);
}
[Test]
public void GetCommonTypeOfNullAndString()
{
IReturnType res = MemberLookupHelper.GetCommonType(msc,
NullReturnType.Instance,
msc.GetClass("System.String", 0).DefaultReturnType);
Assert.AreEqual("System.String", res.FullyQualifiedName);
}
[Test]
public void GetTypeInheritanceTreeOfClassDerivingFromListOfString()
{
if (DotnetDetection.IsDotnet45Installed())
Assert.Ignore(".NET 4.5 adds IReadOnlyList");
List<string> results = new List<IReturnType>(
MemberLookupHelper.GetTypeInheritanceTree(CreateClassDerivingFromListOfString().DefaultReturnType)
).ConvertAll<string>(delegate (IReturnType rt) { return rt.DotNetName; });
results.Sort(); // order is not guaranteed, so sort for the unit test
Assert.AreEqual("DerivesFromList;" +
"System.Collections.Generic.ICollection{System.String};" +
"System.Collections.Generic.IEnumerable{System.String};" +
"System.Collections.Generic.IList{System.String};" +
"System.Collections.Generic.List{System.String};" +
"System.Collections.ICollection;" +
"System.Collections.IEnumerable;" +
"System.Collections.IList;" +
"System.Object",
string.Join(";", results.ToArray()));
}
[Test]
public void GetTypeInheritanceTreeOfStringArray()
{
List<string> results = new List<IReturnType>(
MemberLookupHelper.GetTypeInheritanceTree(new ArrayReturnType(msc, msc.SystemTypes.String, 1))
).ConvertAll<string>(delegate (IReturnType rt) { return rt.DotNetName; });
results.Sort(); // order is not guaranteed, so sort for the unit test
Assert.AreEqual("System.Collections.Generic.ICollection{System.String};" +
"System.Collections.Generic.IEnumerable{System.String};" +
"System.Collections.Generic.IList{System.String};" +
"System.Collections.ICollection;" +
"System.Collections.IEnumerable;" +
"System.Collections.IList;" +
"System.Object;" +
"System.String[]",
string.Join(";", results.ToArray()));
}
[Test]
public void ConversionExistsFromStringArrayToObjectArray()
{
Assert.IsTrue(MemberLookupHelper.ConversionExists(new ArrayReturnType(msc, msc.SystemTypes.String, 1),
new ArrayReturnType(msc, msc.SystemTypes.Object, 1)));
}
[Test]
public void NoConversionExistsFromObjectArrayToStringArray()
{
Assert.IsFalse(MemberLookupHelper.ConversionExists(new ArrayReturnType(msc, msc.SystemTypes.Object, 1),
new ArrayReturnType(msc, msc.SystemTypes.String, 1)));
}
[Test]
public void ConversionExistsFromStringArrayToStringEnumerable()
{
Assert.IsTrue(MemberLookupHelper.ConversionExists(new ArrayReturnType(msc, msc.SystemTypes.String, 1),
EnumerableOf(msc.SystemTypes.String)));
}
[Test]
public void NoConversionExistsFromStringEnumerableToObjectEnumerable()
{
Assert.IsFalse(MemberLookupHelper.ConversionExists(EnumerableOf(msc.SystemTypes.String),
EnumerableOf(msc.SystemTypes.Object)));
}
[Test]
public void ConversionExistsFromStringIListToStringEnumerable()
{
Assert.IsTrue(MemberLookupHelper.ConversionExists(IListOf(msc.SystemTypes.String),
EnumerableOf(msc.SystemTypes.String)));
}
[Test]
public void NoConversionExistsFromStringIListToIntEnumerable()
{
Assert.IsFalse(MemberLookupHelper.ConversionExists(IListOf(msc.SystemTypes.String),
EnumerableOf(msc.SystemTypes.Int32)));
}
[Test]
public void ConversionExistsFromStringListToStringEnumerable()
{
Assert.IsTrue(MemberLookupHelper.ConversionExists(ListOf(msc.SystemTypes.String),
EnumerableOf(msc.SystemTypes.String)));
}
[Test]
public void ConversionExistsFromClassDerivingFromListOfStringToStringEnumerable()
{
Assert.IsTrue(MemberLookupHelper.ConversionExists(CreateClassDerivingFromListOfString().DefaultReturnType,
EnumerableOf(msc.SystemTypes.String)));
}
[Test]
public void ConversionExistsFromClassDerivingFromListOfStringToListOfString()
{
Assert.IsTrue(MemberLookupHelper.ConversionExists(CreateClassDerivingFromListOfString().DefaultReturnType,
ListOf(msc.SystemTypes.String)));
}
bool IsApplicable(IReturnType argument, IReturnType expected)
{
return MemberLookupHelper.IsApplicable(argument, expected, methodForGenericCalls);
}
GenericReturnType CreateT()
{
ITypeParameter tp = new DefaultTypeParameter(methodForGenericCalls, "T", 0);
return new GenericReturnType(tp);
}
GenericReturnType CreateTWithDisposableConstraint()
{
GenericReturnType rt = CreateT();
rt.TypeParameter.Constraints.Add(msc.GetClass("System.IDisposable", 0).DefaultReturnType);
return rt;
}
[Test]
public void StringIsApplicableOnT()
{
// no conversion exists
Assert.IsFalse(MemberLookupHelper.ConversionExists(msc.SystemTypes.String,
CreateT()));
// but it is applicable
Assert.IsTrue(IsApplicable(msc.SystemTypes.String,
CreateT()));
}
[Test]
public void NoConversionExistsFromStringToDisposableT()
{
// no conversion exists
Assert.IsFalse(MemberLookupHelper.ConversionExists(msc.SystemTypes.String,
CreateTWithDisposableConstraint()));
// but it is applicable (applicability ignores constraints)
Assert.IsTrue(IsApplicable(msc.SystemTypes.String,
CreateTWithDisposableConstraint()));
}
[Test]
public void DisposableClassIsApplicableOnDisposableT()
{
Assert.IsFalse(MemberLookupHelper.ConversionExists(msc.GetClass("System.CharEnumerator", 0).DefaultReturnType,
CreateTWithDisposableConstraint()));
Assert.IsTrue(IsApplicable(msc.GetClass("System.CharEnumerator", 0).DefaultReturnType,
CreateTWithDisposableConstraint()));
}
[Test]
public void ListOfStringIsApplicableOnListOfT()
{
Assert.IsTrue(IsApplicable(ListOf(msc.SystemTypes.String),
ListOf(CreateT())));
}
[Test]
public void ListOfStringIsApplicableOnIEnumerableOfT()
{
Assert.IsTrue(IsApplicable(ListOf(msc.SystemTypes.String),
EnumerableOf(CreateT())));
}
[Test]
public void ArrayOfStringIsApplicableOnIListOfT()
{
Assert.IsTrue(IsApplicable(new ArrayReturnType(msc, msc.SystemTypes.String, 1),
IListOf(CreateT())));
Assert.IsFalse(MemberLookupHelper.ConversionExists(new ArrayReturnType(msc, msc.SystemTypes.String, 1),
IListOf(CreateT())));
}
[Test]
public void ArrayOfStringIsApplicableOnArrayOfT()
{
Assert.IsTrue(IsApplicable(new ArrayReturnType(msc, msc.SystemTypes.String, 1),
new ArrayReturnType(msc, CreateT(), 1)));
Assert.IsFalse(MemberLookupHelper.ConversionExists(new ArrayReturnType(msc, msc.SystemTypes.String, 1),
new ArrayReturnType(msc, CreateT(), 1)));
}
[Test]
public void ConversionExistsFromAnonymousDelegateToSystemPredicate()
{
Assert.IsTrue(IsApplicable(
new AnonymousMethodReturnType(new DefaultCompilationUnit(msc)) { MethodReturnType = msc.SystemTypes.Boolean },
new GetClassReturnType(msc, "System.Predicate", 1)
));
}
[Test]
public void NoConversionExistsFromParameterlessAnonymousDelegateToSystemPredicate()
{
AnonymousMethodReturnType amrt = new AnonymousMethodReturnType(new DefaultCompilationUnit(msc));
amrt.MethodParameters = new List<IParameter>();
Assert.IsFalse(MemberLookupHelper.ConversionExists(
amrt,
new GetClassReturnType(msc, "System.Predicate", 1)
));
}
[Test]
public void ConversionExistsFromAnonymousDelegateWithParameterToSystemPredicate()
{
AnonymousMethodReturnType amrt = new AnonymousMethodReturnType(new DefaultCompilationUnit(msc));
amrt.MethodReturnType = msc.SystemTypes.Boolean;
amrt.MethodParameters = new List<IParameter>();
amrt.MethodParameters.Add(new DefaultParameter("test", msc.SystemTypes.String, DomRegion.Empty));
Assert.IsTrue(MemberLookupHelper.ConversionExists(
amrt,
new ConstructedReturnType(new GetClassReturnType(msc, "System.Predicate", 1),
new IReturnType[] { msc.SystemTypes.String })
));
}
[Test]
public void ConversionDoesNotExistFromAnonymousDelegateWithParameterToSystemPredicateWhenParameterTypeIsIncompatible()
{
AnonymousMethodReturnType amrt = new AnonymousMethodReturnType(new DefaultCompilationUnit(msc));
amrt.MethodReturnType = msc.SystemTypes.Boolean;
amrt.MethodParameters = new List<IParameter>();
amrt.MethodParameters.Add(new DefaultParameter("test", msc.SystemTypes.String, DomRegion.Empty));
Assert.IsFalse(MemberLookupHelper.ConversionExists(
amrt,
new ConstructedReturnType(new GetClassReturnType(msc, "System.Predicate", 1),
new IReturnType[] { msc.SystemTypes.Int32 })
));
}
[Test]
public void GetOverridableMethodsProperties()
{
// get a class deriving from Form
IClass form = swf.GetClass("System.Windows.Forms.PrintPreviewDialog", 0);
IMethod[] methods = OverrideCompletionItemProvider.GetOverridableMethods(form);
IProperty[] properties = OverrideCompletionItemProvider.GetOverridableProperties(form);
Assert.AreEqual(1, properties.Where(m=>m.Name=="AutoScroll").Count());
Assert.AreEqual(1, properties.Where(m=>m.Name=="CanRaiseEvents").Count());
Assert.AreEqual(1, methods.Where(m=>m.Name=="AdjustFormScrollbars").Count());
}
[Test]
public void LocalVariableAndFieldAreNotSimilarMembers()
{
IField field = new DefaultField(dummyClass.DefaultReturnType, "Test", ModifierEnum.None, DomRegion.Empty, dummyClass);
IField local = new DefaultField.LocalVariableField(dummyClass.DefaultReturnType, "Test", DomRegion.Empty, dummyClass);
Assert.IsFalse(MemberLookupHelper.IsSimilarMember(local, field));
}
}
}

2900
src/Main/Base/Test/NRefactoryResolverTests.cs

File diff suppressed because it is too large Load Diff

18
src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs

@ -6,7 +6,6 @@ using System.CodeDom.Compiler; @@ -6,7 +6,6 @@ using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Tests.WebReferences;
@ -42,11 +41,6 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -42,11 +41,6 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
fakeProject.Stub(p => p.Directory).Return(directory);
}
void SetProjectCodeDomProvider(LanguageProperties languageProperties)
{
fakeProject.Stub(p => p.LanguageProperties).Return(languageProperties);
}
ProjectItem GetFirstServiceReferenceFileInMSBuildProject(ServiceReferenceFileName fileName)
{
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName.Path);
@ -97,18 +91,6 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -97,18 +91,6 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual(expectedFolder, folder);
}
[Test]
public void CodeDomProvider_UnderlyingProjectUsesCSharpCodeDomProvider_ProjectUsesCSharpCodeDomProvider()
{
CreateProject();
SetProjectCodeDomProvider(LanguageProperties.CSharp);
ICodeDomProvider codeDomProvider = project.CodeDomProvider;
string fileExtension = codeDomProvider.FileExtension;
Assert.AreEqual("cs", fileExtension);
}
[Test]
public void GetServiceReferenceProxyFileName_ProjectHasNoServiceReferences_ReturnsFileNameInServiceReferencesFolderWithSubFolderNamedAfterServiceReference()
{

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

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Internal.Templates;
using System;
using System.Collections.Generic;
@ -43,8 +44,9 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences @@ -43,8 +44,9 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
get { return readOnly; }
}
public override ICSharpCode.SharpDevelop.Dom.LanguageProperties LanguageProperties {
get { return ICSharpCode.SharpDevelop.Dom.LanguageProperties.CSharp; }
protected override IProjectContent CreateProjectContent()
{
throw new NotImplementedException();
}
protected override ProjectBehavior CreateDefaultBehavior()

Loading…
Cancel
Save