public async Task ReturnsSource_ForGenericType()
        {
            var source1 = @"using System;

class Foo {
}";
            var source2 = @"class Bar {
    private Foo foo;
}";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string> {
                { "foo.cs", source1 }, { "bar.cs", source2}
            });
            var controller = new OmnisharpController(workspace, null);
            var response = await controller.Metadata(new MetadataRequest
            {
                AssemblyName = "mscorlib",
                TypeName = "System.Collections.Generic.List`1",
                Timeout = 60000
            });

            Assert.NotNull(response.Source);

            response = await controller.Metadata(new MetadataRequest
            {
                AssemblyName = "mscorlib",
                TypeName = "System.Collections.Generic.Dictionary`2"
            });

            Assert.NotNull(response.Source);
        }
Beispiel #2
0
        public async Task ReturnsSource_ForGenericType()
        {
            var source1 = @"using System;

class Foo {
}";
            var source2 = @"class Bar {
    private Foo foo;
}";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string> {
                { "foo.cs", source1 }, { "bar.cs", source2 }
            });
            var controller = new OmnisharpController(workspace, null);
            var response   = await controller.Metadata(new MetadataRequest
            {
                AssemblyName = "mscorlib",
                TypeName     = "System.Collections.Generic.List`1",
                Timeout      = 60000
            });

            Assert.NotNull(response.Source);

            response = await controller.Metadata(new MetadataRequest
            {
                AssemblyName = "mscorlib",
                TypeName     = "System.Collections.Generic.Dictionary`2"
            });

            Assert.NotNull(response.Source);
        }
        public async Task HighlightStringInterpolation()
        {
            var code = @"
                class C1
                {
                    string s = $""{5}"";
                }
            ";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string>
            {
                { "a.cs", code }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var regions    = await controller.Highlight(new HighlightRequest()
            {
                FileName = "a.cs"
            });

            AssertSyntax(regions.Highlights, code, 0,
                         Token("class", "keyword"),
                         Token("C1", "class name"),
                         Token("{", "punctuation"),
                         Token("string", "keyword"),
                         Token("s", "identifier"),
                         Token("=", "operator"),
                         Token("$\"", "string"),
                         Token("{", "punctuation"),
                         Token("5", "number"),
                         Token("}", "punctuation"),
                         Token("\"", "string"),
                         Token(";", "punctuation"),
                         Token("}", "punctuation"));
        }
Beispiel #4
0
        public async Task ReturnsEmptyResultWhenDefinitionIsNotFound()
        {
            var source1 = @"using System;

class Foo {
}";
            var source2 = @"class Bar {
    private Baz foo;
}";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string> {
                { "foo.cs", source1 }, { "bar.cs", source2 }
            });
            var controller         = new OmnisharpController(workspace, null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName = "bar.cs",
                Line     = 2,
                Column   = 14,
                Timeout  = 60000
            });

            Assert.Null(definitionResponse.FileName);
            Assert.Equal(0, definitionResponse.Line);
            Assert.Equal(0, definitionResponse.Column);
        }
        public async Task HighlightEntireFile()
        {
            var code = @"
                namespace N1
                {
                    class C1 { int n = true; }
                }
            ";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string>
            {
                { "a.cs", code }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var regions = await controller.Highlight(new HighlightRequest() { FileName = "a.cs" });

            AssertSyntax(regions.Highlights, code, 0,
                Token("namespace", "keyword"),
                Token("N1", "identifier"),
                Token("{", "punctuation"),
                Token("class", "keyword"),
                Token("C1", "class name"),
                Token("{", "punctuation"),
                Token("int", "keyword"),
                Token("n", "identifier"),
                Token("=", "operator"),
                Token("true", "keyword"),
                Token(";", "punctuation"),
                Token("}", "punctuation"),
                Token("}", "punctuation"));
        }
        public async Task ReturnsEmptyResultWhenDefinitionIsNotFound()
        {
            var source1 = @"using System;

class Foo {
}";
            var source2 = @"class Bar {
    private Baz foo;
}";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string> {
                { "foo.cs", source1 }, { "bar.cs", source2}
            });
            var controller = new OmnisharpController(workspace, null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName = "bar.cs",
                Line = 2,
                Column = 14,
                Timeout = 60000
            });

            Assert.Null(definitionResponse.FileName);
            Assert.Equal(0, definitionResponse.Line);
            Assert.Equal(0, definitionResponse.Column);
        }
        private async Task<RenameResponse> SendRequest(OmnisharpWorkspace workspace,
                                                       string renameTo,
                                                       string filename,
                                                       string fileContent,
                                                       bool wantsTextChanges = false,
                                                       bool applyTextChanges = true)
        {
            var lineColumn = TestHelpers.GetLineAndColumnFromDollar(fileContent);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request = new RenameRequest
            {
                Line = lineColumn.Line,
                Column = lineColumn.Column,
                RenameTo = renameTo,
                FileName = filename,
                Buffer = fileContent.Replace("$", ""),
                WantsTextChanges = wantsTextChanges,
                ApplyTextChanges = applyTextChanges
            };

            var bufferFilter = new UpdateBufferFilter(workspace);
            bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));

            return await controller.Rename(request);
        }
        private static async Task <IEnumerable <LinePositionSpanTextChange> > FormattingChangesForRange(FormatRangeRequest req)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(req.Buffer, req.FileName);
            var controller = new OmnisharpController(workspace, null);

            return((await controller.FormatRange(req)).Changes);
        }
        private async Task <QuickFixResponse> FindSymbols(string source)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());

            return(await controller.FindSymbols());
        }
        public async Task HighlightEntireFile()
        {
            var code = @"
                namespace N1
                {
                    class C1 { int n = true; }
                }
            ";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string>
            {
                { "a.cs", code }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var regions    = await controller.Highlight(new HighlightRequest()
            {
                FileName = "a.cs"
            });

            AssertSyntax(regions.Highlights, code, 0,
                         Token("namespace", "keyword"),
                         Token("N1", "identifier"),
                         Token("{", "punctuation"),
                         Token("class", "keyword"),
                         Token("C1", "class name"),
                         Token("{", "punctuation"),
                         Token("int", "keyword"),
                         Token("n", "identifier"),
                         Token("=", "operator"),
                         Token("true", "keyword"),
                         Token(";", "punctuation"),
                         Token("}", "punctuation"),
                         Token("}", "punctuation"));
        }
        private async Task <RenameResponse> SendRequest(OmnisharpWorkspace workspace,
                                                        string renameTo,
                                                        string filename,
                                                        string fileContent,
                                                        bool wantsTextChanges = false,
                                                        bool applyTextChanges = true)
        {
            var lineColumn = TestHelpers.GetLineAndColumnFromDollar(fileContent);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request    = new RenameRequest
            {
                Line             = lineColumn.Line,
                Column           = lineColumn.Column,
                RenameTo         = renameTo,
                FileName         = filename,
                Buffer           = fileContent.Replace("$", ""),
                WantsTextChanges = wantsTextChanges,
                ApplyTextChanges = applyTextChanges
            };

            var bufferFilter = new UpdateBufferFilter(workspace);

            bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));

            return(await controller.Rename(request));
        }
        public void ReturnsEmptyResponseForEmptyWorskpace()
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string>());
            var controller = new OmnisharpController(workspace, null);
            var response   = controller.GoToFile(new Request());

            Assert.Equal(0, response.QuickFixes.Count());
        }
Beispiel #13
0
        private async Task <QuickFixResponse> FindUsages(string source)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, null);
            var request    = CreateRequest(source);

            return(await controller.FindUsages(request));
        }
        public void ReturnsEmptyResponseForEmptyWorskpace()
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string>());
            var controller = new OmnisharpController(workspace, null);
            var response = controller.GoToFile(new Request());

            Assert.Equal(0, response.QuickFixes.Count());
        }
 private async Task<QuickFixResponse> FindRegions(string source)
 {
     var workspace = TestHelpers.CreateSimpleWorkspace(source);
     var controller = new OmnisharpController(workspace, null);
     var request = CreateRequest(source);
     var bufferFilter = new UpdateBufferFilter(workspace);
     bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));
     return await controller.GoToRegion(request);
 }
        private async Task <IEnumerable <ISymbol> > FindImplementations(string source)
        {
            var workspace       = TestHelpers.CreateSimpleWorkspace(source);
            var controller      = new OmnisharpController(workspace, null);
            var request         = CreateRequest(source);
            var implementations = await controller.FindImplementations(request);

            return(await TestHelpers.SymbolsFromQuickFixes(workspace, implementations.QuickFixes));
        }
        private async Task <QuickFixResponse> FindRegions(string source)
        {
            var workspace    = TestHelpers.CreateSimpleWorkspace(source);
            var controller   = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request      = CreateRequest(source);
            var bufferFilter = new UpdateBufferFilter(workspace);

            bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));
            return(await controller.GoToRegion(request));
        }
        private async Task <QuickFixResponse> FindSymbolsWithFilter(string source, string filter)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request    = new FindSymbolsRequest {
                Filter = filter
            };

            return(await controller.FindSymbols(request));
        }
 private async Task<IEnumerable<ISymbol>> FindImplementations(string source)
 {
     var workspace = TestHelpers.CreateSimpleWorkspace(source);
     var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
     var request = CreateRequest(source);
     var bufferFilter = new UpdateBufferFilter(workspace);
     bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));
     var implementations = await controller.FindImplementations(request);
     return await TestHelpers.SymbolsFromQuickFixes(workspace, implementations.QuickFixes);
 }
 public async Task OmitsNamespaceForNonRegularCSharpSyntax()
 {
     var source1 = @"class Foo {}";
     
     var workspace = TestHelpers.CreateCsxWorkspace(source1);
     
     var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
     var response = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.csx", Line = 1, Column = 8 });
     
     Assert.Equal("Foo", response.Type);   
 } 
Beispiel #21
0
        public async Task OmitsNamespaceForNonRegularCSharpSyntax()
        {
            var source1 = @"class Foo {}";

            var workspace = TestHelpers.CreateCsxWorkspace(source1);

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var response   = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.csx", Line = 1, Column = 8 });

            Assert.Equal("Foo", response.Type);
        }
Beispiel #22
0
        private async Task <IEnumerable <string> > FindCompletionsAsync(string source)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, null);
            var request    = CreateRequest(source);
            var response   = await controller.AutoComplete(request);

            var completions = response as IEnumerable <AutoCompleteResponse>;

            return(completions.Select(completion => BuildCompletion(completion)));
        }
Beispiel #23
0
        private async Task <IEnumerable <ISymbol> > FindImplementations(string source)
        {
            var workspace    = TestHelpers.CreateSimpleWorkspace(source);
            var controller   = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request      = CreateRequest(source);
            var bufferFilter = new UpdateBufferFilter(workspace);

            bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));
            var implementations = await controller.FindImplementations(request);

            return(await TestHelpers.SymbolsFromQuickFixes(workspace, implementations.QuickFixes));
        }
        private async Task <QuickFixResponse> FindUsages(Dictionary <string, string> sources, string currentFile, bool onlyThisFile, bool excludeDefinition = false)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(sources);
            var controller = new OmnisharpController(workspace, null);
            var request    = CreateRequest(sources[currentFile], currentFile, excludeDefinition);

            request.OnlyThisFile = onlyThisFile;
            var bufferFilter = new UpdateBufferFilter(workspace);

            bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));
            return(await controller.FindUsages(request));
        }
        public async Task CodeCheckSpecifiedFileOnly()
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string>
            {
                { "a.cs", "class C { int n = true; }" }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var quickFixes = await controller.CodeCheck(new Request() { FileName = "a.cs" });

            Assert.Equal(1, quickFixes.QuickFixes.Count());
            Assert.Equal("a.cs", quickFixes.QuickFixes.First().FileName);
        }
        public async Task CheckAllFiles()
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string>
            {
                { "a.cs", "class C1 { int n = true; }" },
                { "b.cs", "class C2 { int n = true; }" },
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var quickFixes = await controller.CodeCheck(new Request());

            Assert.Equal(2, quickFixes.QuickFixes.Count());
        }
        public async Task CheckAllFiles()
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string>
            {
                { "a.cs", "class C1 { int n = true; }" },
                { "b.cs", "class C2 { int n = true; }" },
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var quickFixes = await controller.CodeCheck(new Request());

            Assert.Equal(2, quickFixes.QuickFixes.Count());
        }
 public async Task IncludesNamespaceForRegularCSharpSyntax()
 {
     var source1 = @"namespace Bar {
     class Foo {}
     }";
     
     var workspace = TestHelpers.CreateSimpleWorkspace(source1);
     
     var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
     var response = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.cs", Line = 2, Column = 20 });
     
     Assert.Equal("Bar.Foo", response.Type);   
 } 
Beispiel #29
0
        public async Task IncludesNamespaceForRegularCSharpSyntax()
        {
            var source1 = @"namespace Bar {
            class Foo {}
            }";

            var workspace = TestHelpers.CreateSimpleWorkspace(source1);

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var response   = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.cs", Line = 2, Column = 20 });

            Assert.Equal("Bar.Foo", response.Type);
        }
        public void ReturnsAListOfAllWorkspaceFiles()
        {
            var source1 = @"class Foo {}";
            var source2 = @"class Bar {}";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string> {
                { "foo.cs", source1 }, { "bar.cs", source2 }
            });
            var controller = new OmnisharpController(workspace, null);
            var response   = controller.GoToFile(new Request());

            Assert.Equal(2, response.QuickFixes.Count());
            Assert.Equal("foo.cs", response.QuickFixes.ElementAt(0).FileName);
            Assert.Equal("bar.cs", response.QuickFixes.ElementAt(1).FileName);
        }
        public void ReturnsAListOfAllWorkspaceFiles()
        {
            var source1 = @"class Foo {}";
            var source2 = @"class Bar {}";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string> {
                { "foo.cs", source1 }, { "bar.cs", source2}
            });
            var controller = new OmnisharpController(workspace, null);
            var response = controller.GoToFile(new Request());

            Assert.Equal(2, response.QuickFixes.Count());
            Assert.Equal("foo.cs", response.QuickFixes.ElementAt(0).FileName);
            Assert.Equal("bar.cs", response.QuickFixes.ElementAt(1).FileName);
        }
        private async Task <IEnumerable <AutoCompleteResponse> > FindCompletionsAsync(string source, AutoCompleteRequest request = null)
        {
            var workspace  = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());

            if (request == null)
            {
                request = CreateRequest(source);
            }

            var response = await controller.AutoComplete(request);

            var completions = response as IEnumerable <AutoCompleteResponse>;

            return(completions);
        }
Beispiel #33
0
        private void CreateSimpleWorkspace(out OmnisharpWorkspace workspace, out OmnisharpController controller, out DocumentInfo document, string filename, string contents)
        {
            workspace  = new OmnisharpWorkspace();
            controller = new OmnisharpController(workspace, null);

            var projectInfo = ProjectInfo.Create(ProjectId.CreateNewId(), VersionStamp.Create(),
                                                 "ProjectNameVal", "AssemblyNameVal", LanguageNames.CSharp);

            document = DocumentInfo.Create(DocumentId.CreateNewId(projectInfo.Id), filename,
                                           null, SourceCodeKind.Regular,
                                           TextLoader.From(TextAndVersion.Create(SourceText.From(contents), VersionStamp.Create())),
                                           filename);

            workspace.AddProject(projectInfo);
            workspace.AddDocument(document);
        }
        public async Task OmitsNamespaceForTypesInGlobalNamespace()
        {
            var source = @"namespace Bar {
            class Foo {}
            }
            class Baz {}";

            var workspace = TestHelpers.CreateSimpleWorkspace(source);

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var responseInNormalNamespace = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.cs", Line = 2, Column = 20 });
            var responseInGlobalNamespace = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.cs", Line = 4, Column = 20 });

            Assert.Equal("Bar.Foo", responseInNormalNamespace.Type);
            Assert.Equal("Baz", responseInGlobalNamespace.Type);
        }
        private void CreateSimpleWorkspace(out OmnisharpWorkspace workspace, out OmnisharpController controller, out DocumentInfo document, string filename, string contents)
        {
            workspace = new OmnisharpWorkspace();
            controller = new OmnisharpController(workspace, null);

            var projectInfo = ProjectInfo.Create(ProjectId.CreateNewId(), VersionStamp.Create(),
                "ProjectNameVal", "AssemblyNameVal", LanguageNames.CSharp);

            document = DocumentInfo.Create(DocumentId.CreateNewId(projectInfo.Id), filename,
                null, SourceCodeKind.Regular,
                TextLoader.From(TextAndVersion.Create(SourceText.From(contents), VersionStamp.Create())),
                filename);

            workspace.AddProject(projectInfo);
            workspace.AddDocument(document);
        }
        public async Task CodeCheckSpecifiedFileOnly()
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string>
            {
                { "a.cs", "class C { int n = true; }" }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var quickFixes = await controller.CodeCheck(new Request()
            {
                FileName = "a.cs"
            });

            Assert.Equal(1, quickFixes.QuickFixes.Count());
            Assert.Equal("a.cs", quickFixes.QuickFixes.First().FileName);
        }
Beispiel #37
0
        public async Task OmitsNamespaceForTypesInGlobalNamespace()
        {
            var source = @"namespace Bar {
            class Foo {}
            }
            class Baz {}";

            var workspace = TestHelpers.CreateSimpleWorkspace(source);

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var responseInNormalNamespace = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.cs", Line = 2, Column = 20 });

            var responseInGlobalNamespace = await controller.TypeLookup(new TypeLookupRequest { FileName = "dummy.cs", Line = 4, Column = 20 });

            Assert.Equal("Bar.Foo", responseInNormalNamespace.Type);
            Assert.Equal("Baz", responseInGlobalNamespace.Type);
        }
Beispiel #38
0
        public async Task ReturnsPositionInMetadata_WhenSymbolIsExtensionMethod()
        {
            var controller         = new OmnisharpController(CreateTestWorkspace(), null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName     = "bar.cs",
                Line         = 11,
                Column       = 17,
                Timeout      = 60000,
                WantMetadata = true
            });

            Assert.Null(definitionResponse.FileName);
            Assert.NotNull(definitionResponse.MetadataSource);
            Assert.Equal("System.Core", definitionResponse.MetadataSource.AssemblyName);
            Assert.Equal("System.Linq.Enumerable", definitionResponse.MetadataSource.TypeName);
            Assert.NotEqual(0, definitionResponse.Line);
            Assert.NotEqual(0, definitionResponse.Column);
        }
Beispiel #39
0
        public async Task ReturnsFullNameInMetadata_WhenSymbolIsType()
        {
            var controller         = new OmnisharpController(CreateTestWorkspace(), null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName     = "bar.cs",
                Line         = 10,
                Column       = 23,
                Timeout      = 60000,
                WantMetadata = true
            });

            Assert.Null(definitionResponse.FileName);
            Assert.NotNull(definitionResponse.MetadataSource);
            Assert.Equal("mscorlib", definitionResponse.MetadataSource.AssemblyName);
            Assert.Equal("System.String", definitionResponse.MetadataSource.TypeName);
            Assert.NotEqual(0, definitionResponse.Line);
            Assert.NotEqual(0, definitionResponse.Column);
        }
        private async Task <SignatureHelp> GetSignatureHelp(string source)
        {
            var lineColumn = TestHelpers.GetLineAndColumnFromDollar(source);

            source = source.Replace("$", string.Empty);

            var request = new Request()
            {
                FileName = "dummy.cs",
                Line     = lineColumn.Line,
                Column   = lineColumn.Column,
                Buffer   = source
            };

            var workspace  = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, null);

            return(await controller.GetSignatureHelp(request));
        }
Beispiel #41
0
        public async Task ReturnsPositionInMetadata_WhenSymbolIsMethod()
        {
            var controller         = new OmnisharpController(CreateTestWorkspace(), null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName     = "bar.cs",
                Line         = 7,
                Column       = 20,
                Timeout      = 60000,
                WantMetadata = true
            });

            Assert.Null(definitionResponse.FileName);
            Assert.NotNull(definitionResponse.MetadataSource);
            Assert.Equal("mscorlib", definitionResponse.MetadataSource.AssemblyName);
            Assert.Equal("System.Console", definitionResponse.MetadataSource.TypeName);
            // We probably shouldn't hard code metadata locations (they could change randomly)
            Assert.NotEqual(0, definitionResponse.Line);
            Assert.NotEqual(0, definitionResponse.Column);
        }
        private async Task <FixUsingsResponse> RunFixUsings(string fileContents)
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(fileContents, fileName);

            var fakeOptions = new FakeOmniSharpOptions();

            fakeOptions.Options = new OmniSharpOptions();
            fakeOptions.Options.FormattingOptions = new FormattingOptions()
            {
                NewLine = "\n"
            };
            var controller = new OmnisharpController(workspace, fakeOptions);
            var request    = new FixUsingsRequest
            {
                FileName = fileName,
                Buffer   = fileContents
            };

            return(await controller.FixUsings(request));
        }
        public async Task ReturnsPositionInMetadata_WhenSymbolIsMethod()
        {
            var controller = new OmnisharpController(CreateTestWorkspace(), null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName = "bar.cs",
                Line = 7,
                Column = 20,
                Timeout = 60000,
                WantMetadata = true
            });

            Assert.Null(definitionResponse.FileName);
            Assert.NotNull(definitionResponse.MetadataSource);
            Assert.Equal("mscorlib", definitionResponse.MetadataSource.AssemblyName);
            Assert.Equal("System.Console", definitionResponse.MetadataSource.TypeName);
            // We probably shouldn't hard code metadata locations (they could change randomly)
            Assert.NotEqual(0, definitionResponse.Line);
            Assert.NotEqual(0, definitionResponse.Column);
        }
        public async Task HighlightExcludesUnwantedNames()
        {
            var code = @"
                namespace N1
                {
                    class C1 { int n = true; }
                }
            ";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary <string, string>
            {
                { "a.cs", code }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var regions    = await controller.Highlight(new HighlightRequest()
            {
                FileName = "a.cs", ExcludeClassifications = new [] { HighlightClassification.Name }
            });

            Assert.DoesNotContain(regions.Highlights, x => x.Kind.EndsWith(" name"));
        }
        private async Task <NavigateResponse> SendRequest(OmnisharpWorkspace workspace, string fileName, string fileContent, NavigateDirection upOrDown)
        {
            var initialCursorLineColumn   = TestHelpers.GetLineAndColumnFromDollar(TestHelpers.RemovePercentMarker(fileContent));
            var fileContentNoDollarMarker = TestHelpers.RemoveDollarMarker(fileContent);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request    = new Request
            {
                Line     = initialCursorLineColumn.Line,
                Column   = initialCursorLineColumn.Column,
                FileName = fileName,
                Buffer   = fileContentNoDollarMarker
            };

            if (upOrDown == NavigateDirection.UP)
            {
                return(await controller.NavigateUp(request));
            }
            else
            {
                return(await controller.NavigateDown(request));
            }
        }
        public async Task FormatRespectsIndentationSize()
        {
            var source = "namespace Bar\n{\n    class Foo {}\n}";

            var workspace = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions
            {
                Options = new OmniSharpOptions
                {
                    FormattingOptions = new FormattingOptions
                    {
                        NewLine = "\n",
                        IndentationSize = 1
                    }
                }
            });

            var result = await controller.FormatDocument(new Request
            {
                FileName = "dummy.cs"
            });

            Assert.Equal("namespace Bar\n{\n class Foo { }\n}", result.Buffer);
        }
        public async Task ReturnsFullNameInMetadata_WhenSymbolIsType()
        {
            var controller = new OmnisharpController(CreateTestWorkspace(), null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName = "bar.cs",
                Line = 10,
                Column = 23,
                Timeout = 60000,
                WantMetadata = true
            });

            Assert.Null(definitionResponse.FileName);
            Assert.NotNull(definitionResponse.MetadataSource);
            Assert.Equal("mscorlib", definitionResponse.MetadataSource.AssemblyName);
            Assert.Equal("System.String", definitionResponse.MetadataSource.TypeName);
            Assert.NotEqual(0, definitionResponse.Line);
            Assert.NotEqual(0, definitionResponse.Column);
        }
 private async Task<QuickFixResponse> FindSymbolsWithFilter(string source, string filter)
 {
     var workspace = TestHelpers.CreateSimpleWorkspace(source);
     var controller = new OmnisharpController(workspace, null);
     var request = new FindSymbolsRequest { Filter = filter };
     return await controller.FindSymbols(request);
 }
        private async Task<NavigateResponse> SendRequest(OmnisharpWorkspace workspace, string fileName, string fileContent, NavigateDirection upOrDown)
        {
            var initialCursorLineColumn = TestHelpers.GetLineAndColumnFromDollar(TestHelpers.RemovePercentMarker(fileContent));
            var fileContentNoDollarMarker = TestHelpers.RemoveDollarMarker(fileContent);
            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var request = new Request
            {
                Line = initialCursorLineColumn.Line,
                Column = initialCursorLineColumn.Column,
                FileName = fileName,
                Buffer = fileContentNoDollarMarker
            };

            if (upOrDown == NavigateDirection.UP)
            {
                return await controller.NavigateUp(request);
            }
            else
            {
                return await controller.NavigateDown(request);
            }
        }
        public async Task HighlightStringInterpolation()
        {
            var code = @"
                class C1
                {
                    string s = $""{5}"";
                }
            ";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string>
            {
                { "a.cs", code }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());            
            var regions = await controller.Highlight(new HighlightRequest() { FileName = "a.cs" });

            AssertSyntax(regions.Highlights, code, 0,
                Token("class", "keyword"),
                Token("C1", "class name"),
                Token("{", "punctuation"),
                Token("string", "keyword"),
                Token("s", "identifier"),
                Token("=", "operator"),
                Token("$\"", "string"),
                Token("{", "punctuation"),
                Token("5", "number"),
                Token("}", "punctuation"),
                Token("\"", "string"),
                Token(";", "punctuation"),
                Token("}", "punctuation"));
        }
        public async Task ReturnsPositionInMetadata_WhenSymbolIsExtensionMethod()
        {
            var controller = new OmnisharpController(CreateTestWorkspace(), null);
            var definitionResponse = await controller.GotoDefinition(new GotoDefinitionRequest
            {
                FileName = "bar.cs",
                Line = 11,
                Column = 17,
                Timeout = 60000,
                WantMetadata = true
            });

            Assert.Null(definitionResponse.FileName);
            Assert.NotNull(definitionResponse.MetadataSource);
            Assert.Equal("System.Core", definitionResponse.MetadataSource.AssemblyName);
            Assert.Equal("System.Linq.Enumerable", definitionResponse.MetadataSource.TypeName);
            Assert.NotEqual(0, definitionResponse.Line);
            Assert.NotEqual(0, definitionResponse.Column);
        }
        private static async Task<IEnumerable<LinePositionSpanTextChange>> FormattingChangesForRange(FormatRangeRequest req)
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(req.Buffer, req.FileName);
            var controller = new OmnisharpController(workspace, null);

            return (await controller.FormatRange(req)).Changes;
        }
 private async Task<QuickFixResponse> FindUsages(Dictionary<string, string> sources, string currentFile, bool onlyThisFile, bool excludeDefinition = false)
 {
     var workspace = TestHelpers.CreateSimpleWorkspace(sources);
     var controller = new OmnisharpController(workspace, null);
     var request = CreateRequest(sources[currentFile], currentFile, excludeDefinition);
     request.OnlyThisFile = onlyThisFile;
     var bufferFilter = new UpdateBufferFilter(workspace);
     bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller));
     return await controller.FindUsages(request);
 }
        private async Task<SignatureHelp> GetSignatureHelp(string source)
        {
            var lineColumn = TestHelpers.GetLineAndColumnFromDollar(source);
            source = source.Replace("$", string.Empty);

            var request = new Request()
            {
                FileName = "dummy.cs",
                Line = lineColumn.Line,
                Column = lineColumn.Column,
                Buffer = source
            };

            var workspace = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, null);
            return await controller.GetSignatureHelp(request);
        }
        private async Task<IEnumerable<AutoCompleteResponse>> FindCompletionsAsync(string source, AutoCompleteRequest request = null)
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(source);
            var controller = new OmnisharpController(workspace, null);

            if (request == null)
            {
                request = CreateRequest(source);
            }

            var response = await controller.AutoComplete(request);
            var completions = response as IEnumerable<AutoCompleteResponse>;
            return completions;
        }
        public async Task HighlightExcludesUnwantedNames()
        {
            var code = @"
                namespace N1
                {
                    class C1 { int n = true; }
                }
            ";

            var workspace = TestHelpers.CreateSimpleWorkspace(new Dictionary<string, string>
            {
                { "a.cs", code }
            });

            var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
            var regions = await controller.Highlight(new HighlightRequest() { FileName = "a.cs", ExcludeClassifications = new [] { HighlightClassification.Name } });

            Assert.DoesNotContain(regions.Highlights, x => x.Kind.EndsWith(" name"));
        }
 private async Task<IEnumerable<string>> FindCompletionsAsync(string source)
 {
     var workspace = TestHelpers.CreateSimpleWorkspace(source);
     var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions());
     var request = CreateRequest(source);
     var response = await controller.AutoComplete(request);
     var completions = response as IEnumerable<AutoCompleteResponse>;
     return completions.Select(completion => BuildCompletion(completion));
 }
        private async Task<FixUsingsResponse> RunFixUsings(string fileContents)
        {
            var workspace = TestHelpers.CreateSimpleWorkspace(fileContents, fileName);

            var fakeOptions = new FakeOmniSharpOptions();
            fakeOptions.Options = new OmniSharpOptions();
            fakeOptions.Options.FormattingOptions = new FormattingOptions() {NewLine = "\n"};
            var controller = new OmnisharpController(workspace, fakeOptions);
            var request = new FixUsingsRequest
            {
                FileName = fileName,
                Buffer = fileContents
            };
            return await controller.FixUsings(request);
        }
 private async Task<QuickFixResponse> FindSymbols(string source)
 {
     var workspace = TestHelpers.CreateSimpleWorkspace(source);
     var controller = new OmnisharpController(workspace, null);
     return await controller.FindSymbols();
 }