コード例 #1
0
ファイル: GoToImplementation.cs プロジェクト: dykim07/vim-ide
        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 {}");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: IntegrationTest.cs プロジェクト: dykim07/vim-ide
        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();");
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: IntegrationTest.cs プロジェクト: sphynx79/dotfiles
        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();");
        }
コード例 #7
0
ファイル: CompletionsSpecBase.cs プロジェクト: jtprog/subvim
        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);
        }
コード例 #8
0
        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());
        }
コード例 #9
0
 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;
 }
コード例 #10
0
 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;
 }
コード例 #11
0
ファイル: AddToProjectTests.cs プロジェクト: jtprog/subvim
        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());
        }
コード例 #12
0
        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);
        }
コード例 #13
0
ファイル: StringExtensions.cs プロジェクト: jtprog/subvim
        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;
        }
コード例 #14
0
ファイル: IntegrationTest.cs プロジェクト: CSRedRat/Omnisharp
        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()");
        }
コード例 #15
0
        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());
        }
コード例 #16
0
ファイル: IntegrationTest.cs プロジェクト: CSRedRat/Omnisharp
        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");
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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();
        }
コード例 #19
0
        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");
        }
コード例 #20
0
 public static void RegisterEditor(SharpDevelopTextEditor editor)
 {
     _editors.Add(editor);
     FakeProject.AddFile(editor.FileName);
 }