public void Should_find_usages_in_same_file() { const string editorText = @" public class BaseClass {} public class DerivedClassA : BaseClass {} public class DerivedClassB : BaseClass {} public class DerivedClassC : BaseClass {} "; var fileName = "test.cs"; var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText, fileName: fileName); solution.Projects.Add(project); var handler = new GotoImplementationHandler (solution, new BufferParser(solution)); var request = new GotoImplementationRequest { Buffer = editorText , Line = 2 , Column = 14 // At word 'BaseClass' , FileName = fileName}; var gotoImplementationResponse = handler.FindDerivedMembersAsQuickFixes(request); var quickFixes = gotoImplementationResponse.QuickFixes.ToArray(); Assert.AreEqual(3, quickFixes.Length); quickFixes[0].Text.Trim().ShouldEqual("public class DerivedClassA : BaseClass {}"); quickFixes[1].Text.Trim().ShouldEqual("public class DerivedClassB : BaseClass {}"); quickFixes[2].Text.Trim().ShouldEqual("public class DerivedClassC : BaseClass {}"); }
public void ShouldRemoveItemGroupWhenRemovingLastFile() { XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.AddFile("some content", @"c:\test\code\test.cs"); var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; project.XmlRepresentation = XDocument.Parse(xml); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.AsXml().Descendants(ns + "ItemGroup").Count().ShouldEqual(0); }
public void Should_find_usages_of_class() { const string editorText = @"public class myclass { public void method() { } public void method_calling_method() { method(); } } "; var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add(project); var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency<ISolution>(solution)); var browser = new Browser(bootstrapper); var result = browser.Post("/findusages", with => { with.HttpRequest(); with.FormValue("FileName", "myfile"); with.FormValue("Line", "3"); with.FormValue("Column", "21"); with.FormValue("Buffer", editorText); }); var usages = result.Body.DeserializeJson<FindUsagesResponse>().Usages.ToArray(); usages.Count().ShouldEqual(2); usages[0].Text.Trim().ShouldEqual("public void method() { }"); usages[1].Text.Trim().ShouldEqual("method();"); }
public void ShouldRemoveFileFromProjectXml() { var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.AddFile("some content", @"c:\test\code\test.cs"); var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Hello.cs""/> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; project.XmlRepresentation = XDocument.Parse(xml); var expectedXml = XDocument.Parse(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Hello.cs""/> </ItemGroup> </Project>"); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public IEnumerable<CompletionData> GetCompletions(string editorText, bool includeImportableTypes) { int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal); if(cursorOffset == -1) throw new ArgumentException("Editor text should contain a $"); TextLocation cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset); string partialWord = GetPartialWord(editorText); editorText = editorText.Replace("$", ""); var project = new FakeProject(); project.AddFile(editorText); _solution.Projects.Add(project); var provider = new AutoCompleteHandler(_solution, new BufferParser(_solution), new Logger(Verbosity.Quiet)); var request = new AutoCompleteRequest { FileName = "myfile", WordToComplete = partialWord, Buffer = editorText, Line = cursorPosition.Line, Column = cursorPosition.Column, WantDocumentationForEveryCompletionResult = false, WantImportableTypes = includeImportableTypes, WantMethodHeader = true, WantReturnType = true, WantSnippet = true }; return provider.CreateProvider(request); }
public void Should_find_usages_of_class() { const string editorText = @"public class myclass { public void method() { } public void method_calling_method() { method(); } } "; var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add(project); var handler = new FindUsagesHandler (new OmniSharp.Parser.BufferParser (solution), solution, new ProjectFinder(solution)); var usages = handler.FindUsages (new FindUsagesRequest { FileName = "myfile", Line = 3, Column = 21, Buffer = editorText }).QuickFixes.ToArray(); usages.Length.ShouldEqual(2); usages[0].Text.Trim().ShouldEqual("public void method() { }"); usages[1].Text.Trim().ShouldEqual("method();"); }
public IEnumerable<ICompletionData> GetCompletions(string editorText) { int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal); if(cursorOffset == -1) throw new ArgumentException("Editor text should contain a $"); TextLocation cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset); string partialWord = GetPartialWord(editorText); editorText = editorText.Replace("$", ""); var project = new FakeProject(); project.AddFile(editorText); _solution.Projects.Add(project); var provider = new AutoCompleteHandler(new BufferParser(_solution), new Logger()); var request = new AutoCompleteRequest { FileName = "myfile", WordToComplete = partialWord, Buffer = editorText, Line = cursorPosition.Line, Column = cursorPosition.Column, }; return provider.CreateProvider(request); }
public void CanAddProjectReferenceWhenProjectReferencesExist() { var projectOne = CreateDefaultProject(); var projectTwoId = Guid.NewGuid(); var projectTwo = new FakeProject("faketwo", @"c:\test\two\fake2.csproj", projectTwoId); projectTwo.Title = "Project Two"; projectTwo.AddFile("some content", @"c:\test\two\test.cs"); projectTwo.XmlRepresentation = XDocument.Parse(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> <ItemGroup> <ProjectReference Include=""..\existing\project.csproj""> <Project>{1-2-3-4}</Project> <Name>Existing Project</Name> </ProjectReference> </ItemGroup> </Project>"); var expectedXml = XDocument.Parse(string.Format(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> <ItemGroup> <ProjectReference Include=""..\existing\project.csproj""> <Project>{{1-2-3-4}}</Project> <Name>Existing Project</Name> </ProjectReference> <ProjectReference Include=""..\one\fake1.csproj""> <Project>{0}</Project> <Name>Project One</Name> </ProjectReference> </ItemGroup> </Project>", string.Concat("{", projectOne.ProjectId.ToString().ToUpperInvariant(), "}"))); Solution.Projects.Add(projectOne); Solution.Projects.Add(projectTwo); var request = new AddReferenceRequest { Reference = @"fake1", FileName = @"c:\test\two\test.cs" }; var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddProjectReferenceProcessor(Solution) }, new NativeFileSystem())); handler.AddReference(request); projectTwo.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
protected IProject CreateDefaultProject() { var project = new FakeProject("fakeone", @"c:\test\one\fake1.csproj", Guid.NewGuid()) { Title = "Project One", XmlRepresentation = XDocument.Parse(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> </Project>") }; project.AddFile("some content", @"c:\test\one\test.cs"); return project; }
protected IProject CreateDefaultProjectWithFileReference() { var project = new FakeProject("fakeone", @"c:\test\one\fake1.csproj", Guid.NewGuid()) { Title = "Project One", XmlRepresentation = XDocument.Parse(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> <ItemGroup> <Reference Include=""Hello.World""> <HintPath>..\packages\HelloWorld\lib\net40\Hello.World.dll</HintPath> </Reference> </ItemGroup> </Project>") }; project.AddFile("some content", @"c:\test\one\test.cs"); return project; }
public void ShouldAlwaysUseWindowsFileSeparatorWhenAddingToProject() { var project = new FakeProject(fileName: @"/test/code/fake.csproj"); project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""folder\Test.cs""/></ItemGroup></Project>"); project.AddFile("some content", @"/test/code/folder/Test.cs"); var solution = new FakeSolution(@"/test/fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/code/folder/Test.cs" }; var handler = new AddToProjectHandler(solution); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public static GetContextResponse GetContextInformation(this string editorText) { var cursorPosition = TestHelpers.GetLineAndColumnFromDollar(editorText); editorText = editorText.Replace("$", ""); var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add(project); var handler = new GetTestContextHandler(solution, new BufferParser(solution)); var request = new TestCommandRequest { Buffer = editorText, FileName = "myfile", Line = cursorPosition.Line, Column = cursorPosition.Column, }; return handler.GetContextResponse(request); }
public static string LookupType(this string editorText) { int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal); var cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset); editorText = editorText.Replace("$", ""); var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add(project); var handler = new TypeLookupHandler(new BufferParser(solution)); var request = new TypeLookupRequest() { Buffer = editorText, FileName = "myfile", Line = cursorPosition.Line, Column = cursorPosition.Column, }; return handler.GetTypeLookupResponse(request).Type; }
public void Should_complete_string() { string editorText = @" public class myclass { public void method() { string s; s.$; } } "; int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal); Tuple<int, int> cursorPosition = GetLineAndColumnFromIndex(editorText, cursorOffset); string partialWord = GetPartialWord(editorText); editorText = editorText.Replace("$", ""); var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add("dummyproject", project); var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency<ISolution>(solution)); var browser = new Browser(bootstrapper); var result = browser.Post("/autocomplete", with => { with.HttpRequest(); with.FormValue("FileName", "myfile"); with.FormValue("WordToComplete", partialWord); with.FormValue("Buffer", editorText); with.FormValue("Line", cursorPosition.Item1.ToString()); with.FormValue("Column", cursorPosition.Item2.ToString()); }); var res = result.Body.DeserializeJson<AutoCompleteResponse[]>().Select(c => c.DisplayText); res.ShouldContain("Trim()"); }
public void ShouldAddNewFileToProject() { var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""files\Test.cs""/></ItemGroup></Project>"); project.AddFile("some content", @"c:\test\code\files\Test.cs"); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"c:\test\code\files\Test.cs" }; var handler = new AddToProjectHandler(solution); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void Should_lookup_Test() { string editorText = @" public class Test { public void Main() { Test test; te$st = new Test(); } } "; int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal); Tuple<int, int> cursorPosition = GetLineAndColumnFromIndex(editorText, cursorOffset); editorText = editorText.Replace("$", ""); var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add("dummyproject", project); var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency<ISolution>(solution)); var browser = new Browser(bootstrapper); var result = browser.Post("/typelookup", with => { with.HttpRequest(); with.FormValue("FileName", "myfile"); with.FormValue("Buffer", editorText); with.FormValue("Line", cursorPosition.Item1.ToString()); with.FormValue("Column", cursorPosition.Item2.ToString()); }); var res = result.Body.DeserializeJson<TypeLookupResponse>(); res.Type.ShouldEqual("Test test"); }
public static string LookupType(this string editorText) { int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal); var cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset); editorText = editorText.Replace("$", ""); var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText); solution.Projects.Add(project); var handler = new TypeLookupHandler(solution, new BufferParser(solution)); var request = new TypeLookupRequest() { Buffer = editorText, FileName = "myfile", Line = cursorPosition.Line, Column = cursorPosition.Column, }; return(handler.GetTypeLookupResponse(request).Type); }
private static Error[] GetErrors(string editorText) { var fileName = "test.cs"; var solution = new FakeSolution(); var project = new FakeProject(); project.AddFile(editorText, fileName); solution.Projects.Add(project); var handler = new SemanticErrorsHandler(solution); var request = new Request { Buffer = editorText, FileName = fileName, }; var semanticErrorsResponse = handler.FindSemanticErrors(request); return semanticErrorsResponse.Errors.ToArray(); }
public void ShouldNotAddCircularReference() { var projectOne = CreateDefaultProject(); var projectTwoId = Guid.NewGuid(); var projectTwo = new FakeProject("faketwo", @"c:\test\two\fake2.csproj", projectTwoId); projectTwo.Title = "Project Two"; projectTwo.AddFile("some content", @"c:\test\two\test.cs"); projectTwo.AddReference(new ProjectReference(Solution, "Project One", projectOne.ProjectId)); var xml = string.Format(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> <ItemGroup> <ProjectReference Include=""..\one\fake1.csproj""> <Project>{0}</Project> <Name>Project One</Name> </ProjectReference> </ItemGroup> </Project>", string.Concat("{", projectOne.ProjectId.ToString().ToUpperInvariant(), "}")); var expectedXml = XDocument.Parse(xml); projectTwo.XmlRepresentation = XDocument.Parse(xml); Solution.Projects.Add(projectOne); Solution.Projects.Add(projectTwo); var request = new AddReferenceRequest { Reference = @"fake2", FileName = @"c:\test\one\test.cs" }; var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddProjectReferenceProcessor(Solution) }, new NativeFileSystem())); var response = handler.AddReference(request); projectTwo.AsXml().ToString().ShouldEqual(expectedXml.ToString()); response.Message.ShouldEqual("Reference will create circular dependency"); }
public static void RegisterEditor(SharpDevelopTextEditor editor) { _editors.Add(editor); FakeProject.AddFile(editor.FileName); }